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

QQ登錄

只需一步,快速開始

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

單片機(jī)+LCD1602液晶顯示問題 中間有兩個(gè)黑點(diǎn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:97350 發(fā)表于 2021-5-28 10:48 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
問題描述: 1602顯示如圖,中間有兩個(gè)黑點(diǎn)。如何解決,我貼下1602程序部分


#define yi 0x80 //LCD第一行的初始位置,因?yàn)長(zhǎng)CD1602字符地址首位D7恒定為1(100000000=80)
#define er 0x80+0x40 //LCD第二行初始位置(因?yàn)榈诙械谝粋(gè)字符位置地址是0x40)


//----------------延時(shí)函數(shù),后面經(jīng)常調(diào)用----------------------
void delay(uint xms)//延時(shí)函數(shù),有參函數(shù)
{
        uint x,y;
        for(x=xms;x>0;x--)
         for(y=110;y>0;y--);
}

//--------------------------寫指令---------------------------
void write_1602com(uchar com)//****液晶寫入指令函數(shù)****
{
        lcd1602_rs=0;//數(shù)據(jù)/指令選擇置為指令
        lcd1602_rw=0; //讀寫選擇置為寫
        P0=com;//送入數(shù)據(jù)
        delay(1);
        lcd1602_en=1;//拉高使能端,為制造有效的下降沿做準(zhǔn)備
        delay(1);
        lcd1602_en=0;//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
}

//-------------------------寫數(shù)據(jù)-----------------------------
void write_1602dat(uchar dat)//***液晶寫入數(shù)據(jù)函數(shù)****
{
        lcd1602_rs=1;//數(shù)據(jù)/指令選擇置為數(shù)據(jù)
        lcd1602_rw=0; //讀寫選擇置為寫
        P0=dat;//送入數(shù)據(jù)
        delay(1);
        lcd1602_en=1; //en置高電平,為制造下降沿做準(zhǔn)備
        delay(1);
        lcd1602_en=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
}

//-------------------------初始化-------------------------
void lcd_init()
{
        write_1602com(0x01);//清顯示
        write_1602com(0x38);//設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
        write_1602com(0x0c);//開顯示不顯示光標(biāo)
        write_1602com(0x06);//整屏不移動(dòng),光標(biāo)自動(dòng)右移
}

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

使用道具 舉報(bào)

沙發(fā)
ID:824490 發(fā)表于 2021-5-28 11:41 | 只看該作者
這樣的問題,在線跟蹤一下1602的輸入數(shù)據(jù),一般都能解決
回復(fù)

使用道具 舉報(bào)

板凳
ID:97350 發(fā)表于 2021-5-28 12:55 | 只看該作者
名字不是重點(diǎn) 發(fā)表于 2021-5-28 11:41
這樣的問題,在線跟蹤一下1602的輸入數(shù)據(jù),一般都能解決

感謝賜教,請(qǐng)問怎么在線跟蹤?
回復(fù)

使用道具 舉報(bào)

地板
ID:879348 發(fā)表于 2021-5-28 13:30 | 只看該作者
這很明顯是顯示數(shù)字沒有轉(zhuǎn)字符串
回復(fù)

使用道具 舉報(bào)

5#
ID:88256 發(fā)表于 2021-5-28 13:44 | 只看該作者
主函數(shù)都沒貼出來,應(yīng)該是送的顯示數(shù)據(jù)錯(cuò)誤了
回復(fù)

使用道具 舉報(bào)

6#
ID:824490 發(fā)表于 2021-5-28 14:07 | 只看該作者
用仿真器跑代碼
回復(fù)

使用道具 舉報(bào)

7#
ID:97350 發(fā)表于 2021-5-28 14:08 | 只看該作者
hhdsdy 發(fā)表于 2021-5-28 13:44
主函數(shù)都沒貼出來,應(yīng)該是送的顯示數(shù)據(jù)錯(cuò)誤了
  1. void main()
  2. {
  3.          unsigned char KEY,NUM;
  4.         unsigned char i,j;
  5.          P1=0xFF;
  6.         EA=1;
  7.         TMOD=0x01;
  8.         IT1=1;//下降沿有效
  9.         EX1=1;//外部中斷1開
  10.            
  11.         TH0=0;//T0賦初值
  12.         TL0=0;
  13.         TR0=1;//t0開始計(jì)時(shí)
  14.          TL1=0x3c;
  15.          TH1=0xb0;
  16.          ET1=1;        
  17.          TR1=0;
  18.          Delay400Ms();         //啟動(dòng)等待,等LCM講入工作狀態(tài)
  19.          lcd_init();         //LCD初始化
  20.         write_1602com(yi);//日歷顯示固定符號(hào)從第一行第0個(gè)位置之后開始顯示
  21.         init_rc522();
  22.         init_eeprom();
  23.         read_eeprom();
  24.         for(i=0;i<16;i++)
  25.         {
  26.                 write_1602dat(name[i]);//向液晶屏寫日歷顯示的固定符號(hào)部分
  27.         }
  28.         write_1602com(er);//時(shí)間顯示固定符號(hào)寫入位置,從第2個(gè)位置后開始顯示
  29.         for(i=0;i<16;i++)
  30.         {
  31.                 write_1602dat(start_line[i]);//寫顯示時(shí)間固定符號(hào),兩個(gè)冒號(hào)
  32.         }
  33.         write_1602com(er+9);        //設(shè)置光標(biāo)位置
  34.         write_1602com(0x0f);        //設(shè)置光標(biāo)為閃爍
  35.          Delay5Ms(); //延時(shí)片刻(可不要)

  36.          N=0;                                                                                                                //初始化數(shù)據(jù)輸入位數(shù)
  37.          while(1)
  38.          {
  39.            
  40.                 ctrl();
  41.                 if(key_disable==1)
  42.                         Alam_KeyUnable();
  43.                 else
  44.                         ALAM=1;                                                                //關(guān)報(bào)警

  45.                 KEY=keynum();
  46.                 if(KEY!=0||IrOK==1)
  47.                 {        
  48.                         if(key_disable==1)
  49.                         {
  50.                                 second=0;
  51.                         }
  52.                         else
  53.                         {
  54.                                 NUM=coding(Im[2],KEY);
  55.                                 {
  56.                                         switch(NUM)
  57.                                         {
  58.                                                 case ('A'): if(chushihua==1)
  59.                                                             {
  60.                                                              current_id++;
  61.                                                             if(current_id>5)
  62.                                                                          current_id=0;
  63.                                                                          }                                        break;
  64.                                                 case ('B'):        if(chushihua==1)
  65.                                                              write_eeprom_jj(current_id)        ;                                             break;
  66.                                                 case ('C'): if(chushihua==1)
  67.                                                              write_eeprom_j(current_id)        ;                                         break;
  68.                                                 case ('D'): chushihua=0;ResetPassword();                break;      //重新設(shè)置密碼
  69.                                                 case ('*'): chushihua=0;Cancel();                                break;      //取消當(dāng)前輸入
  70.                                                 case ('#'): chushihua=0; Ensure();                                 break;           //確認(rèn)鍵,
  71.                                                 default:
  72.                                                 {        
  73.                                                     chushihua=0;
  74.                                                         //DisplayListChar(0,1,Input);
  75.                                                         write_1602com(er);
  76.                                                         for(i=0;i<16;i++)
  77.                                                         {
  78.                                                                 write_1602dat(Input[i]);
  79.                                                         }
  80.                                                     operation=0;
  81.                                                         if(N<6)                                                           //當(dāng)輸入的密碼少于6位時(shí),接受輸入并保存,大于6位時(shí)則無(wú)效。
  82.                                                         {  
  83.                                                                 OneAlam();                                                                //按鍵提示音                                                
  84.                                                                 //DisplayOneChar(6+N,1,'*');
  85.                                                                  for(j=0;j<=N;j++)
  86.                                                                 {
  87.                                                                         write_1602com(er+6+j);
  88.                                                                         write_1602dat('*');
  89.                                                                 }
  90.                                                                 InputData[N]=NUM;
  91.                                                                 N++;
  92.                                                         }
  93.                                                         else                                                                                //輸入數(shù)據(jù)位數(shù)大于6后,忽略輸入
  94.                                                         {
  95.                                                                 N=6;
  96.                                                                  break;
  97.                                                         }
  98.                                                 }
  99.                                         }
  100.                                 }
  101.                         }
  102.                  }
  103.         }
  104. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

8#
ID:97350 發(fā)表于 2021-5-28 14:09 | 只看該作者
wufa1986 發(fā)表于 2021-5-28 13:30
這很明顯是顯示數(shù)字沒有轉(zhuǎn)字符串

我覺得應(yīng)該不是,因?yàn)榈谝粡埧ǹ梢哉Wx取出來,第二張卡就顯示兩個(gè)黑屏
回復(fù)

使用道具 舉報(bào)

9#
ID:451718 發(fā)表于 2021-5-28 14:42 | 只看該作者
讀卡的后數(shù)據(jù)如何傳輸?shù)模?nbsp; 問題肯定出在傳輸上,  把讀到的數(shù)據(jù),用串口發(fā)送出來看看就知道了。
回復(fù)

