久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 51單片機(jī)LCD1602仿真為什么字符只能顯示一兩秒? [打印本頁(yè)]

作者: ii11nnocent    時(shí)間: 2022-6-8 18:50
標(biāo)題: 51單片機(jī)LCD1602仿真為什么字符只能顯示一兩秒?
程序在開(kāi)發(fā)板上嘗試過(guò),沒(méi)有任何問(wèn)題,但是到了仿真里面就是只能顯示一兩秒,求教!附上完整代碼和仿真。
代碼:
#include "reg52.h"  

#define LCD_DB  P1              //宏定義P1口  
sbit RW = P3^5;  
sbit RS = P3^6;  
sbit E  =   P3^4;                       //位定義LCD1602的RW、RS和E端口  

void delay(unsigned int i);  
void LCD_WriteCom(unsigned char com);  
void LCD_WriteData(unsigned char dat);  
void LCD_Init(void);  
void LCD_WriteString(unsigned int x,unsigned int y,unsigned char *p);  

void delay(unsigned int i)  //延時(shí)程序  
{  
    while(i--);  
}  

void LCD_WriteCom(unsigned char com)    //寫(xiě)入命令  
{  
    LCD_DB = com;                   //待傳送代碼放入P0口  

    delay(100);                     //延時(shí),等待數(shù)據(jù)穩(wěn)定  
    RS = 0;                             //選擇發(fā)送命令  
    RW = 0;                             //選擇寫(xiě)入  
    E = 1;                              //寫(xiě)入時(shí)序  
    delay(100);                     //下降沿保持時(shí)間  
    E = 0;  
}  

void LCD_WriteData(unsigned char dat)       //寫(xiě)入數(shù)據(jù)  
{  
    LCD_DB = dat;                   //待傳送代碼放入P0口  

    delay(100);                     //延時(shí),等待數(shù)據(jù)穩(wěn)定  
    RS = 1;                             //選擇輸入數(shù)據(jù)  
    RW = 0;                             //選擇寫(xiě)入  
    E = 1;                              //寫(xiě)入時(shí)序  
    delay(100);                     //下降沿保持時(shí)間  
    E = 0;  
}  

void LCD_Init(void)         //LCD初始化子程序  
{  

    LCD_WriteCom(0x38);     //功能設(shè)定,設(shè)置雙行顯示,8位數(shù)據(jù)總線(xiàn)DB0~DB7,5X7點(diǎn)陣/字符  
    LCD_WriteCom(0x0c);     //顯示開(kāi)關(guān)設(shè)定,開(kāi)顯示,不顯示光標(biāo)  
    LCD_WriteCom(0x06);     //進(jìn)入模式設(shè)定,寫(xiě)一個(gè)數(shù)據(jù)后光標(biāo)向右移動(dòng),顯示屏不移動(dòng)  
    LCD_WriteCom(0x01);     //清屏,清空DDRAM的內(nèi)容  
}  

/*顯示字符串函數(shù),x為行數(shù):1~2,y為列數(shù):1~16,*p是要顯示的字符串指針*/  
void LCD_WriteString(unsigned int x,unsigned int y,unsigned char *p)  
{  
     x--;  
    y--;  
    while(*p != '0')                         //如果沒(méi)顯示到字符串結(jié)尾時(shí),就進(jìn)入循環(huán)  
    {  
        if(x==0)                                 //在第一行顯示  
        {  
            y|=0x80;  
            LCD_WriteCom(y);  //將需要顯示的列數(shù)位置與0x80相與,得到在該行下的具體位置  
            LCD_WriteData(*p); //顯示p中的字符  
            y++;                        //顯示完一個(gè)字符后,列數(shù)+1  
            p++;                       //指針地址+1,顯示下一個(gè)字符  
        }  
        if(x==1)                                //在第二行顯示  
        {  
            y|=0xc0;  
            LCD_WriteCom(y); //將需要顯示的列數(shù)位置與0xc0相與,得到在該行下的具體位置  
            LCD_WriteData(*p); //顯示p中的字符  
            y++;                        //顯示完一個(gè)字符后,列數(shù)+1  
            p++;                       //指針地址+1,顯示下一個(gè)字符  
        }  
    }         
}  

void main(void)  
{  
    LCD_Init();  
    while(1)  
    {  
        LCD_WriteString(1,1,"LCD1602");  //在第一行第五列開(kāi)始顯示字符串
    }  
}


1602例程.rar

48.85 KB, 下載次數(shù): 35

1602仿真


作者: taotie    時(shí)間: 2022-6-8 23:21
沒(méi)問(wèn)題
作者: 人人學(xué)會(huì)單片機(jī)    時(shí)間: 2022-6-9 08:14
http://www.zg4o1577.cn/bbs/dpj-205768-1.html
LCD1602液晶最新資料 說(shuō)明了具體的時(shí)間要求

