欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 732|回復: 8
收起左側(cè)

仿真時LCD1602的檢測讀忙信號

[復制鏈接]
ID:1160336 發(fā)表于 2025-9-13 18:37 來自觸屏版 | 顯示全部樓層 |閱讀模式
仿真時LCD1602_E的電平一直跳,是因為一直在執(zhí)行do while循環(huán)?所以一直都是忙的狀態(tài)嗎,這還怎么顯示啊
mmexport1757759658700.png
回復

使用道具 舉報

ID:102963 發(fā)表于 2025-9-14 08:34 | 顯示全部樓層
Lcd1602不檢測忙狀態(tài)也是可以的。
#define LCD_DATA P0                                //液晶看數(shù)據(jù)口定義
sbit LCD_RS=P3^2;                                 //LCD1602數(shù)據(jù)/命令選擇引腳,H:數(shù)據(jù),L:命令
sbit LCD_RW=P3^3;                                 //LCD1602讀寫引腳,H:數(shù)據(jù)寄存器,L:指令寄存器
sbit LCD_EN=P3^4;                                 //LCD1602使能引腳,下降沿觸發(fā)
void Delay(uint i)                                //延時函數(shù)               
{
        while(i--);
}
void Delay_MS(uint z)                         //z*1MS延時函數(shù)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void Lcd_W_Com(uchar com)                //液晶寫指令函數(shù)
{
        LCD_RS=0;
        LCD_RW=0;
        LCD_DATA=com;
        Delay(20);
        LCD_EN=1;
        Delay(20);
        LCD_EN=0;
}
void Lcd_W_Dat(uchar dat)                //液晶寫數(shù)據(jù)函數(shù)
{
        LCD_RS=1;
        LCD_RW=0;
        LCD_DATA=dat;
        Delay(20);
        LCD_EN=1;
        Delay(20);
        LCD_EN=0;       
}
void Lcd_Show_Str(uchar hang,add,uchar *p)//液晶寫字符串函數(shù)
{
        if(hang==1)                                   //液晶第一行
                Lcd_W_Com(0x80+add);
        else                                                  //液晶第二行
                Lcd_W_Com(0x80+0x40+add);
        while(1)
        {
                if(*p=='\0')
                        break;
                Lcd_W_Dat(*p);                         //寫入數(shù)據(jù)
                p++;
        }       
}
void Lcd_Init()                                        //液晶初始化
{
        Lcd_W_Com(0x38);                        //數(shù)據(jù)總線為8位,顯示2行,5x7點陣
        Lcd_W_Com(0x0c);                        //開顯示,有光標,光標閃爍
        Lcd_W_Com(0x06);                        //光標自動右移
        Delay(1000);                                //等待設(shè)置完成
}
回復

使用道具 舉報

ID:584814 發(fā)表于 2025-9-14 10:53 | 顯示全部樓層
實際使用僅顯示時不需要這個讀忙,注釋掉就可以。
回復

使用道具 舉報

ID:879809 發(fā)表于 2025-9-14 15:59 | 顯示全部樓層
很可能是仿真模型不完備,忽略這個信號試試。
回復

使用道具 舉報

ID:619259 發(fā)表于 2025-9-15 09:48 | 顯示全部樓層
在要求高效、高速且可靠的項目中,使用讀忙信號是更好的選擇。
你的程序錯在第16行。
以下程序供參考:
void LCD_CheckBusy(void)
{
    unsigned char busy;
   
    LCD_DATA = 0xFF;    // 設(shè)置數(shù)據(jù)端口為輸入模式(先寫1)
    LCD_RS = 0;         // RS=0,選擇狀態(tài)寄存器
    LCD_RW = 1;         // RW=1,選擇讀模式
   
    do {
        LCD_EN = 1;     // 使能脈沖
        _nop_();
        busy = LCD_DATA; // 讀取狀態(tài)字
        LCD_EN = 0;
        _nop_();
    } while (busy & 0x80); // 檢測忙標志位(最高位)
   
    LCD_RW = 0;         // 恢復為寫模式
}
回復

使用道具 舉報

ID:16255 發(fā)表于 2025-9-15 13:39 | 顯示全部樓層
我是直接忽略讀忙信號的。包括LCD1602和LCD12864,我都不讀忙信號的。
回復

使用道具 舉報

ID:458247 發(fā)表于 2025-9-15 14:34 | 顯示全部樓層
cy009 發(fā)表于 2025-9-15 09:48
在要求高效、高速且可靠的項目中,使用讀忙信號是更好的選擇。
你的程序錯在第16行。
以下程序供參考:

你這樣寫不符合高可靠性和高實時性要求吧,一旦1602掛掉了,你整個程序就卡死在do-while循環(huán)中了,怎么也得弄個超時機制
回復

使用道具 舉報

ID:1160336 發(fā)表于 2025-9-16 13:32 | 顯示全部樓層
cy009 發(fā)表于 2025-9-15 09:48
在要求高效、高速且可靠的項目中,使用讀忙信號是更好的選擇。
你的程序錯在第16行。
以下程序供參考:

我把&的操作放到循環(huán)的判定條件里就行了
回復

使用道具 舉報

ID:1160336 發(fā)表于 2025-9-16 13:37 | 顯示全部樓層
cy009 發(fā)表于 2025-9-15 09:48
在要求高效、高速且可靠的項目中,使用讀忙信號是更好的選擇。
你的程序錯在第16行。
以下程序供參考:

可以解釋下嗎,busy = LCD_DATA;while(busy&0x80)和busy = LCD_DATA&0x80;while(busy)感覺語法上沒區(qū)別吧,為什么在仿真時有差異呢
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表