为啥,LCD显示不出来
init.h如图
.c 文件中main函数中如图
哪里有问题
感觉你的语句有问题 好久没写12864并行的程序啦
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P0&0x80);
LCD_EN = 0;
return(result);
}
void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
void lcd_wdat(uchar dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
void lcd_init()
{
LCD_PSB = 1; //并口方式
lcd_wcmd(0x34); //扩充指令操作
delay(5);
lcd_wcmd(0x30); //基本指令操作
delay(5);
lcd_wcmd(0x0C); //显示开,关光标
delay(5);
lcd_wcmd(0x01); //清除LCD的显示内容
delay(5);
}
void lcd_pos(uchar X,uchar Y) //确定显示位置
{
uchar pos;
if (X==0)
{X=0x80;}
else if (X==1)
{X=0x90;}
else if (X==2)
{X=0x88;}
else if (X==3)
{X=0x98;}
pos = X+Y ;
lcd_wcmd(pos); //显示地址
}
你参考一下这个
不好意思,我这里没有12864这个显示屏,只有1602,没法验证你的建议,不过,还是谢谢你
很有可能是你的时序有问题,而检测程序是检查不出问题的,有条件的话可以用示波器看看你的时序是否正确。
有时候会因为MCU和晶振的不同,同一个程序运行的速度也不一样。对于LCD类显示元件而言,时序是很重要的,等待的时间和操作的时间不在它规定范围内是无法显示出来的!
遇到此类问题,第一个要想到时序是否正确,如果时序正确还是没显示则再考虑是不是程序问题,如果程序也没问题,那就再检查硬件。
以上是我个人的经验,希望对你有用。
小手一抖,经验到手