找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

LCD1602顯示黑色小方塊毫無反應(yīng)無任何顯示,測試了好多的程序

[復(fù)制鏈接]
ID:430097 發(fā)表于 2018-11-20 19:23 | 顯示全部樓層 |閱讀模式
用的是普中科技的51單片機(jī),從網(wǎng)上找了一些lcd的代碼把程序燒入單片機(jī)后lcd毫無反應(yīng),就只是背景板亮再就是lcd的第一行有好多黑色的小方塊。下面是其中的一個代碼。
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. //這三個引腳參考資料
  5. sbit E=P2^7;                //1602使能引腳
  6. sbit RW=P2^6;                //1602讀寫引腳        
  7. sbit RS=P2^5;                //1602數(shù)據(jù)/命令選擇引腳

  8. uchar tab1[]="512";  //要顯示什么就在這兒改
  9. uchar tab2[]="LCD1602 test ok!";  //[size=15.5555562973022px]要顯示什么就在這兒改

  10. void delay(uint del)   //延時1ms
  11. {
  12. uint i,j;
  13. for(i=0;i<del;i++)
  14.    for(j=0;j<=168;j++);
  15. }
  16. void writecmd(uchar com)  //寫指令
  17. {
  18. E=0;
  19. RS=0;
  20. RW=0;
  21. P0=com;
  22. delay(2);
  23. E=1;  
  24. delay(2);
  25. E=0;
  26. }
  27. void writedata(uchar dat)//寫數(shù)據(jù)
  28. {  
  29.   E=0;
  30.   RS=1;
  31.   RW=0;
  32.   P0=dat;
  33.   delay(2);
  34.   E=1;  
  35.   delay(2);
  36.   E=0;

  37. }
  38. void init(void)               //初始化
  39. {
  40. delay(15);
  41. writecmd(0x38);
  42. delay(5);
  43. writecmd(0x38);
  44. delay(5);
  45. writecmd(0x38);
  46. writecmd(0x38);
  47. writecmd(0x08);
  48. writecmd(0x01);
  49. writecmd(0x06);
  50. writecmd(0x0c);
  51. }
  52. void main()
  53. {  
  54. uchar j;
  55.   init();
  56.   writecmd(0x80);    //告訴液晶在哪個地方顯示 (設(shè)置地址指針)//80H+00
  57.   for(j=0;j<16;j++)  //有16個字符,要循環(huán)16次
  58.   {
  59.    writedata(tab1[j]);
  60.         delay(2);
  61.   }
  62.   writecmd(0x80+0x40); //再設(shè)置第二行的起始位置80H+40H

  63.   for(j=0;j<16;j++)   //有16個字符,要循環(huán)16次
  64.   {
  65.   writedata(tab2[j]);
  66.          delay(2);
  67.   }
  68.   while(1);         //讓液晶顯示就一直停在這里。

  69. }
復(fù)制代碼


回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2018-11-21 01:22 | 顯示全部樓層
這是51黑論壇里面別人相似問題的解決過程:http://www.torrancerestoration.com/bbs/dpj-39388-1.html
回復(fù)

使用道具 舉報

ID:405182 發(fā)表于 2018-11-21 08:12 | 顯示全部樓層
試試這個
void lcd_initial(void)
{
        RS=0;
        delay(300);
        RW=0;
        ENABLE=1;
        delay(300);
        P0=0x38;
        delay(300);
        ENABLE=0;
        P0=0x06;
        ENABLE=1;
        delay(300);
        ENABLE=0;
        P0=0x0c;         //////
        ENABLE=1;
        delay(300);
        ENABLE=0;
        P0=0x0c;
        ENABLE=1;
        delay(300);
        ENABLE=0;
        P0=0x01;
        ENABLE=1;
        delay(300);
        ENABLE=0;
        P0=0x80;
        ENABLE=1;
        delay(300);
        ENABLE=0;
}
/////
void writecharxy(unsigned char x,unsigned char y,unsigned char c)
{
   switch(x)
        {
                case 0x01:
                {
                        RS=0;
                        delay(300);
                        RW=0;
                        delay(300);
                        ENABLE=1;
                        delay(300);
                        P0=0x80|y;
                        delay(300);
                        ENABLE=0;
                        RS=1;
                        delay(300);
                        RW=0;
                        delay(300);
                        ENABLE=1;
                        delay(300);
                        P0=c;
                        delay(300);
                        ENABLE=0;
                }
                        break;
                case 0x02:
                {
                       
                        RS=0;
                        delay(300);
                        RW=0;
                        delay(300);
                        ENABLE=1;
                        delay(300);
                        P0=0xc0|y;
                        delay(300);
                        ENABLE=0;
                        RS=1;
                        delay(300);
                        RW=0;
                        delay(300);
                        ENABLE=1;
                        delay(300);
                        P0=c;
                        delay(300);
                        ENABLE=0;
                }
                        break;
                default:break;
        }
}
//////
void delay(unsigned int t)
{
for(;t>0;t--);
}
回復(fù)

使用道具 舉報

ID:423020 發(fā)表于 2018-11-24 10:45 | 顯示全部樓層
1、寫指令、寫數(shù)據(jù)子程序里開始沒有讀忙,不知道是不是這個問題,可以在一開始加入幾個ms的延時替代讀忙試一下。
2、也有可能是對比度沒有調(diào)對,可以適當(dāng)?shù)脑黾右韵翷CD電壓試一下。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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