找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1397|回復(fù): 8
收起左側(cè)

1602顯示兩行白塊是什么原因,仿真顯示沒有問題,實際電路和仿真電路是一樣的

[復(fù)制鏈接]
ID:1043226 發(fā)表于 2022-8-29 15:46 | 顯示全部樓層 |閱讀模式
#include<reg52.h>
#define ucharunsigned char
#define uintunsigned int
int LCD_init();    //聲明初始化函數(shù)
int write_com(unsignedchar);//聲明寫命令函數(shù)
intwrite_date(unsigned char);//聲明寫數(shù)據(jù)函數(shù)
intdelay(unsigned char);//聲明延遲函數(shù)
voidtlc5615(unsigned int dat);// TLC5615轉(zhuǎn)換函數(shù)
voidLCD_send(unsigned char,unsigned char,unsigned char[],unsigned char);//聲明LCD函數(shù)
sbit addKey =P1^0;//用于增加目標(biāo)電壓按鍵
sbit subKey =P1^1;//用于減小目標(biāo)電壓按鍵
sbit CS=P3^5;//定義ADC0832腳位
sbit CLK=P3^7;//定義ADC0832腳位
sbit DO= P3^6;//定義ADC0832腳位
sbit DI=P3^4;//定義ADC0832腳位
sbit LED=P1^2;//定義LED燈腳位
sbit RS =P2^2;//定義LCD腳位
sbit RW =P2^1;//定義LCD腳位
sbit EN =P2^0;//定義LCD腳位
sbit CS5615=P1^6;//定義DAC5615腳位
sbitSCLK5615=P1^5;//定義DAC5615腳位
sbitDATA5615=P1^7;//定義DAC5615腳位
ucharvoltage[6]="0.00 V";//lcd顯示負(fù)載電壓
uchar end[6]="4.30V";//lcd顯示目標(biāo)電壓
unsigned longint val;//(負(fù)載電壓)用于單片機電壓比較
unsigned longint endVal=430;//(目標(biāo)電壓)用于單片機電壓比較
voiddelay2ms(void)   //晶振12M,誤差 0us,含調(diào)用
{
    unsigned char a,b;
    for(b=133;b>0;b--)
    for(a=6;a>0;a--);
}
uchar AD0832()
{     
       uchar V =0,i = 0;
        CS=0; //片選信號,低電平有效
        DO=0;    //DO為高阻態(tài),這里置低為后續(xù)讀取做準(zhǔn)備
        delay2ms();
                     
       //前三個脈沖為配置設(shè)置
       CLK=0;
        delay2ms();
        DI=1;
        CLK=1;//第一個脈沖,起始位
        delay2ms();
        CLK=0;
        delay2ms();
        DI=1;
        CLK=1;//第二個脈沖,該位為“1”時是單端輸入模式,為“0”時是差分輸入模式
        delay2ms();
        CLK=0;
        delay2ms();
        DI=0; //第三個脈沖,DI=1表示選擇通道1(CH2),DI=0表示選擇通道0(CH1)
        CLK=1;
        delay2ms();
        
        DI=0; //DI轉(zhuǎn)為高阻態(tài),狀態(tài)無關(guān)緊要,這里給低方便下一輪讀取
        DO=1; //DO口恢復(fù)默認(rèn)上拉,準(zhǔn)備接收信號
        CLK=1;
        delay2ms();
        CLK=0; //第一個下降沿,為去數(shù)做準(zhǔn)備
        delay2ms();//等待芯片接收下降沿并切換輸出模式
        
                            //接收8位信號并轉(zhuǎn)換
        for(i=0;i<8;i++)
        {
          CLK = 1;
                delay2ms();
                CLK = 0;
                if(DO)//如果DO為高電平,相應(yīng)的位數(shù)是1
                                                               V= V | 1<<(7-i);
        }
        CS = 1;//關(guān)閉片選,結(jié)束一個轉(zhuǎn)換周期
        return V;
}
void Tran(uchardigit)//用于顯示lcd顯示負(fù)載電壓
{
              val = (unsigned longint)5*100*digit/256;
        voltage[0] ='0'+ val/100;//百位
        voltage[2] ='0'+ val/10%10;//十位
        voltage[3] ='0'+ val%10;//個位
}
void key()//識別按鍵
{
      
              if(addKey==0);//按鍵按下
              {
                     delay(5);//延時
                      if(addKey==0)//按鍵按下
                      {
                           endVal=endVal+10;//增加目標(biāo)電壓
                      }
              }
              if(subKey==0)//按鍵按下
              {
                     delay(5);//延時
                      if(subKey==0)//按鍵按下
                      {
                           endVal=endVal-10;//減少目標(biāo)電壓
                      }
              }     
               if(endVal>480)//電壓值不大于4.80V
               {
                   endVal=480;//電壓值不大于4.80V
               }
                            end[0] ='0'+endVal/100;//百位
                      end[2]='0'+ endVal/10%10;//十位
                      end[3]='0'+ endVal%10;//個位
                       }
void nowEnd()//負(fù)載電壓與目標(biāo)電壓比較
{
if(val>=endVal)//val為負(fù)載電壓,endVal為目標(biāo)電壓
{
tlc5615(0);//5615電壓輸出為0
LED=0;//關(guān)閉LED燈
}
}
              
