郁闷啊!protues中AT89C52无法点亮LCD1602,以下分别是我的电路图和源码,大家有空帮我看看,谢谢咯!
#include<reg51.h>
#define uint signed int
#define uchar signed char
uchar aa[]={"current voiltage :"};
sbit lcden = P3^4;
sbit lcdrs = P3^5;
sbit START = P2^0;
sbit CLK = P2^1;
sbit EOC = P2^2;
sbit OE = P2^3;
sbit AA = P2^4;
sbit BB = P2^5;
sbit CC = P2^6;
float v;
void delay(uint ms) //延时函数
{
uchar i;
while(ms--);
{
for(i<0;i<120;i++);
}
}
void write_com(uchar com) //写命令函数
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date) //写数据函数
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void LCD1602_init() //1602初始化函数
{
lcden=0;
write_com(0x38);
write_com(0x0C);
write_com(0x01);
}
void display (int v)
{
int shu,i;
write_com(0x80);
for(i=0;i<16;i++)
{
write_data(aa[i]);
}
write_com(0x80+0x46);
shu=v/100;
write_data(shu+'0');
delay(5);
write_data('.');
delay(5);
shu=v%100/10;
delay(5);
write_data(shu+'0');
delay(5);
shu=v%10;
write_data(shu+'0');
delay(5);
write_data('V');
}
void main()
{
LCD1602_init();
TMOD=0x02;
TH0=0x14;
TL0=0X14;
IE=0X82;
TR0=1;
P2=0x0f; //选用通道0,CLK=1,START=1,EOC=1,OE=1.
while(1)
{
START=0;
START=1;
START=0;
while(EOC=0);
OE=1;
v=P1*1.0/255*500;
display(v);
OE=0;
}
}
void Timer0() interrupt 1
{
CLK=!CLK;
}