#include<reg52.h>
#include"1602.h"
#define uint unsigned int
#define uchar unsigned char
sbit ale=P2^6;
sbit start=P2^7;
sbit eoc=P3^0;
sbit oe=P3^1;
sbit adda=P2^0;
sbit addb=P2^1;
sbit addc=P2^2;
uchar add;
uint voltdata,realvolt;
void addselect()
{
switch(add)
{
case 0:adda=0;addb=0;addc=0;break;
case 1:adda=1;addb=0;addc=1;break;
case 2:adda=0;addb=1;addc=0;break;
default:break;
}
}
uint adtrans()
{
addselect();
ale=1;
ale=0;
start=1; //启动AD转换。
start=0;
while(eoc==0); //等待转换结束。
oe=1;
voltdata=P1; //出入转换结果。
delay(1);
oe=0;
voltdata=(100*voltdata)/51; //处理运算结果。
return voltdata;
}
void disvolt()
{
uchar qian,bai,shi,ge;
switch(add)
{
case 0:realvolt=voltdata;writelcd_cmd(0x80+15);writelcd_dat('0');writelcd_cmd(0xc0+4);writelcd_dat('0');writelcd_dat('5');break;
case 1:realvolt=voltdata*2;writelcd_cmd(0x80+15);writelcd_dat('1');writelcd_cmd(0xc0+4);writelcd_dat('1');writelcd_dat('0');break;
case 2:realvolt=voltdata*10;writelcd_cmd(0x80+15);writelcd_dat('2');writelcd_cmd(0xc0+4);writelcd_dat('5');writelcd_dat('0');break;
default:break;
}
qian=realvolt/1000;
bai=realvolt%1000/100;
shi=realvolt%100/10;
ge=realvolt%10;
writelcd_cmd(0xc0+9);
writelcd_dat(qian+0x30);
writelcd_dat(bai+0x30);
writelcd_cmd(0xc0+12);
writelcd_dat(shi+0x30);
writelcd_dat(ge+0x30);
}
void init()
{
EA=1;
EX0=1;
IT0=1;
add=0;
lcd_init();
}
void main()
{
init();
while(1)
{
adtrans();
disvolt();
}
}
void ext() interrupt 0
{
add++;
add=add%3;
}