|
file:///C:/Users/dell/AppData/Roaming/Tencent/Users/201019512/QQ/WinTemp/RichOle/OJBOACFANY97WY$%60)M%60DH%25Q.png
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]="V1= V2= Vout=";//显示字符。
uchar code table1[]="v"; //显示符号。
uchar code table2[]="0123456789."; //显示数字。
sbit rs=P2^0; //LCD读写。
sbit rw=P2^1; //LCD读写。
sbit en=P2^2; //LCD使能。
////
sbit CLK=P2^4; //ADC时钟。
sbit ST=P2^5; //ADC开始。
sbit EOC=P2^6;
sbit OE=P2^7;
float V2;
uchar num;
uint V1,Vot,bai,shi,ge;
//延时函数
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void write_com(uchar com)//写命令
{
rs=0;
rw=0;
P0=com;
delay(22);
en=1;
en=0;
}
void write_data(uchar date)//写数据
{
rs=1;
rw=0;
P0=date;
delay(22);
en=1;
en=0;
}
void init()//初始化
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void adc()//ADC开始采集数据
{
EA=1;
ST=0;
ST=1;
delay(22);
ST=0;
while(EOC==0);
OE=1;
EA=0;
V1=P1;
V2=((float)P1*5.0/255)*1.005;//*1.005 是数值255以内的误差补偿系数。
OE=0;
}
display()//显示函数
{
init();
write_com(0x80);
for(num=0;num<3;num++)
{
write_data(table[num]);
delay(5);
}
write_com(0x83);
for(num=0;num<1;num++)
{
adc();
V2=V2*100;
bai=(int)V2/100;
write_data(table2[bai]);
delay(5);
shi=(int)V2%100/10;
write_data(table2[shi]);
delay(5);
ge=(int)V2%10;
write_data(table2[ge]);
delay(5);
write_data(table2[10]);
delay(5);
}
write_com(0x87);
write_data(table2[0]);
write_data(table1[0]);
delay(5);
write_com(0x80+0x40);
for(num=0;num<5;num++)
{
write_data(table[num+8]);
delay(5);
}
write_com(0x80+0x45);
for(num=0;num<1;num++)
{
adc();
V2=V2*100;
bai=(int)V2/100;
write_data(table2[bai]);
delay(5);
shi=(int)V2%100/10;
write_data(table2[shi]);
delay(5);
ge=(int)V2%10;
write_data(table2[ge]);
delay(5);
write_data(table2[10]);
delay(5);
}
write_com(0x80+0x49);
write_data(table2[0]);
write_data(table1[0]);
delay(5);
while(1);
}
void main()
{
EA=1;
TMOD=0x01;
TH0=0xff;
TL0=0xb4;
ET0=1;
TR0=1;
while(1)
{
adc();
display();
}
}
void timer()interrupt 1
{
TH0=0xff;
TL0=0xf0;
CLK=~CLK;
}
|
|