#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sfr P1ASF=0x9D;
sfr ADC_CONTR=0xBC;
sfr ADC_RES=0xBD;
sfr ADC_RESL=0xBE;
sfr AUXR1=0XA2;
sbit rs=P2^5;
sbit rw=P2^6;
sbit e=P2^7;
//sbit oe=P3^6;
uchar code string[]="current voltige";
void delay(uint i)
{
uint j;
while(i--)
for(j=0;j<1000;j++);
}
void write_comand(uchar comand)
{
rs=0;
rw=0;
e=0;
P0=comand;
delay(1);
e=1;
delay(1);
e=0;
}
void write_data(uchar date)
{
rs=1;
rw=0;
e=0;
P0=date;
delay(1);
e=1;
delay(1);
e=0;
}
void display(uint num,uchar add)
{
uchar bai,shi,ge,i;
bai=num/100;
shi=num/10%10;
ge=num%10;
write_comand(0x80+add);
write_data('0'+bai);
write_data('.');
write_data('0'+shi); // 默认地址自动加1,因此不需再写命令
write_data('0'+ge);
write_data('V');
delay(10);
}
void lcd_init()
{
delay(100);
write_comand(0x38);
write_comand(0x06);
write_comand(0x0c);
write_comand(0x01);
}
uint ad_int1()
{
uint adh;
uchar adl;
ADC_CONTR=0x80;
delay(10);
ADC_CONTR=0x88;
delay(10);
if((ADC_CONTR & 0x10)==0x10)
{
ADC_CONTR=ADC_CONTR & 0xef;
adh=ADC_RES;
adl=ADC_RESL;
adh=adh<<2 | adl;
}
ADC_CONTR=0;
return adh;
}
uint ad_int2()
{
uint adh;
uchar adl;
ADC_CONTR=0x81;
delay(10);
ADC_CONTR=0x89;
delay(10);
if((ADC_CONTR & 0x10)==0x10)
{
ADC_CONTR=ADC_CONTR & 0xef;
adh=ADC_RES;
adl=ADC_RESL;
adh=adh<<2 | adl;
}
ADC_CONTR=0;
return adh;
}
void main()
{
uint m,n;
lcd_init();
// oe=0;
P1ASF=0x03;
ADC_CONTR=0x80;
AUXR1=AUXR1 & 0xfb;
delay(10);
while(1)
{
m=ad_int1()*1.0/1024*446;
n=ad_int2()*1.0/1024*446;
display(m,0);
delay(100);
display(n,6);
delay(100);
}
}