|
我学了视频中的LCD1602教程后,自己手打了一个程序。功能是在液晶上第一排显示0~F,第二排显示F~0。但是我的液晶能亮不能显示出任何东西。
我的程序是模仿教程中的来的,可是不知道哪里出了问题(我自己已经校对过N遍了),实在是要崩溃了,求大佬帮我看看,到底是哪里出了问题。感谢感谢!
#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
u8 xianshi[16]="0123456789ABCDEF";
#define lcd P0
sbit lcd_RW=P2^6;
sbit lcd_RS=P2^5;
sbit lcd_E=P2^7;
void delay1ms(void) //误差 0us
{
u8 a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void delay5ms(void) //误差 0us
{
u8 a,b;
for(b=19;b>0;b--)
for(a=130;a>0;a--);
}
void lcdwritecom(u8 m)
{
lcd_E=0;
lcd_RS=0;
lcd_RW=0;
lcd=m;
delay1ms();
lcd_E=1;
delay5ms();
lcd_E=0;
}
void lcdwritedat(u8 dat)
{ lcd_E=0;
lcd_RS=1;
lcd_RW=0;
lcd=dat;
delay1ms();
lcd_E=1;
delay5ms();
lcd_E=0;
}
void lcd1602int()
{
lcdwritecom(0x38);
lcdwritecom(0x0c);
lcdwritecom(0x06);
lcdwritecom(0x01);
lcdwritecom(0x80);
}
void main()
{
u8 i;
lcd1602int();
for(i=0;i<16;i++)
{
lcdwritedat(xianshi[i]);
}
lcdwritecom(0x40+0x80);
for(i=0;i<16;i++)
{
lcdwritedat(xianshi[15-i]);
}
while(1);
}
|
|