LCD1602液晶最新資料 說(shuō)明了具體的時(shí)間要求
http://www.zg4o1577.cn/bbs/dpj-214747-1.html
作者: aide51    時(shí)間: 2022-6-9 08:27
要把仿真圖也上傳上來(lái)看看,還有你對(duì)比下是不是電路圖畫(huà)錯(cuò)了
作者: startxk    時(shí)間: 2022-6-9 08:36
delay太長(zhǎng)了
作者: lkc8210    時(shí)間: 2022-6-9 09:14
如果只顯示固定文字
運(yùn)行一次就可以了
  1. void main(void)  
  2. {  
  3.     LCD_Init();  
  4.     LCD_WriteString(1,1,"LCD1602");  //在第一行第五列開(kāi)始顯示字符串
  5.     while(1)  
  6.     {  
  7.     }  
  8. }
復(fù)制代碼



作者: hy47566398    時(shí)間: 2022-6-9 12:46
while(*p != '0')      這句錯(cuò)了!
作者: 820845001    時(shí)間: 2022-6-9 15:47
看下是不是定時(shí)里面沒(méi)做循環(huán)
作者: ii11nnocent    時(shí)間: 2022-6-11 14:36
taotie 發(fā)表于 2022-6-8 23:21
沒(méi)問(wèn)題

您用Proteus仿真可以正常顯示
作者: ii11nnocent    時(shí)間: 2022-6-11 14:42
lkc8210 發(fā)表于 2022-6-9 09:14
如果只顯示固定文字
運(yùn)行一次就可以了

我也嘗試過(guò)這樣寫(xiě),這樣寫(xiě)的話(huà)就是固定顯示了,不能刷新,這樣是沒(méi)問(wèn)題的。一旦循環(huán)顯示,就只能顯示一兩秒,然后就消失了。
作者: ii11nnocent    時(shí)間: 2022-6-11 14:43
820845001 發(fā)表于 2022-6-9 15:47
看下是不是定時(shí)里面沒(méi)做循環(huán)

做了,我在硬件上嘗試,是沒(méi)問(wèn)題的。
作者: ii11nnocent    時(shí)間: 2022-6-11 14:44
hy47566398 發(fā)表于 2022-6-9 12:46
while(*p != '0')      這句錯(cuò)了!

應(yīng)該換成\0嗎
作者: lkc8210    時(shí)間: 2022-6-11 15:59
ii11nnocent 發(fā)表于 2022-6-11 14:42
我也嘗試過(guò)這樣寫(xiě),這樣寫(xiě)的話(huà)就是固定顯示了,不能刷新,這樣是沒(méi)問(wèn)題的。一旦循環(huán)顯示,就只能顯示一兩 ...

如果要更新顯示內(nèi)容
就只在有內(nèi)容改變時(shí)更新一次
或加一些延時(shí)
不要高速刷新
作者: taotie    時(shí)間: 2022-6-11 16:08
本帖最后由 taotie 于 2022-6-11 17:40 編輯
ii11nnocent 發(fā)表于 2022-6-11 14:36
您用Proteus仿真可以正常顯示



02兩個(gè)字缺失

作者: ii11nnocent    時(shí)間: 2022-6-11 21:26
ii11nnocent 發(fā)表于 2022-6-11 14:43
做了,我在硬件上嘗試,是沒(méi)問(wèn)題的。

我也是,實(shí)際搭建的硬件沒(méi)問(wèn)題,一到proteus就顯示一兩次,我覺(jué)得可能是模擬環(huán)境和實(shí)際硬件有一些差距,找了好多原因,結(jié)果還是解決不了,是在不行就用別人能顯示的1602例子吧,有可能是延時(shí)的問(wèn)題,謝謝各位。
作者: taotie    時(shí)間: 2022-6-12 09:13

只需將while(*p != '0') 改為while(*p != '\0') 就OK

作者: taotie    時(shí)間: 2022-6-12 17:55
或者改為while(*p != 0)
作者: 13132984104    時(shí)間: 2022-6-14 23:37
可能延時(shí)太短




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品一级电影 | 国产午夜一级 | 精品久久久久久亚洲综合网 | www成年人视频 | 国产精品久久片 | 波多野结衣中文视频 | 欧美日韩一二区 | 精品乱码一区二区三四区视频 | 中文字幕在线视频免费视频 | 欧美 视频 | 亚洲三级在线观看 | www.99热这里只有精品 | av中文字幕网 | 在线91| 亚洲成人一级 | 午夜影视| 影音先锋中文字幕在线观看 | 中文字幕乱码视频32 | 成人国产网站 | 91在线视频国产 | 久色视频在线 | 亚洲欧洲中文 | 国产一区二区三区亚洲 | 一区二区影视 | 欧美中文在线 | 亚洲影音| 欧美在线一区二区三区 | 国产午夜在线 | 国产美女精品视频 | 国产精品成人一区二区三区夜夜夜 | 欧美激情一区二区三区 | 高清18麻豆| 男女羞羞视频在线 | 久久99网| 激情婷婷| 日韩视频在线免费观看 | 久久色视频 | 国产福利观看 | 日本在线免费看最新的电影 | 久热精品在线观看视频 | 中文字幕在线观 |