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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

求幫忙看看單片機LCD1602顯示一排白塊的問題

查看數: 5938 | 評論數: 19 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2022-5-7 15:37

正文摘要:

燒寫程序給板子上電之后,1602只顯示這一行白塊,應該不是對比度的問題?因為調可調電阻只是亮度變了下,程序在proteus上仿真是能實現運行的,大佬們幫忙看看,本人小白不太懂。。 單片機源程序如下: #includ ...

回復

ID:904023 發表于 2022-5-19 22:58
可能是對比度沒填好,可以調下電位器
ID:1019715 發表于 2022-5-19 15:04
問題已經解決了,是PCB板我把復位按鍵的兩個相鄰引腳接一起導致一直通路,還有三極管原理圖和PCB封裝不對應導致出錯,重新打板之后已經能正常顯示了,感謝各位回復過的大佬,此貼終結。
ID:161164 發表于 2022-5-10 14:03
這種芯片座有機會接觸不良
建議用以下代碼檢查LCD1602各信號腳有沒有電平變化

  1. #include <reg52.h>

  2. void Delay500ms()                //@12.000MHz
  3. {
  4.         unsigned char i, j, k;

  5.         i = 4;
  6.         j = 205;
  7.         k = 187;
  8.         do
  9.         {
  10.                 do
  11.                 {
  12.                         while (--k);
  13.                 } while (--j);
  14.         } while (--i);
  15. }

  16. void main()
  17. {
  18.     while (1)
  19.     {
  20.                         P0 ^= 0xFF;//取反電平
  21.                         P1 ^= 0xFF;//取反電平
  22.                         Delay500ms();
  23.     }
  24. }
復制代碼



ID:61140 發表于 2022-5-8 14:20
我Dell沈陽了 發表于 2022-5-7 20:53
有幾張圖在只看大圖那里,問問像我最后一張圖上這個1602插法影響大嗎?需要多插一個排母嗎?

第一:請確認LCD1602是否插反方向,插反方向是會導致白塊的,但不會燒壞屏
第二:請確認你的RS/RW/E/DATA   這些端口是否和程序里面的一致,不一致也會導致屏白塊
第三:以上兩項都正確,再確認你的程序寫指令和寫數據延時部分是否正確,一般仿真是不能評論實物的,仿真是理想化的仿真,但實物的時候一切以實際為主.
        如果你不確定你的寫指令和寫數據部分延時需要多少,盡可能的調大(一般大些不會導致白塊或不顯示,只是寫指令和寫數據等的時間稍長些),等顯示出來再調小,調到剛好可以穩定顯示又不會太大為準(比如你調到40剛好可以顯示了,再小就不顯示了,直接調到45-50即可,調太大影響程序運行速度)
ID:1012735 發表于 2022-5-8 13:47
E口跳變缺少延時!

*/
//------------------------------------------------
//LCD E口跳變時,LCD顯示一個字符/接收一個指令
//RS=0:命令指令,RS=1:顯示數據指令
//------------------------------------------------
void LcdWriteInfo( u8 RS, u8 RW, u8 dat )
{
        //while(LcdBusy());
       
        LCD1602_RS = RS;
        LCD1602_E  = 0;
        LCD1602_RW = RW;
       
        LCD1602_DATA = dat;
        delay1Cycle(5);
       
        LCD1602_E  = 1;
        delay1Cycle(5);
        LCD1602_E  = 0;
        delay1Cycle(5);
}
ID:161164 發表于 2022-5-7 23:15
我Dell沈陽了 發表于 2022-5-7 20:53
有幾張圖在只看大圖那里,問問像我最后一張圖上這個1602插法影響大嗎?需要多插一個排母嗎?

一試無妨
ID:1019715 發表于 2022-5-7 20:53
有幾張圖在只看大圖那里,問問像我最后一張圖上這個1602插法影響大嗎?需要多插一個排母嗎?
ID:1019715 發表于 2022-5-7 20:27
w1179benp 發表于 2022-5-7 19:58
還是把原理圖、PCB圖上上來看看吧。

已經發上來了
ID:149451 發表于 2022-5-7 19:58
我Dell沈陽了 發表于 2022-5-7 19:39
沒有反接,只是畫pcb的時候沒有考慮到ic鎖緊座的高度,所以我的1602是有些斜著插到排母上的,而且 ...

還是把原理圖、PCB圖上上來看看吧。
ID:1019715 發表于 2022-5-7 19:39
w1179benp 發表于 2022-5-7 18:54
沒看到你的MCU底板PCB定義,但直覺是你的1602插反方向了(通常設計開發板,1602不會蓋在MCU上)

