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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6596|回復: 11
收起左側

LCD1602問題,數據位用不同的IO口,屏幕不顯示

[復制鏈接]
ID:188935 發表于 2017-9-8 14:51 | 顯示全部樓層 |閱讀模式
5黑幣
一、下面是LCD1602在單片機上的IO口位置定義
#define   LCDEN      FP13   //使能位
#define   LCDRW     FP12
#define   LCDRS      FP54
#define   LCDDAT0   FP20  //數據位0 在io口P20上
#define   LCDDAT1   FP21  //數據位1 在io口P21上
#define   LCDDAT2   FP22  //數據位2 在io口P22上
#define   LCDDAT3   FP23  //數據位3 在io口P23上
#define   LCDDAT4   FP24  //數據位4 在io口P24上
#define   LCDDAT5   FP25  //數據位5 在io口P25上
#define   LCDDAT6   FP00  //數據位6 在io口P00上
#define   LCDDAT7   FP10  //數據位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);
}


回復

使用道具 舉報

ID:213173 發表于 2017-9-8 15:42 | 顯示全部樓層
本帖最后由 wulin 于 2017-9-8 16:04 編輯

這是我在4*4矩陣鍵盤上用的異組端口組成的8位數據讀/寫程序,同樣適合驅動數碼管、液晶屏。你試試。另外你寫的讀/寫程序中要按照時序要求加入適當的延時,否則時序不符合要求也不能正常顯示。
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位數據
{   
    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位數據
{
        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;
}

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:229073 發表于 2017-9-9 11:36 | 顯示全部樓層
每一個IO口置高,再置低,一步一步測試,確定IO口沒有錯。然后再按照規格書,對一對指令。
回復

使用道具 舉報

ID:188935 發表于 2017-9-14 08:46 | 顯示全部樓層
無名無姓 發表于 2017-9-9 11:36
每一個IO口置高,再置低,一步一步測試,確定IO口沒有錯。然后再按照規格書,對一對指令。

指令沒有錯啊,只是單片機不一樣,會不會是單片機指令周期和晶振頻率不一樣引起來的?
回復

使用道具 舉報

ID:188935 發表于 2017-9-14 08:49 | 顯示全部樓層
wulin 發表于 2017-9-8 15:42
這是我在4*4矩陣鍵盤上用的異組端口組成的8位數據讀/寫程序,同樣適合驅動數碼管、液晶屏。你試試。另外你 ...

那可能是時序問題,我當時用的51單片機可以,現在用的松翰的,然后移植過來,只是數據線不在同一IO口上,就不顯示
回復

使用道具 舉報

ID:233083 發表于 2017-9-14 13:12 | 顯示全部樓層
這種一般看下時序可以解決,還有就是注意IO口有沒有復用功能。
回復

使用道具 舉報

ID:89515 發表于 2017-9-14 16:51 | 顯示全部樓層
        P2 = dat & 0x3f;
         P0 = (dat & 0x40) >> 6;
         P1 = (dat & 0x80) >> 7;
這個是在干什么?這款單片機支持位操作嗎?如果你是為了把其他口獨立出來
       P2 |= dat & 0x3f;
         P0| = (dat & 0x40) >> 6;
         P1 |= (dat & 0x80) >> 7;
不然其他口在這里被清零
回復

使用道具 舉報

ID:89515 發表于 2017-9-14 16:55 | 顯示全部樓層
還有把忙檢測改成延時試試
回復

使用道具 舉報

ID:188935 發表于 2017-9-18 16:27 | 顯示全部樓層
mengzhixinheng 發表于 2017-9-14 16:51
P2 = dat & 0x3f;
         P0 = (dat & 0x40) >> 6;
         P1 = (dat & 0x80) >> 7;

這些IO口都用上了
回復

使用道具 舉報

ID:188935 發表于 2017-9-18 16:28 | 顯示全部樓層
mengzhixinheng 發表于 2017-9-14 16:55
還有把忙檢測改成延時試試

其他寫指令等等也要延時吧?
回復

使用道具 舉報

ID:38658 發表于 2024-1-16 15:44 | 顯示全部樓層
P1=0X01,第一個串口,而不是0X02。
回復

使用道具 舉報

ID:1080331 發表于 2024-1-20 11:06 | 顯示全部樓層
如果你的LCD1602屏幕沒有顯示任何內容,可能有以下幾個可能的原因:  引腳連接錯誤:請確保LCD1602的各個引腳正確連接到單片機的IO口上,確認每個數據位和控制引腳連接的IO口是否與你提供的定義一致。  電源問題:確保LCD1602正常供電。檢查電源線是否正確連接并提供適當的電壓。  初始化過程錯誤:請再次確認你的初始化代碼是否正確。在 LCD_Init() 函數中發送了一系列的初始化命令,確保這些命令按照正確的順序和參數發送給LCD1602。如果初始化過程有誤,LCD1602可能無法正常工作。  忙狀態檢測錯誤:在 Read_state() 函數中,你使用了忙狀態檢測來等待LCD1602完成之前的操作。請確保你的忙狀態檢測代碼正確,并且等待足夠的時間讓LCD1602完成操作。  數據寫入錯誤:請檢查你使用的 Writer_Dat() 函數,確保它正確設置了數據位以及控制引腳的狀態,并且在寫入數據之前等待LCD1602完成之前的操作。  如果你檢查了以上問題仍然無法解決,可以嘗試調試代碼或使用示波器等工具來觀察信號線上的波形,以確定是否正確發送了數據和命令。  希望這些提示能夠幫助你解決問題。如果你需要進一步的幫助,請提供更多細節或代碼片段,我將盡力協助你。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩中文一区二区三区 | www视频在线观看 | 日韩一区二区三区视频在线播放 | 欧美在线a | 日本国产高清 | 久久精品一区二区三区四区 | 日本 欧美 三级 高清 视频 | 国产日韩欧美另类 | 野狼在线社区2017入口 | 紧缚调教一区二区三区视频 | 久久99成人 | 久久久久国产一区二区三区四区 | 久久精品国产久精国产 | 亚洲情综合五月天 | 中文字幕一区二区三区四区五区 | 国产综合久久久久久鬼色 | 91免费观看视频 | 亚洲 中文 欧美 日韩 在线观看 | 国产电影一区二区三区爱妃记 | 精品久久久久久久人人人人传媒 | 久久免费国产视频 | 国产免费一区二区 | 日韩中出 | 国产精品揄拍一区二区久久国内亚洲精 | 国产精品99久久久久久久久久久久 | 免费性视频 | 国产大片黄色 | av免费在线观看网站 | 国产精品久久777777 | 久久久久久国模大尺度人体 | 欧美在线视频不卡 | 国产成年人视频 | 欧美一区 | 久久国产精品一区 | 五十女人一级毛片 | 色在线看 | 国产精品一区二区免费 | 欧美精品一区二区三区四区 在线 | 久久成人精品视频 | 亚洲国产免费 | 国产乱码精品1区2区3区 |