使用道具 舉報(bào)

10#
ID:366877 發(fā)表于 2021-5-28 14:58 | 只看該作者
應(yīng)該是顯示數(shù)據(jù)和待顯示的位置沒對(duì)上,前一屏幕信息殘留疊加的結(jié)果。
回復(fù)

使用道具 舉報(bào)

11#
ID:97350 發(fā)表于 2021-5-28 15:19 | 只看該作者
感謝各位出謀劃策,我再找找原因,有答案會(huì)和大家一起分享的。小弟在這里一并謝過
回復(fù)

使用道具 舉報(bào)

12#
ID:584814 發(fā)表于 2021-5-29 22:01 | 只看該作者
直接用常量在相對(duì)的位置顯示一個(gè)字條,如果還是這樣就是硬件壞。
不過一般都是你送的數(shù)據(jù)有問題,1602直接壞2個(gè)顯示位并且全顯的概率小。
回復(fù)

使用道具 舉報(bào)

13#
ID:517951 發(fā)表于 2021-5-31 10:58 | 只看該作者
基本不認(rèn)為是1602的硬件問題,99%是軟件寫得有問題才出現(xiàn)中間部位的顯示異常.
回復(fù)

使用道具 舉報(bào)

14#
ID:97350 發(fā)表于 2021-5-31 15:47 | 只看該作者
rayin 發(fā)表于 2021-5-31 10:58
基本不認(rèn)為是1602的硬件問題,99%是軟件寫得有問題才出現(xiàn)中間部位的顯示異常.

你說的對(duì),就是軟件問題,但是我還沒調(diào)通
回復(fù)

使用道具 舉報(bào)

15#
ID:97350 發(fā)表于 2021-5-31 15:48 | 只看該作者
man1234567 發(fā)表于 2021-5-29 22:01
直接用常量在相對(duì)的位置顯示一個(gè)字條,如果還是這樣就是硬件壞。
不過一般都是你送的數(shù)據(jù)有問題,1602直接 ...

排除硬件故障了,還在軟件調(diào)試中
回復(fù)

使用道具 舉報(bào)

16#
ID:390416 發(fā)表于 2021-6-19 08:42 | 只看該作者
LCD1602顯示℃ 這種自定義符號(hào) http://www.torrancerestoration.com/bbs/dpj-200685-1.html
LCD1602液晶最新資料 說明了具體的時(shí)間要求 http://www.torrancerestoration.com/bbs/dpj-205768-1.html
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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