沒有反接,只是畫pcb的時候沒有考慮到ic鎖緊座的高度,所以我的1602是有些斜著插到排母上的,而且我這個板子沒有USB接口,我需要先用燒錄器燒錄程序才取出芯片放到板子上
ID:1019715 發表于 2022-5-7 19:36
發表于 2022-5-7 17:47
你的主函數到哪里去了???   40us延時太短,能仿真不代表實物也能行。
  1. void main()
  2. {
  3.         unsigned char i;
  4.         LCD_init();
  5.         timer_init();        
  6.         for(i = 0;i<4;i++)
  7.         {
  8.                  LCD_disp_char(i+0,1,character_1[i]);
  9.         }
  10.         while(1)
  11.         {
  12.                 dis_num();  
  13.                 delay_1s();
  14.         }
  15. }

  16. void timer_init(void)   
  17. {
  18.         TMOD=0x66;
  19.         TH0=0;  
  20.         TL0=0;
  21.         TR0=1;  
  22.         ET0=1;  
  23.         TH1=0;   
  24.         TL1=0;
  25.         TR1=1;  
  26.         ET1=1;
  27.         RCAP2H=(65536-62500)/256;
  28.         RCAP2L=(65536-62500)%256;
  29.         TH2=RCAP2H;      
  30.         TL2=RCAP2L;
  31.         ET2=1;      
  32.         TR2=1;
  33.         EA=1;
  34. }

  35. void timer2(void) interrupt 5 //¶¨ê±Æ÷2ÖD¶Ï(62.5ms)
  36. {
  37.         time++;
  38.         TF2=0;      
  39.         if (time==16)      
  40.         {
  41.            time=0;     
  42.            EA=0;            
  43.            fre=(long)count1*256+TL1;   
  44.            FLAG = 0;
  45.          
  46.            if(fre<2000)
  47.            {
  48.                            fre = (long)count*256+TL0;
  49.                         FLAG = 1;         
  50.            }
  51.                 if(!FLAG)
  52.                 {
  53.                         fre = fre *100;
  54.                 }
  55.            TL0=0;      
  56.            TH0=0;
  57.            TL1=0;
  58.            TH1=0;
  59.            count=0;   
  60.            count1=0;
  61.            EA=1;      
  62.         }
  63. }
  64. //----------------------------------------------------------------
  65. void timer0(void) interrupt 1     
  66. {
  67.         count++;
  68. }               
  69. //----------------------------------------------------------------
  70. void timer1(void) interrupt 3
  71. {
  72.         count1++;
  73. }
復制代碼
ID:94031 發表于 2022-5-7 19:01
調調左上角對比度電位器,看對比度合適不。
ID:149451 發表于 2022-5-7 18:54
沒看到你的MCU底板PCB定義,但直覺是你的1602插反方向了(通常設計開發板,1602不會蓋在MCU上)
ID:213173 發表于 2022-5-7 17:47
你的主函數到哪里去了???   40us延時太短,能仿真不代表實物也能行。
  1. #include <reg52.h>

  2. unsigned long int fre;
  3. unsigned char time;
  4. unsigned int count;
  5. unsigned int count1;

  6. sbit   LCD_RS=P1^0;          //片選信號
  7. sbit   LCD_RW=P1^1;          //讀寫信號
  8. sbit   LCD_E =P1^2;           //使能信號

  9. #define LCD_DB  P0        //數據信號

  10. unsigned char character[10]={0};//在屏幕上顯示的字符串
  11. unsigned char character_1[]={"fre= Hz"};
  12. unsigned char FLAG = 0;  //是否分頻選擇標志

  13. void LCD_init(void);//初始化函數   
  14. void LCD_write_command(unsigned char command);//寫指令函數         
  15. void LCD_write_data(unsigned char dat);//寫數據函數           
  16. void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat);//在某個屏幕位置上顯示一個字符,X(0-15),y(1-2)
  17. void delay_n40us(unsigned int n);//延時函數
  18. void timer_init();            //中斷初始化函數  
  19. void delay_ms(unsigned int t);
  20. //-----------------------------延時函數---------------------------
  21. /*
  22. void delay_n40us(unsigned int n)                  //延時函數
  23. {
  24.         unsigned int i;
  25.         unsigned char j;            
  26.         for(i=n;i>0;i--)
  27.         for(j=0;j<2;j++);         
  28. }*/
  29. void delay_ms(unsigned int t)
  30. {
  31.         unsigned int i,j;
  32.         for(i=t;i>0;i--)
  33.                 for(j=120;j>0;j--);
  34. }
  35. //---------------------lcd1602液晶顯示函數--------------------                                    
  36. void LCD_init(void)         //液晶初始化函數
  37. {
  38.         LCD_RW=0;//寫入     
  39.         LCD_write_command(0x38);//設置8位格式,2行,5x7
  40.         LCD_write_command(0x38);//設置8位格式,2行,5x7
  41.         LCD_write_command(0x38);//設置8位格式,2行,5x7
  42.         LCD_write_command(0x38);//設置8位格式,2行,5x7
  43.         LCD_write_command(0x0c);//整體顯示,關光標,不閃爍
  44.         LCD_write_command(0x06);//設定輸入方式,增量不移位
  45.         LCD_write_command(0x01);//清除屏幕顯示         
  46.         LCD_write_command(0x80);//數據指針起點
  47. }
  48. void LCD_write_command(unsigned char dat)  //寫命令函數
  49. {  
  50.         LCD_RS=0;//指令                 
  51.         LCD_DB=dat;
  52.         delay_ms(1);
  53.         LCD_E=1; //使能         
  54.         delay_ms(1);
  55.         LCD_E=0;
  56. }         
  57. void LCD_write_data(unsigned char dat)          //寫數據函數
  58. {
  59.         LCD_RS=1;//數據         
  60.         LCD_DB=dat;
  61.         delay_ms(1);
  62.         LCD_E=1;//使能  
  63.         delay_ms(1);
  64.         LCD_E=0;
  65. }
  66. void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)//顯示一個字符
  67. {
  68.         unsigned char address;
  69.         if(y==1)
  70.                  address=0x80+x;         //顯示在第一排的時候的x的地址
  71.         else
  72.                  address=0xc0+x;         //顯示在第二排的時候的x的地址
  73.         LCD_write_command(address);         //輸入地址
  74.         LCD_write_data(dat);                 //輸入數據
  75. }
  76. void LCD_disp_num(unsigned char x,unsigned char y,unsigned char dat)//顯示一個數字
  77. {
  78.         unsigned char address;
  79.         if(y==1)
  80.                  address=0x80+x;         //顯示在第一排的時候的x的地址
  81.         else
  82.                  address=0xc0+x;         //顯示在第二排的時候的x的地址
  83.         LCD_write_command(address);         //輸入地址
  84.         LCD_write_data(dat+48);                 //輸入數據
  85. }
  86. void dis_num(void)
  87. {
  88.         unsigned char i=0,j=0,k=0;
  89.         LCD_write_command(0x01);//清除屏幕顯示
  90.         character[0] = fre/10000000;
  91.         character[1] = fre/1000000%10;
  92.         character[2] = fre/100000%10;
  93.         character[3] = fre/10000%10;
  94.         character[4] = fre/1000%10;
  95.         character[5] = fre/100%10;
  96.         character[6] = fre/10%10;
  97.         character[7] = fre%10;
  98.         character[8] = 'H';
  99.         character[9] = 'z';
  100.         for(i = 0;i<4;i++)                 //顯示“fre=”
  101.         {
  102.                 LCD_disp_char(i+0,1,character_1[i]);
  103.         }
  104.         for(i = 0;i<10;i++)         //判斷第一個不為0的數
  105.         {
  106.                 if(character[i]!=0)
  107.                 break;
  108.         }
  109.         k = 8-i;
  110.         for(j = 0;j<k;j++)         //顯示所有的數字
  111.         {
  112.                 LCD_disp_num(4+j,1,character[i++]);        
  113.         }
  114.         for(i = 5;i<7;i++)         //顯示“Hz”
  115.         {
  116.                 LCD_disp_char(j+4,1,character_1[i]);
  117.                 j++;
  118.         }
  119. }
  120. void main()
  121. {
  122.         LCD_init();
  123.         dis_num();
  124.         while(1);
  125. }
