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

QQ登錄

只需一步,快速開始

搜索
查看: 6663|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

LCD1602問題,數(shù)據(jù)位用不同的IO口,屏幕不顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:188935 發(fā)表于 2017-9-8 14:51 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
5黑幣
一、下面是LCD1602在單片機(jī)上的IO口位置定義
#define   LCDEN      FP13   //使能位
#define   LCDRW     FP12
#define   LCDRS      FP54
#define   LCDDAT0   FP20  //數(shù)據(jù)位0 在io口P20上
#define   LCDDAT1   FP21  //數(shù)據(jù)位1 在io口P21上
#define   LCDDAT2   FP22  //數(shù)據(jù)位2 在io口P22上
#define   LCDDAT3   FP23  //數(shù)據(jù)位3 在io口P23上
#define   LCDDAT4   FP24  //數(shù)據(jù)位4 在io口P24上
#define   LCDDAT5   FP25  //數(shù)據(jù)位5 在io口P25上
#define   LCDDAT6   FP00  //數(shù)據(jù)位6 在io口P00上
#define   LCDDAT7   FP10  //數(shù)據(jù)位7 在io口P10上

二、下面是我的程序
void Read_state(void)
{       
        P2 = 0x3f;
        P0 = 0x01;
        P1 = 0x02;
        LCDRS = 0;
        LCDRW = 1;
        do
        {
                LCDEN = 1;
                LCDEN = 0;
        }
        while(LCDDAT7);
}
void Writer_Cmd(uchar cmd)
{
        Read_state();
        LCDRS = 0;
        LCDRW = 0;
        P2 = cmd & 0x3f;
        P0 = (cmd & 0x40) >> 6;
        P1 = (cmd & 0x80) >> 7;
        LCDEN = 1;
        LCDEN = 0;
}
void Writer_Dat(uchar dat)
{
        Read_state();
        LCDRS = 1;
        LCDRW = 0;
        P2 = dat & 0x3f;
        P0 = (dat & 0x40) >> 6;
        P1 = (dat & 0x80) >> 7;
        LCDEN = 1;
        LCDEN = 0;
}
void LCD_Init(void)
{
        Writer_Cmd(0x38);  
        Writer_Cmd(0x0f);  
        Writer_Cmd(0x01);  
        Writer_Cmd(0x06);  
        Writer_Cmd(0x80|0x06);  
}
void main(void)
{
        LCD_Init();
        Writer_Dat('a');
        while(1);
}


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

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2017-9-8 15:42 | 只看該作者
本帖最后由 wulin 于 2017-9-8 16:04 編輯

這是我在4*4矩陣鍵盤上用的異組端口組成的8位數(shù)據(jù)讀/寫程序,同樣適合驅(qū)動(dòng)數(shù)碼管、液晶屏。你試試。另外你寫的讀/寫程序中要按照時(shí)序要求加入適當(dāng)?shù)难訒r(shí),否則時(shí)序不符合要求也不能正常顯示。
sbit code0=P2^0;                //端口定義
sbit code1=P2^1;
sbit code2=P2^2;
sbit code3=P2^3;
sbit code4=P2^4;
sbit code5=P2^5;
sbit code6=P0^0;
sbit code7=P1^0;

void PX(unsigned char i)        //寫8位數(shù)據(jù)
{   
    code0=i&0x01;i>>=1;        
    code1=i&0x01;i>>=1;
    code2=i&0x01;i>>=1;
    code3=i&0x01;i>>=1;
    code4=i&0x01;i>>=1;
    code5=i&0x01;i>>=1;
    code6=i&0x01;i>>=1;
    code7=i&0x01;
}
unsigned char PD()                                //讀8位數(shù)據(jù)
{
        uchar i;
        i=code7;
        i=(i<<1)|code6;
        i=(i<<1)|code5;
        i=(i<<1)|code4;
        i=(i<<1)|code3;
        i=(i<<1)|code2;
        i=(i<<1)|code1;
        i=(i<<1)|code0;
        return i;
}

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:229073 發(fā)表于 2017-9-9 11:36 | 只看該作者
每一個(gè)IO口置高,再置低,一步一步測試,確定IO口沒有錯(cuò)。然后再按照規(guī)格書,對(duì)一對(duì)指令。
回復(fù)

使用道具 舉報(bào)

地板
ID:188935 發(fā)表于 2017-9-14 08:46 | 只看該作者
無名無姓 發(fā)表于 2017-9-9 11:36
每一個(gè)IO口置高,再置低,一步一步測試,確定IO口沒有錯(cuò)。然后再按照規(guī)格書,對(duì)一對(duì)指令。

