標題: 單片機+LCD12864一直藍屏,無任何顯示 如何一步步的排查問題? [打印本頁]

作者: 吃顆草莓    時間: 2021-12-25 21:52
標題: 單片機+LCD12864一直藍屏,無任何顯示 如何一步步的排查問題?
按照教學視頻編寫的程序,輸入進去不顯示,只藍屏,孩子弄一天了,到底怎么回事。

12864.jpg (213.08 KB, 下載次數(shù): 80)

12864.jpg

作者: 13205495918    時間: 2021-12-26 08:35
嘿嘿嘿,你這可以把12864的程序貼出來讓大家看看到底是軟件的問題還是硬件的問題
作者: a0931727149    時間: 2021-12-26 12:00
單片機+ lcd12864  只藍屏
要檢查:
1.硬件接線對嗎?(包括單片機有無正常工作 .. lcd12864接線有無問題,程式中使用管腳與接線是否相符)
2.編寫的程序適合這個LCD對嗎?(LCD 12864不只一總型號..不同的型號驅(qū)動程是有差別)
3.編寫的程序?qū)?
4.lcd 12864對比調(diào)整適當
5.lcd損壞 .....(這種情形相當少見)
只要不是lcd損壞 ...完成1 至 4 項 一定會顯示




作者: 楊雪飛    時間: 2021-12-26 14:18
這個如果不是某某開發(fā)板的套件加配套程序的話很難說明到底哪里除了問題,12864問題不比1602,要復雜的多,比如同一廠家的LCD12864只是后綴不同都需要不同的接線以及驅(qū)動程序,而且不同的主控芯片需要不同的初始化程序。把問題敘述的更清楚些也許更容易讓大家?guī)椭憬鉀Q問題。
作者: 楊雪飛    時間: 2021-12-26 14:22
比如,你貼出來的甚至連接線都看不清楚誰跟誰。起碼的液晶屏的型號,與MCU連線,以及程序全部貼好,然后大家再根據(jù)具體情況幫助你判斷問題的所在。這樣會更好些,不讓你讓大家浪費時間在這猜想,這樣根本猜不出個所以然,因為問題太多了。

畢竟像貼圖這種情況只需要連接背光的AK兩個引腳即可。
作者: Qiuhan    時間: 2021-12-26 16:59
12864的第三個焊點旁邊有一個焊點 看看有沒有焊上  加一個調(diào)節(jié)屏幕的電阻試試  10K的可調(diào)電阻
作者: naiyazi2    時間: 2021-12-26 18:44
Qiuhan 發(fā)表于 2021-12-26 16:59
12864的第三個焊點旁邊有一個焊點 看看有沒有焊上  加一個調(diào)節(jié)屏幕的電阻試試  10K的可調(diào)電阻

一般都是用的LCD12864背部的可調(diào)電阻  如果想用第三個焊點VO來外接可調(diào)電阻的話需要把背部的通路斷掉
作者: middfat    時間: 2021-12-26 19:55
有一個小經(jīng)驗:之前我玩這個12864的時候也是用的接線的方式,故障也是差不多:有背光,就是不顯示。
后來搞了很久,才發(fā)現(xiàn)是一根接線質(zhì)量差,是中間斷的。走了好多彎路才糾正過來
作者: 這一生只為你    時間: 2021-12-26 20:21
我仿佛看到了曾經(jīng)的自己。首先,要在正常使用的開發(fā)板上,用原廠點屏代碼測試,最好連引腳都不要動,能成功點亮了再說。然后,自己焊接的實驗板,先實現(xiàn)正常的下載點燈都沒問題了,再考慮修改移植代碼。這樣用杜邦線連接模塊最好只用于驗證,實際使用最好是畫圖打板,反正現(xiàn)在打板也是免費,順便練習畫圖技能,F(xiàn)在萬能寶上面的杜邦線質(zhì)量普遍不怎么樣,我已經(jīng)被坑過好幾次了,所以,有條件最好自己制作杜邦線,或者直接焊接。
作者: 這一生只為你    時間: 2021-12-26 20:21
middfat 發(fā)表于 2021-12-26 19:55
有一個小經(jīng)驗:之前我玩這個12864的時候也是用的接線的方式,故障也是差不多:有背光,就是不顯示。
后來 ...

確實是,現(xiàn)在很難買到質(zhì)量好的杜邦線了。。。
作者: szjavali    時間: 2021-12-26 20:26
應(yīng)該是對比度的問題
作者: 15996822510    時間: 2021-12-28 09:02
1.程序問題——占大頭,所謂的教程程序一般都得修修改改才能用。
2.上面說的對比度問題
3.接線問題
這些問題都可以跟屏幕廠家溝通,都不是上面大問題
至于屏幕損壞,只要是才買的這種幾率很小很小
作者: man1234567    時間: 2021-12-28 15:25
如果沒有老師實地指導,建議買成品的試驗套件,想省錢某魚就可以不用買全新。
套件一般都廠家有標配的例程,先搞出花樣提高興趣并且先感覺一下,然后移置到自己DIY的板上。
如果有實地指導除外,否則不同器件的接線和編程都是不一樣的,對于你這種自制寶貝只能理論上點贊。
作者: 風之痕于夢想    時間: 2021-12-29 15:47
這樣一般都是底層驅(qū)動對不上
作者: 吃顆草莓    時間: 2021-12-30 17:41
我退貨了,謝謝各位熱血的朋友,就不一一回復啦
作者: smart8888    時間: 2021-12-30 22:54
多看幾遍12864的說明書DATASHEET,將引腳功能、數(shù)據(jù)、控制 代碼記熟,先排除硬件問題。再仔細校對控制時序。
static void lcd12864_write_command(uint8 cmd)/*寫命令*/
{
    while(lcd12864_chek_busy());
    LCD12864_RS = 0;
    LCD12864_RW = 0;
    LCD12864_EN = 0;
    delay1us();
    LCD12864_DATA = cmd;
    delay50us();
    LCD12864_EN = 1;
    delay50us();
    LCD12864_EN = 0;
   return temp1;
}
// 描述: lcd12864寫數(shù)據(jù)
// 參數(shù): dat:寫入的數(shù)據(jù).
// 返回: none.
//========================================================================
static void lcd12864_write_data(uint8 dat)
{
    while(lcd12864_chek_busy());
    LCD12864_RS = 1;
    LCD12864_RW = 0;
    LCD12864_EN = 0;
    LCD12864_DATA = dat;
    delay50us();
    LCD12864_EN = 1;
    delay50us();
    LCD12864_EN = 0;
}

