找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

驅(qū)動51單片機練習LCD1602時遇到的關(guān)于忙位和延時的問題

[復制鏈接]
ID:1067101 發(fā)表于 2023-3-18 11:50 | 顯示全部樓層 |閱讀模式
二手普中A7套裝,STC89C516,晶振12MHz,12T模式,按手冊資料寫LCD1602的簡單模塊,遇到幾個問題:

1. 檢查忙位讀到0跳出死循環(huán),但是寫數(shù)據(jù)操作只能成功25%。搜到不少中文資料也提到有類似問題,有解決方法嗎?

2. 然后用軟件延時,調(diào)參后發(fā)現(xiàn)實際需要的時間略小于各種資料上給出的值很多就能穩(wěn)定。這和主頻有關(guān)嗎?換更好的MCU是不是能進一步較小在程序里的軟件延時?
資料250kHz,清屏和復位1640us,寫40us
資料270kHz,清屏和復位1520us,寫37us
實驗12MHz,清屏和復位1400us,寫25us

3. 我手寫的單變量和計算器給出的延時編譯后占用code和data數(shù)量一樣。數(shù)值調(diào)整到穩(wěn)定后,參數(shù)如下,i--和--i的速度是不是差距較大?
unsigned char i, j;
i = 3;j = 182;
do
{
        while (--j);
} while (--i);



unsigned char time=255;
while (time--);


4. 不少資料的寫操作中,會在置高電平和置低電平后分別delay,我的實驗中發(fā)現(xiàn)只需要在高電平后delay一次,是不是這款MCU才能這樣,不能普遍運用到其他MCU?當然,LCDWrite(CMD,0x01)或LCDWrite(CMD,0x02)之后還是要delay 1.5ms。

5. 十幾年前的一份資料說,初始化時模式要發(fā)三次,是不是對于現(xiàn)在的MCU不再適用?
回復

使用道具 舉報

ID:384109 發(fā)表于 2023-3-18 20:18 | 顯示全部樓層
對于操作1602這類模塊,出現(xiàn)問題如果確定硬件沒問題,那就是軟件的問題了
回復

使用道具 舉報

ID:1067101 發(fā)表于 2023-3-19 00:05 | 顯示全部樓層
人中狼 發(fā)表于 2023-3-18 20:18
對于操作1602這類模塊,出現(xiàn)問題如果確定硬件沒問題,那就是軟件的問題了

感謝指點。
重新翻閱一遍資料,整理一遍思路,在讀寫數(shù)據(jù)的函數(shù)最前面檢查忙信號,成功了。
各種資料中的軟件延時、P0=0xff上拉操作在實驗中都沒有必要。
合并寫命令和寫數(shù)據(jù)時,rs類型用uchar比部分資料中的bit更省code和data。

主樓中還有問題3,還望指點。


代碼如下:

void LCD_Wait()
{
        unsigned char uchar0;
        LCD1602_RS=0;
        LCD1602_RW=1;
        LCD1602_E=1;
        while(1){
                uchar0=LCD1602_D;
                if(uchar0>>7==0)break;
        }
        LCD1602_E=0;
}

void LCD_Write(unsigned char rs, unsigned char uchar0)
{
        LCD_Wait();
        LCD1602_RS=rs;
        LCD1602_RW=0;
        LCD1602_D=uchar0;
        LCD1602_E=1;
        LCD1602_E=0;
}
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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