指令沒有錯(cuò)啊,只是單片機(jī)不一樣,會(huì)不會(huì)是單片機(jī)指令周期和晶振頻率不一樣引起來的?
回復(fù)

使用道具 舉報(bào)

5#
ID:188935 發(fā)表于 2017-9-14 08:49 | 只看該作者
wulin 發(fā)表于 2017-9-8 15:42
這是我在4*4矩陣鍵盤上用的異組端口組成的8位數(shù)據(jù)讀/寫程序,同樣適合驅(qū)動(dòng)數(shù)碼管、液晶屏。你試試。另外你 ...

那可能是時(shí)序問題,我當(dāng)時(shí)用的51單片機(jī)可以,現(xiàn)在用的松翰的,然后移植過來,只是數(shù)據(jù)線不在同一IO口上,就不顯示
回復(fù)

使用道具 舉報(bào)

6#
ID:233083 發(fā)表于 2017-9-14 13:12 | 只看該作者
這種一般看下時(shí)序可以解決,還有就是注意IO口有沒有復(fù)用功能。
回復(fù)

使用道具 舉報(bào)

7#
ID:89515 發(fā)表于 2017-9-14 16:51 | 只看該作者
        P2 = dat & 0x3f;
         P0 = (dat & 0x40) >> 6;
         P1 = (dat & 0x80) >> 7;
這個(gè)是在干什么?這款單片機(jī)支持位操作嗎?如果你是為了把其他口獨(dú)立出來
       P2 |= dat & 0x3f;
         P0| = (dat & 0x40) >> 6;
         P1 |= (dat & 0x80) >> 7;
不然其他口在這里被清零
回復(fù)

使用道具 舉報(bào)

8#
ID:89515 發(fā)表于 2017-9-14 16:55 | 只看該作者
還有把忙檢測改成延時(shí)試試
回復(fù)

使用道具 舉報(bào)

9#
ID:188935 發(fā)表于 2017-9-18 16:27 | 只看該作者
mengzhixinheng 發(fā)表于 2017-9-14 16:51
P2 = dat & 0x3f;
         P0 = (dat & 0x40) >> 6;
         P1 = (dat & 0x80) >> 7;

這些IO口都用上了
回復(fù)

使用道具 舉報(bào)

10#
ID:188935 發(fā)表于 2017-9-18 16:28 | 只看該作者
mengzhixinheng 發(fā)表于 2017-9-14 16:55
還有把忙檢測改成延時(shí)試試

其他寫指令等等也要延時(shí)吧?
回復(fù)

使用道具 舉報(bào)

11#
ID:38658 發(fā)表于 2024-1-16 15:44 | 只看該作者
P1=0X01,第一個(gè)串口,而不是0X02。
回復(fù)

使用道具 舉報(bào)

12#
ID:1080331 發(fā)表于 2024-1-20 11:06 | 只看該作者
如果你的LCD1602屏幕沒有顯示任何內(nèi)容,可能有以下幾個(gè)可能的原因:  引腳連接錯(cuò)誤:請(qǐng)確保LCD1602的各個(gè)引腳正確連接到單片機(jī)的IO口上,確認(rèn)每個(gè)數(shù)據(jù)位和控制引腳連接的IO口是否與你提供的定義一致。  電源問題:確保LCD1602正常供電。檢查電源線是否正確連接并提供適當(dāng)?shù)碾妷骸?nbsp; 初始化過程錯(cuò)誤:請(qǐng)?jiān)俅未_認(rèn)你的初始化代碼是否正確。在 LCD_Init() 函數(shù)中發(fā)送了一系列的初始化命令,確保這些命令按照正確的順序和參數(shù)發(fā)送給LCD1602。如果初始化過程有誤,LCD1602可能無法正常工作。  忙狀態(tài)檢測錯(cuò)誤:在 Read_state() 函數(shù)中,你使用了忙狀態(tài)檢測來等待LCD1602完成之前的操作。請(qǐng)確保你的忙狀態(tài)檢測代碼正確,并且等待足夠的時(shí)間讓LCD1602完成操作。  數(shù)據(jù)寫入錯(cuò)誤:請(qǐng)檢查你使用的 Writer_Dat() 函數(shù),確保它正確設(shè)置了數(shù)據(jù)位以及控制引腳的狀態(tài),并且在寫入數(shù)據(jù)之前等待LCD1602完成之前的操作。  如果你檢查了以上問題仍然無法解決,可以嘗試調(diào)試代碼或使用示波器等工具來觀察信號(hào)線上的波形,以確定是否正確發(fā)送了數(shù)據(jù)和命令。  希望這些提示能夠幫助你解決問題。如果你需要進(jìn)一步的幫助,請(qǐng)?zhí)峁└嗉?xì)節(jié)或代碼片段,我將盡力協(xié)助你。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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