//========================================================================
// 描述: lcd12864初始化
// 參數(shù): none.
// 返回: none.
//========================================================================
void lcd12864_init()
{
    //引腳配置
    LCD12864_RS_OUT;
    LCD12864_RW_OUT;
    LCD12864_E_OUT;
    LCD12864_RST_OUT;  
    LCD12864_DATA_OUT;

    LCD12864_RST = 1;  
    LCD12864_RST = 0;            
    LCD12864_RST = 1;                //復位RST=1
    lcd12864_write_command(0x34);         //34H--擴充指令操作
    delay5us();
    lcd12864_write_command(0x30);         //功能設(shè)置,一次送8位數(shù)據(jù),基本指令集
    delay5us();
    lcd12864_write_command(0x0C);         //顯示狀態(tài)開關(guān):整體顯示開,光標顯示關(guān),光標顯示反白關(guān)
    delay5us();
    lcd12864_write_command(0x01);         //清DDRAM
    delay5us();      
    lcd12864_write_command(0x02);         //DDRAM地址歸位
    delay5us();
    lcd12864_write_command(0x80);         //設(shè)定DDRAM 7位地址000,0000到地址計數(shù)器AC
    delay5us();
}

//========================================================================
// 描述: lcd12864設(shè)定顯示位置
// 參數(shù): X,Y:坐標.
// 返回: none.
//========================================================================
void lcd12864_display_pos(uint8 X,uint8 Y)
{                          
   uint8  pos;
   if (Y==0)
     {Y=0x80;}
   else if (Y==1)
     {Y=0x90;}
   else if (Y==2)
     {Y=0x88;}
   else if (Y==3)
     {Y=0x98;}
   pos = X+Y ;  
   lcd12864_write_command(pos);     //顯示地址
}

//========================================================================
// 描述: lcd12864清屏
// 參數(shù): none.
// 返回: none.
//========================================================================
void lcd12864_clear()
{
    lcd12864_write_command(0x30);//
    lcd12864_write_command(0x01);//清除顯示
    delay(1);
}

//========================================================================
// 描述: lcd12864寫單個字符
// 參數(shù): X,Y;坐標; sig:要顯示的字符.
// 返回: none.
//========================================================================
void lcd12864_show_char(uint8 X,uint8 Y,uint8 sig)
{   
    lcd12864_display_pos(X,Y);
    lcd12864_write_data(sig);             //輸出單個字符
}

//========================================================================
// 描述: lcd12864寫字符串
// 參數(shù): X(0~3)行,Y(0~7)個字符; str:要顯示的字符串;
// 返回: none.
//========================================================================
void lcd12864_show_string(uint8 X,uint8 Y,uint8 *str)
{
    uint8 i = 0;
    lcd12864_display_pos(X,Y);
    while(str[i] != '\0')
    {
         lcd12864_write_data(str[i]);
         i++;
    }
}

//========================================================================
// 描述: lcd12864寫數(shù)字()
// 參數(shù): X(0~3)行,Y(0~7)個字符; num:要顯示的數(shù)字;
// 返回: none.
//========================================================================
void lcd12864_show_num(uint8 x,uint8 y,int num)
{
        char men[8];
        char *str = men;
        sprintf(str,"%d",num);
        lcd12864_show_string(x,y,str);
}

//========================================================================
// 描述: lcd12864顯示圖像
// 參數(shù): p:要顯示的圖像.
// 返回: none.
//========================================================================
void lcd12864_show_image(uint8 *p)
{
    int ygroup,x,y,i;
    int temp;
    int tmp;
            
    for(ygroup=0;ygroup<64;ygroup++)           //寫入液晶上半圖象部分
    {                           //寫入坐標
        if(ygroup<32)
        {
            x=0x80;
            y=ygroup+0x80;
        }else
        {
            x=0x88;
            y=ygroup-32+0x80;   
        }         
        lcd12864_write_command(0x34);        //寫入擴充指令命令
        lcd12864_write_command(y);           //寫入y軸坐標
        lcd12864_write_command(x);           //寫入x軸坐標
        lcd12864_write_command(0x30);        //寫入基本指令命令
        tmp=ygroup*16;
        for(i=0;i<16;i++)
                {
                    temp=p[tmp++];
                    lcd12864_write_data(temp);
        }
    }
    lcd12864_write_command(0x34);        //寫入擴充指令命令
    lcd12864_write_command(0x36);        //顯示圖象
}


作者: HAPPY3    時間: 2021-12-31 16:46
第一接線套路,二程序套路




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1