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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2582|回復: 17
打印 上一主題 下一主題
收起左側

51單片機LCD1602仿真為什么字符只能顯示一兩秒?

[復制鏈接]
回帖獎勵 1 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
#
ID:702127 發(fā)表于 2022-6-8 18:50 | 只看該作者 |只看大圖 回帖獎勵 |正序瀏覽 |閱讀模式
程序在開發(fā)板上嘗試過,沒有任何問題,但是到了仿真里面就是只能顯示一兩秒,求教!附上完整代碼和仿真。
代碼:
#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)  //延時程序  
{  
    while(i--);  
}  

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

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

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

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

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

    LCD_WriteCom(0x38);     //功能設定,設置雙行顯示,8位數(shù)據(jù)總線DB0~DB7,5X7點陣/字符  
    LCD_WriteCom(0x0c);     //顯示開關設定,開顯示,不顯示光標  
    LCD_WriteCom(0x06);     //進入模式設定,寫一個數(shù)據(jù)后光標向右移動,顯示屏不移動  
    LCD_WriteCom(0x01);     //清屏,清空DDRAM的內容  
}  

/*顯示字符串函數(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')                         //如果沒顯示到字符串結尾時,就進入循環(huán)  
    {  
        if(x==0)                                 //在第一行顯示  
        {  
            y|=0x80;  
            LCD_WriteCom(y);  //將需要顯示的列數(shù)位置與0x80相與,得到在該行下的具體位置  
            LCD_WriteData(*p); //顯示p中的字符  
            y++;                        //顯示完一個字符后,列數(shù)+1  
            p++;                       //指針地址+1,顯示下一個字符  
        }  
        if(x==1)                                //在第二行顯示  
        {  
            y|=0xc0;  
            LCD_WriteCom(y); //將需要顯示的列數(shù)位置與0xc0相與,得到在該行下的具體位置  
            LCD_WriteData(*p); //顯示p中的字符  
            y++;                        //顯示完一個字符后,列數(shù)+1  
            p++;                       //指針地址+1,顯示下一個字符  
        }  
    }         
}  

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


1602例程.rar

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

1602仿真

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

17#
ID:1034505 發(fā)表于 2022-6-14 23:37 來自觸屏版 | 只看該作者
可能延時太短
回復

使用道具 舉報

16#
ID:342822 發(fā)表于 2022-6-12 17:55 | 只看該作者
或者改為while(*p != 0)
回復

使用道具 舉報

15#
ID:342822 發(fā)表于 2022-6-12 09:13 | 只看該作者

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

使用道具 舉報

14#
ID:702127 發(fā)表于 2022-6-11 21:26 | 只看該作者
ii11nnocent 發(fā)表于 2022-6-11 14:43
做了,我在硬件上嘗試,是沒問題的。

我也是,實際搭建的硬件沒問題,一到proteus就顯示一兩次,我覺得可能是模擬環(huán)境和實際硬件有一些差距,找了好多原因,結果還是解決不了,是在不行就用別人能顯示的1602例子吧,有可能是延時的問題,謝謝各位。
回復

使用道具 舉報

13#
ID:342822 發(fā)表于 2022-6-11 16:08 | 只看該作者
本帖最后由 taotie 于 2022-6-11 17:40 編輯
ii11nnocent 發(fā)表于 2022-6-11 14:36
您用Proteus仿真可以正常顯示



02兩個字缺失
回復

使用道具 舉報

12#
ID:161164 發(fā)表于 2022-6-11 15:59 來自觸屏版 | 只看該作者
ii11nnocent 發(fā)表于 2022-6-11 14:42
我也嘗試過這樣寫,這樣寫的話就是固定顯示了,不能刷新,這樣是沒問題的。一旦循環(huán)顯示,就只能顯示一兩 ...

如果要更新顯示內容
就只在有內容改變時更新一次
或加一些延時
不要高速刷新
回復

使用道具 舉報

11#
ID:702127 發(fā)表于 2022-6-11 14:44 | 只看該作者
hy47566398 發(fā)表于 2022-6-9 12:46
while(*p != '0')      這句錯了!

應該換成\0嗎
回復

使用道具 舉報

10#
ID:702127 發(fā)表于 2022-6-11 14:43 | 只看該作者
820845001 發(fā)表于 2022-6-9 15:47
看下是不是定時里面沒做循環(huán)

做了,我在硬件上嘗試,是沒問題的。
回復

使用道具 舉報

9#
ID:702127 發(fā)表于 2022-6-11 14:42 | 只看該作者
lkc8210 發(fā)表于 2022-6-9 09:14
如果只顯示固定文字
運行一次就可以了

我也嘗試過這樣寫,這樣寫的話就是固定顯示了,不能刷新,這樣是沒問題的。一旦循環(huán)顯示,就只能顯示一兩秒,然后就消失了。
回復

使用道具 舉報

8#
ID:702127 發(fā)表于 2022-6-11 14:36 | 只看該作者

您用Proteus仿真可以正常顯示
回復

使用道具 舉報

7#
ID:1033526 發(fā)表于 2022-6-9 15:47 | 只看該作者
看下是不是定時里面沒做循環(huán)
回復

使用道具 舉報

6#
ID:1012735 發(fā)表于 2022-6-9 12:46 | 只看該作者
while(*p != '0')      這句錯了!
回復

使用道具 舉報

5#
ID:161164 發(fā)表于 2022-6-9 09:14 | 只看該作者
如果只顯示固定文字
運行一次就可以了
  1. void main(void)  
  2. {  
  3.     LCD_Init();  
  4.     LCD_WriteString(1,1,"LCD1602");  //在第一行第五列開始顯示字符串
  5.     while(1)  
  6.     {  
  7.     }  
  8. }
復制代碼


回復

使用道具 舉報

地板
ID:1033099 發(fā)表于 2022-6-9 08:36 | 只看該作者
delay太長了
回復

使用道具 舉報

板凳
ID:372579 發(fā)表于 2022-6-9 08:27 | 只看該作者
要把仿真圖也上傳上來看看,還有你對比下是不是電路圖畫錯了
回復

使用道具 舉報

沙發(fā)
ID:390416 發(fā)表于 2022-6-9 08:14 | 只看該作者
http://www.zg4o1577.cn/bbs/dpj-205768-1.html
LCD1602液晶最新資料 說明了具體的時間要求

LCD1602液晶最新資料 說明了具體的時間要求
http://www.zg4o1577.cn/bbs/dpj-214747-1.html
回復

使用道具 舉報

樓主
ID:342822 發(fā)表于 2022-6-8 23:21 | 只看該作者
沒問題
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 麻豆亚洲| 午夜一区二区三区视频 | 国产视频在线观看一区二区三区 | 国产精品国产自产拍高清 | 欧美日本韩国一区二区三区 | 午夜羞羞 | 亚洲精品国产成人 | 毛片视频免费观看 | 成人午夜影院 | 日韩午夜在线播放 | 欧美在线视频一区 | 欧美成人激情 | 国产成人精品一区二区三区在线观看 | 一区二区三区高清 | www亚洲免费国内精品 | 一本久久a久久精品亚洲 | 久久草视频 | 国产欧美三区 | 欧美日韩亚洲一区 | 国产精品精品久久久 | 欧美精品被 | 91国内在线观看 | 毛片久久久 | 伊人狠狠干 | 久久精品视频在线免费观看 | 国产精品一区在线 | 日韩av一区二区在线观看 | 久久伊人影院 | 天堂色网 | 日韩不卡在线观看 | 能免费看的av | 国产高清精品网站 | 欧美国产亚洲一区二区 | 一级片aaa | 精品亚洲一区二区 | 综合色在线 | 精品一区二区三区在线观看国产 | 国产高清性xxxxxxxx | 亚洲精品在线视频 | 视频在线h | 欧美亚州综合 |