#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P2^0; //LCD读写
sbit lcden=P2^1; //LCD使能
//*****************************************
sbit DA=P2^2;
sbit DB=P2^3;
sbit DC=P2^4;
sbit ST=P2^5; //LCD驱动口
sbit OE=P2^6;
sbit EOC=P2^7;
sbit F=P3^0;
//********************************************
sbit KR=P3^1;
uchar num;
uchar code table_1[16]="taoyiming.c";
uchar table_2[16]="0.00000";
void delay(uint x) //延时函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com) //LCD写指令函数
{
lcdrs=0;
P0=com;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
void write_data(uchar date) //LCD写数据函数
{
lcdrs=1;
P0=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
void display()
{
write_com(0x80+0x40);
for(num=0;num<7;num++)
{
write_data(table_2[num]);
delay(1);
}
}
void ad0809()
{
uchar a;
float b=222;
uint i;
DC=0;
DA=DB=1;
ST=1;
_nop_(); //延时一个机器周期
ST=0;
display();
while(EOC!=1);
P1=0xff;
OE=0;
_nop_();
OE=1;
_nop_();
a=P1;
OE=0;
b=a*(5.0/256.0)*10000;
i=(uint)b;
table_2[0]=i/10000+48;
table_2[1]='.';
table_2[2]=i/1000%10+48;
table_2[3]=i/100%10+48;
table_2[4]=i/10%10+48;
table_2[5]=i%10+48;
display();
}
void init() //初始化函数
{
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<11;num++)
{
write_data(table_1[num]);
delay(1);
}
TMOD=0X01;
TH2=(65536-5000)/256;
TL2=(65536-5000)%256;
EA=1;
ET2=1;
TR2=1;
}
void main()
{
init();
while(1)
{
KR=1;
if(KR==0){while(KR==0);ad0809();}
}
}
void timer()interrupt 5
{
TH2=(65536-5000)/256;
TL2=(65536-5000)%256;
F=0;
F=~F;
}
由于没有找到有源晶振,所以我就用定时器产生一个时钟脉冲,
void timer()interrupt 5
{
TH2=(65536-5000)/256;
TL2=(65536-5000)%256;
F=0;
F=~F;
}
由于时间问题,我就不把实物展示出来了,下面是我的电路连接图:

排阻部分

电源部分

液晶部分

ADC0809部分

单片机部分

被测电阻和按键部分
|