voidLCD_send(unsigned char i,unsigned char j,unsigned char str[],unsigned char n)
{
       //輸入:顯示行數(shù)i,列數(shù)j,輸出字符,輸出字符長度n
       unsigned char x=0;
       if(i==1)
       {write_com(0x80+j);}
       else
       {write_com(0x80+0x40+j);}
    for(x=0;x<n;x++)
    {
         write_date(str[x]);
    }
}
              
int LCD_init()//初始化函數(shù)體
{
    EN = 0;
    write_com(0X38);//設(shè)置16*2顯示,5*7點陣,8位數(shù)據(jù)接口
    write_com(0X0C);//設(shè)置開顯示,不顯示光標(biāo)
    write_com(0X06);//寫一個字符時,整屏右移
    write_com(0X01);//顯示清零
    return 0;
}
intwrite_com(unsigned char com)//寫命令的函數(shù)體
{
    RS = 0;
    RW = 0;
    P0 = com;
    delay(5);
    EN = 1;
    delay(5);
    EN = 0;
    return 0;
}
intwrite_date(unsigned char data1)//寫數(shù)據(jù)的函數(shù)體
{
    RS = 1;
    RW = 0;
    P0 = data1;
    delay(5);
    EN = 1;
    delay(5);
    EN = 0;
    return 0;
}
intdelay(unsigned char xms)//延遲函數(shù)
{
    unsigned char x,y;
    for(x=xms;x>0;x--)
        for(y=110;y>0;y--);
    return 0;
}   
voidtlc5615(unsigned int dat)//控制5615電壓輸出
{
unsigned char i;
CS5615=1;
DATA5615=0;
SCLK5615=0; //CS高電平期間,SCLK為低電平
dat<<=6;// 數(shù)字量dat左移6位,保留原dat低10位。新dat的高10位有效,低6位全0。
CS5615=0; // CS片選有效,開始接收數(shù)據(jù)
SCLK5615=0;
for(i=0;i<12;i++)// 發(fā)送10位數(shù)據(jù)和2位0,從最高位開始發(fā)送。
{ // 非級聯(lián)方式,只需要輸入12位數(shù)據(jù)。
if((dat&0x8000)==0x8000)
DATA5615=1;
else
DATA5615=0;
SCLK5615=1; //SCLK上升沿,數(shù)據(jù)輸入
dat<<=1;
SCLK5615=0; //SCLK恢復(fù)低電平
}
CS5615=1; // CS上升沿,數(shù)據(jù)送到DAC寄存器
// CS的上升沿和下降沿只有在SCLK為低的時候有效
SCLK5615=0;
DATA5615=0;// 拉高片選端,拉低時鐘端與數(shù)據(jù)端,回到初始狀態(tài)
}
void main()//主函數(shù)  
{            
       tlc5615(430);
       LCD_init();
       LCD_send(1,0,"Now:",4);
       LCD_send(2,0,"End:",4);
       while(1)  
       {                  
              Tran(AD083());
              LCD_send(1,6,voltage,6);
              LCD_send(2,6,end,6);
              key();
              nowEnd();
       }   
}
回復(fù)

使用道具 舉報

ID:155507 發(fā)表于 2022-8-29 20:21 | 顯示全部樓層
仿真上沒問題不代表實物上也能正常運行,樓主都沒曬實物電路圖問題不好找

樓主 :1/建議你檢查電路是否存在虛焊
           2/你看一下軟件的字符排布是否正確(可能會存在錯位情況)


回復(fù)

使用道具 舉報

ID:59202 發(fā)表于 2022-8-29 22:18 | 顯示全部樓層
你這種情況很大可能是1602初始化不完全,可以參考一下這個資料

1602液晶幾種典型顯示狀態(tài)及解決方案.pdf

171.02 KB, 下載次數(shù): 11

回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2022-8-30 06:26 | 顯示全部樓層
樓主這個錯漏百出的代碼“仿真顯示沒有問題”?
回復(fù)

使用道具 舉報

ID:121859 發(fā)表于 2022-8-30 08:50 | 顯示全部樓層
背光調(diào)調(diào)吧,應(yīng)該是背光電壓不合適。
回復(fù)

使用道具 舉報

ID:16255 發(fā)表于 2022-8-30 09:32 | 顯示全部樓層
我認(rèn)為是對比度沒調(diào)好
回復(fù)

使用道具 舉報

ID:21069 發(fā)表于 2022-8-30 11:19 | 顯示全部樓層
1602是非;A(chǔ)的一個器件!自己完全可以檢查這些問題的。先只作一個簡單的顯示功能,來判斷是電路還是代碼的問題,網(wǎng)上大把的代碼,可以下一個別人調(diào)好的代碼作個判斷
回復(fù)

使用道具 舉報

ID:61876 發(fā)表于 2022-8-30 11:39 | 顯示全部樓層
換一塊1602看看吧。我曾經(jīng)遇到過同樣問題,換了塊1602 馬上就解決了。
回復(fù)

使用道具 舉報

ID:1034262 發(fā)表于 2022-8-30 13:30 | 顯示全部樓層
1602速度很慢,注意是不是速度太快了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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