为啥,LCD显示不出来

2019-07-15 13:56发布

LCD.h如图
init.h如图
.c 文件中main函数中如图
哪里有问题
GEK2CT95D%Z[LVHUFGI7.png
L_2`P`]C7}MEJ464G2)37MB.png
(1Y~N6FXL$SPH9JITV][UVL.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
张*猛
1楼-- · 2019-07-15 17:43
感觉你的语句有问题   好久没写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);     //显示地址
}
你参考一下这个
连山归藏
2楼-- · 2019-07-15 22:23
张*猛 发表于 2016-5-17 18:31
感觉你的语句有问题   好久没写12864并行的程序啦   
bit lcd_busy()
{                          

不好意思,我这里没有12864这个显示屏,只有1602,没法验证你的建议,不过,还是谢谢你
geminiguy07
3楼-- · 2019-07-16 04:09
很有可能是你的时序有问题,而检测程序是检查不出问题的,有条件的话可以用示波器看看你的时序是否正确。
有时候会因为MCU和晶振的不同,同一个程序运行的速度也不一样。对于LCD类显示元件而言,时序是很重要的,等待的时间和操作的时间不在它规定范围内是无法显示出来的!
遇到此类问题,第一个要想到时序是否正确,如果时序正确还是没显示则再考虑是不是程序问题,如果程序也没问题,那就再检查硬件。
以上是我个人的经验,希望对你有用。
qw520
4楼-- · 2019-07-16 07:19
 精彩回答 2  元偷偷看……

一周热门 更多>