復制代碼
ID:121859 發表于 2022-5-7 17:24
寫命令和數據延時時間可能太短了,加長,到1~3毫秒估計就可以了。
ID:262 發表于 2022-5-7 16:17
來看一下51hei論壇里面解決此問題的痛苦經歷吧:
51hei搜索框輸入"1602 方塊"或者"1602 黑塊"或者"1602 白塊"或者"1602 格":

這個是io口設置問題,最終搞定了:http://www.zg4o1577.cn/bbs/dpj-199732-1.html
http://www.zg4o1577.cn/bbs/dpj-168643-1.html
http://www.zg4o1577.cn/bbs/dpj-208189-1.html
http://www.zg4o1577.cn/bbs/dpj-210690-1.html

既有可能是軟件問題也有硬件問題
http://www.zg4o1577.cn/bbs/dpj-187378-1.html
http://www.zg4o1577.cn/bbs/dpj-160754-1.html

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.日本精品 | 久久久久久99 | 国产一区二区三区免费 | 91精品国产777在线观看 | 青青草av网站 | 国内精品伊人久久久久网站 | 亚洲欧美日本在线 | 日日艹夜夜艹 | 97国产精品| 久久r精品| 一级片网站视频 | 成人黄色av网址 | 视频一区中文字幕 | 91免费版在线 | 欧美日韩国产一区二区三区不卡 | 色综合久 | 亚欧洲精品在线视频免费观看 | 国产内谢 | 国产精品久久久久久久久免费桃花 | 国产xxxx在线 | 国产精品久久久亚洲 | 成人在线小视频 | 国产精品久久久久久久久久免费 | 高清一区二区三区 | 欧美亚洲一区二区三区 | 亚洲免费高清 | 大香在线伊779 | 成人福利视频 | 91精品国产综合久久精品 | 欧美激情精品久久久久 | 在线国产一区二区 | 91福利电影在线观看 | 不卡视频在线 | 一级高清| 国产日韩中文字幕 | 99久久久久久99国产精品免 | 欧美精品一区二区在线观看 | 国产日韩欧美 | 亚州影院 | 国户精品久久久久久久久久久不卡 | 免费成人在线网站 |