找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 4150|回復(fù): 4
收起左側(cè)

請(qǐng)教一下關(guān)于單片機(jī)+1602液晶的查忙程序問題

[復(fù)制鏈接]
ID:327029 發(fā)表于 2019-12-22 18:44 | 顯示全部樓層 |閱讀模式
當(dāng)我采用延時(shí)的辦法時(shí),protues仿真1602液晶能正常顯示字符,但當(dāng)我用查忙函數(shù)時(shí),1602液晶只亮不顯示字符。查忙后程序如下:
#define DATAPORT P0
#define BUSY  0x80   
void ini()   //LCD初始化{
        rw=0;
        en=0;
        P2=0xff;
        writeCG();
        write_order(0x38,1);
        write_order(0x0c,1);
        write_order(0x06,1);
        write_order(0x01,1);
        

}
void lcd_wait(void)
{
    DATAPORT=0xff;             //讀LCD前若單片機(jī)輸出低電平,而讀出LCD為高電平,則沖突,Proteus仿真會(huì)有顯示邏輯黃色
        en=1;
    rs=0;   
    rw=1;   
    _nop_();
    _nop_();
        _nop_();
    while(DATAPORT&BUSY)  
        {  en=0;
           _nop_();
           _nop_();
           en=1;
           _nop_();
           _nop_();
           }         
   en=0;        
        
}
void write_order(uchar com,uchar BusyC)
{
   /*        rs=0;
        P2=order;
        delay(4);
        en=1;
        delay(4);
        en=0;         */  
         if(BusyC)lcd_wait();
        DATAPORT=com;
    rs=0;                   // 選中指令寄存器
    rw=0;                       // 寫模式        
    en=1;   
        _nop_();   
        _nop_();
        _nop_();
    en=0;
}
void write_date(uchar date)
{        
/*        rs=1;
        P2=date;
        delay(4);
        en=1;
        delay(4);
        en=0;         */
         lcd_wait( );             //檢測(cè)忙信號(hào)   
        DATAPORT=date;
    rs=1;                // 選中數(shù)據(jù)寄存器
    rw=0;                    // 寫模式
    en=1;
    _nop_();
        _nop_();
        _nop_();
    en=0;
}


3.png
2.png
1.png
回復(fù)

使用道具 舉報(bào)

ID:584814 發(fā)表于 2019-12-23 10:14 | 顯示全部樓層
1602不需要查忙,理論上需要實(shí)際上不要。但最好留個(gè)預(yù)熱的時(shí)間,加電后過半秒再操作。
回復(fù)

使用道具 舉報(bào)

ID:327029 發(fā)表于 2019-12-24 11:35 | 顯示全部樓層
已搞定,查忙要設(shè)定初始化第一次不查忙.查忙程序需要加return;。
void ini()   //LCD初始化{
       write_order(0x38,0);
       write_order(0x38,0);
      write_order(0x38,0);
        rw=0;
        en=0;
        P2=0xff;
        writeCG();
        write_order(0x38,1);
        write_order(0x0c,1);
        write_order(0x06,1);
        write_order(0x01,1);
        

}
void lcd_wait(void)
{
  return;
    DATAPORT=0xff;             //讀LCD前若單片機(jī)輸出低電平,而讀出LCD為高電平,則沖突,Proteus仿真會(huì)有顯示邏輯黃色
        en=1;
    rs=0;   
    rw=1;   
    _nop_();
    _nop_();
        _nop_();
    while(DATAPORT&BUSY)  
        {  en=0;
           _nop_();
           _nop_();
           en=1;
           _nop_();
           _nop_();
           }         
   en=0;        
        
}
回復(fù)

使用道具 舉報(bào)

ID:871292 發(fā)表于 2021-4-25 12:53 | 顯示全部樓層
謝謝分享!請(qǐng)教為什么加了return就可以了?
回復(fù)

使用道具 舉報(bào)

ID:995418 發(fā)表于 2021-12-27 20:31 | 顯示全部樓層
加了個(gè)retrun不是相當(dāng)于屏蔽掉查忙函數(shù)了嗎,它根本就沒運(yùn)行
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表