找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 3507|回復(fù): 17
打印 上一主題 下一主題
收起左側(cè)

向前輩請教51單片機控制下的12864液晶屏顯示不正常

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:700226 發(fā)表于 2020-3-1 22:26 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar code table1[]="梨花淡白柳深青, 柳絮飛時花滿城。惆悵東欄一株雪,人生看的幾清明。";
uchar code table2[]="朝辭白帝彩云間,兩岸猿聲啼不住,千里江陵一日還。輕舟已過萬重山。";
uchar code table3[]="落魄江南載酒行,楚腰纖細(xì)掌中輕。十年一覺揚州夢,贏得青樓薄幸名。";
uchar code table4[]="去年花里逢君別,今日花開已一年,世事茫茫難自料,春愁黯黯獨成眠。";

sbit LCDEN = P2^2;
sbit LCDRS = P2^0;
sbit LCDRW = P2^1;
sbit LCDRST = P2^3;       
sbit LCDPSB = P2^4;                       //并/串方式選擇


void delay(uint z)       //延遲函數(shù)
{
     uint x,y;
     for(x=z;x>0;x--)
     for(y=110;y>0;y--)
     ;
}


void write_com(uchar com)     //寫指令
{
     LCDRS = 0;
     LCDRW = 0;
     LCDEN = 0;
     P0 = com;
     delay(5);        //這個延遲函數(shù)必須要有,因為讀數(shù)據(jù)時當(dāng)E為高時,數(shù)據(jù)必須保持穩(wěn)定
     LCDEN = 1;
     LCDEN = 0;
}


void write_date(uchar date)      //寫數(shù)據(jù)
{
     LCDRS = 1;
     LCDRW = 0;
     LCDEN = 0;
     P0=date;
     delay(5);                                //這個延遲必須要有
     LCDEN = 1;
     LCDEN = 0;;
}


void write_word(uchar *add)                   //用指針
{
     uchar i;
     write_com(0x80);                   //從第一行開始顯示
     for(i=0;i<64;i++)                        //一個漢字占兩個字節(jié)
     {
         write_date(*add);
         add++;                                    //指針加,指向下一個字節(jié)

     }

}


void init()                                                  //初始化
{
             LCDRST = 1;                          //低電平復(fù)位,高電平運行
        write_com(0x30);                       //基本指令集
        delay(1);
        write_com(0x02);                        //地址歸位
        delay(1);
        write_com(0x0c);                        //整體顯示打開,光標(biāo)關(guān)閉
        delay(1);
        write_com(0x01);                        //清屏顯示
        delay(1);
        write_com(0x06);   
}


void main()
{
    init();
   while(1)
    {

             write_word(table1);
             delay(7000);         
             write_word(table2);
             delay(7000);
             write_word(table3);
              delay(7000);
             write_word(table4);
             delay(7000);
       }
}
問題是數(shù)組table2中的數(shù)組元素顛倒順序后才能在12864上顯示正常,其余三個數(shù)組顯示的順序是第一句,第三句,第二句,第四句,請大神賜教,問題出在哪里?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:213173 發(fā)表于 2020-3-2 07:05 | 只看該作者
樓主按地址順序?qū)懀糠肿址绯銎镣�。一屏�?行寫,首地址分別是  0x80、0x90、0x88、0x98。
回復(fù)

使用道具 舉報

板凳
ID:401564 發(fā)表于 2020-3-2 08:20 | 只看該作者
問題在于你不認(rèn)真看數(shù)據(jù)手冊,你去對一下12864顯示的顯示內(nèi)容和對應(yīng)的地址,你就會明白了
回復(fù)

使用道具 舉報

地板
ID:700226 發(fā)表于 2020-3-2 18:06 | 只看該作者
wulin 發(fā)表于 2020-3-2 07:05
樓主按地址順序?qū)�,部分字符溢出屏外。一屏�?行寫,首地址分別是  0x80、0x90、0x88、0x98。

師傅,還得請您賜教
uchar table1[16] = "朝辭白帝彩云間,";
uchar table2[16] = "千里江陵一日還。";
uchar table3[16] = "兩岸猿聲啼不住,";
uchar table4[16] = "輕舟已過萬重山。";
-----------------------------------------------------------------------------
  1. int main()
  2. {
  3.         uchar i = 0;
  4.         LCDPSB = 1;
  5.         init();
  6.         write_order(0x80);
  7.         for(i = 0; i < 16; i++)
  8.                 write_data( table1[i]);

  9.         write_order(0x90);
  10.         for(i = 0;i < 16; i++)
  11.                 write_data( table2[i]);
  12.         
  13.         write_order(0x88);
  14.         for(i = 0; i < 16; i++)
  15.                 write_data( table3[i]);

  16.         write_order(0x98);
  17.         for(i = 0; i < 16; i++)
  18.                 write_data( table4[i]);

  19.         while(1);
  20.         
  21. }
復(fù)制代碼

師傅我原來是這樣在液晶屏上顯示了,正常,現(xiàn)在我想顯示4屏的古詩,循環(huán)顯示,還得請您賜教
回復(fù)

使用道具 舉報

5#
ID:213173 發(fā)表于 2020-3-2 21:01 | 只看該作者
藏月亮 發(fā)表于 2020-3-2 18:06
師傅,還得請您賜教
uchar table1[16] = "朝辭白帝彩云間,";
uchar table2[16] = "千里江陵一日還。"; ...

你這樣寫試試,手上沒有12864屏,無法驗證。
  1.         uchar code table1[]="梨花淡白柳深青, 柳絮飛時花滿城。惆悵東欄一株雪,人生看的幾清明。";
  2.         uchar code table2[]="朝辭白帝彩云間,兩岸猿聲啼不住,千里江陵一日還。輕舟已過萬重山。";
  3.         uchar code table3[]="落魄江南載酒行,楚腰纖細(xì)掌中輕。十年一覺揚州夢,贏得青樓薄幸名。";
  4.         uchar code table4[]="去年花里逢君別,今日花開已一年,世事茫茫難自料,春愁黯黯獨成眠。";
  5.         uchar i,j,*p;

  6.         for(j=0;j<4;j++)
  7.         {
  8.                 if(j==0) p=table1;
  9.                 if(j==1) p=table2;
  10.                 if(j==2) p=table3;
  11.                 if(j==3) p=table4;
  12.                 write_order(0x80);
  13.                 for(i = 0; i < 8; i++)
  14.                         write_data(p+i);
  15.                
  16.                 write_order(0x90);
  17.                 for(i = 0; i < 8; i++)
  18.                         write_data(p+8+i);
  19.                
  20.                 write_order(0x88);
  21.                 for(i = 0; i < 8; i++)
  22.                         write_data(p+16+i);
  23.                
  24.                 write_order(0x98);
  25.                 for(i = 0; i < 8; i++)
  26.                         write_data(p+24+i);
  27.                 delay(7000);
  28.         }
復(fù)制代碼
回復(fù)

使用道具 舉報

6#
ID:419968 發(fā)表于 2020-3-2 22:50 | 只看該作者
uchar table[4][]={{"梨花淡白柳深青, 柳絮飛時花滿城。惆悵東欄一株雪,人生看的幾清明。"}
                              "朝辭白帝彩云間,兩岸猿聲啼不住,千里江陵一日還。輕舟已過萬重山。";
                              "落魄江南載酒行,楚腰纖細(xì)掌中輕。十年一覺揚州夢,贏得青樓薄幸名。"
                              "去年花里逢君別,今日花開已一年,世事茫茫難自料,春愁黯黯獨成眠。"
                            }

while(1){

for(j=0;j<4;j++)
{
  write_order(0x80);
        for(i = 0; i < 16; i++)
                write_data( table[j][16*j+i]);

        write_order(0x90);
        for(i = 0;i < 16; i++)
               write_data( table[j][16*j+i]);
        
        write_order(0x88);
        for(i = 0; i < 16; i++)
               write_data( table[j][16*j+i]);

        write_order(0x98);
        for(i = 0; i < 16; i++)
             write_data( table[j][16*j+i]);



}



}


大概這樣
回復(fù)

使用道具 舉報

7#
ID:584814 發(fā)表于 2020-3-3 08:39 | 只看該作者
void write_word(uchar *add)                   //用指針
{     uchar i,j;
for(j=0;j<4;j++)
{
  write_order(0x80);
        for(i = 0; i < 16; i++)  { write_date(*add);  add++; }
  write_order(0x90);
        for(i = 0; i < 16; i++)  { write_date(*add);  add++; }
  write_order(0x88);
        for(i = 0; i < 16; i++)  { write_date(*add);  add++; }
  write_order(0x98);
        for(i = 0; i < 16; i++)  { write_date(*add);  add++; }
     }
}
回復(fù)

使用道具 舉報

8#
ID:700226 發(fā)表于 2020-3-3 15:12 | 只看該作者
藏月亮 發(fā)表于 2020-3-2 18:06
師傅,還得請您賜教
uchar table1[16] = "朝辭白帝彩云間,";
uchar table2[16] = "千里江陵一日還。"; ...

老師。您好,我把您寫的代碼移植到程序里后,屏上顯示亂碼,現(xiàn)在我把自己的代碼發(fā)來。您看看該如何修改,我是憑著興趣愛好自己學(xué)了一點,水平有限,還得請您賜教,代碼如下:

//顯示4屏漢字,每屏顯示7秒,來回循環(huán)顯示

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar code table1[]="梨花淡白柳深青, 柳絮飛時花滿城。惆悵東欄一株雪,人生看的幾清明。";
uchar code table2[]="朝辭白帝彩云間,兩岸猿聲啼不住,千里江陵一日還。輕舟已過萬重山。";
uchar code table3[]="落魄江南載酒行,楚腰纖細(xì)掌中輕。十年一覺揚州夢,贏得青樓薄幸名。";
uchar code table4[]="去年花里逢君別,今日花開已一年,世事茫茫難自料,春愁黯黯獨成眠。";

sbit LCDEN = P2^2;
sbit LCDRS = P2^0;
sbit LCDRW = P2^1;
sbit LCDRST = P2^3;       
sbit LCDPSB = P2^4;      //并/串方式選擇


void delay(uint z)       //延遲函數(shù)
{
     uint x,y;
     for(x=z;x>0;x--)
     for(y=110;y>0;y--)
     ;
}


void write_com(uchar com)     //寫指令
{
     LCDRS = 0;
     LCDRW = 0;
     LCDEN = 0;
     P0 = com;
     delay(5);        //這個延遲函數(shù)必須要有,因為讀數(shù)據(jù)時當(dāng)E為高時,數(shù)據(jù)必須保持穩(wěn)定
     LCDEN = 1;
     LCDEN = 0;
}


void write_date(uchar date)      //寫數(shù)據(jù)
{
     LCDRS = 1;
     LCDRW = 0;
     LCDEN = 0;
     P0=date;
     delay(5);                                //這個延遲必須要有
     LCDEN = 1;
     LCDEN = 0;;
}


void write_word(uchar *add)                   //用指針
{
     uchar i;
     write_com(0x80);                   //從第一行開始顯示
     for(i=0;i<64;i++)                        //一個漢字占兩個字節(jié)
     {
         write_date(*add);
         add++;                                    //指針加,指向下一個字節(jié)

     }

}


void init()                  //初始化
{
    LCDRST = 1;                              //低電平復(fù)位,高電平運行
        write_com(0x30);                       //基本指令集
        delay(1);
        write_com(0x02);                        //地址歸位
        delay(1);
        write_com(0x0c);                        //整體顯示打開,光標(biāo)關(guān)閉
        delay(1);
        write_com(0x01);                        //清屏顯示
        delay(1);
        write_com(0x06);   
}


void main()
{
   
        while(1)
    {

             write_word(table1);
             delay(7000);          //每一屏顯示秒鐘
         
         
             write_word(table2);
             delay(7000);
         
         
             write_word(table3);
             delay(7000);
               
                 write_word(table4);
             delay(7000);

     }
}

網(wǎng)上的前輩們說指針很難學(xué),自己現(xiàn)在也沒能明白,
回復(fù)

使用道具 舉報

9#
ID:700226 發(fā)表于 2020-3-3 15:21 | 只看該作者
adject 發(fā)表于 2020-3-2 22:50
uchar table[4][]={{"梨花淡白柳深青, 柳絮飛時花滿城。惆悵東欄一株雪,人生看的幾清明。"}
             ...

前輩您好,我把您寫的代碼移植到我的程序里后,不能顯示,我把自己的代碼發(fā)來,麻煩您看看怎樣修改好,
//顯示4屏漢字,每屏顯示7秒,來回循環(huán)顯示

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar code table1[]="梨花淡白柳深青, 柳絮飛時花滿城。惆悵東欄一株雪,人生看的幾清明。";
uchar code table2[]="朝辭白帝彩云間,兩岸猿聲啼不住,千里江陵一日還。輕舟已過萬重山。";
uchar code table3[]="落魄江南載酒行,楚腰纖細(xì)掌中輕。十年一覺揚州夢,贏得青樓薄幸名。";
uchar code table4[]="去年花里逢君別,今日花開已一年,世事茫茫難自料,春愁黯黯獨成眠。";

sbit LCDEN = P2^2;
sbit LCDRS = P2^0;
sbit LCDRW = P2^1;
sbit LCDRST = P2^3;       
sbit LCDPSB = P2^4;      //并/串方式選擇


void delay(uint z)       //延遲函數(shù)
{
     uint x,y;
     for(x=z;x>0;x--)
     for(y=110;y>0;y--)
     ;
}


void write_com(uchar com)     //寫指令
{
     LCDRS = 0;
     LCDRW = 0;
     LCDEN = 0;
     P0 = com;
     delay(5);        //這個延遲函數(shù)必須要有,因為讀數(shù)據(jù)時當(dāng)E為高時,數(shù)據(jù)必須保持穩(wěn)定
     LCDEN = 1;
     LCDEN = 0;
}


void write_date(uchar date)      //寫數(shù)據(jù)
{
     LCDRS = 1;
     LCDRW = 0;
     LCDEN = 0;
     P0=date;
     delay(5);                                //這個延遲必須要有
     LCDEN = 1;
     LCDEN = 0;;
}


void write_word(uchar *add)                   //用指針
{
     uchar i;
     write_com(0x80);                   //從第一行開始顯示
     for(i=0;i<64;i++)                        //一個漢字占兩個字節(jié)
     {
         write_date(*add);
         add++;                                    //指針加,指向下一個字節(jié)

     }

}


void init()                  //初始化
{
    LCDRST = 1;                              //低電平復(fù)位,高電平運行
        write_com(0x30);                       //基本指令集
        delay(1);
        write_com(0x02);                        //地址歸位
        delay(1);
        write_com(0x0c);                        //整體顯示打開,光標(biāo)關(guān)閉
        delay(1);
        write_com(0x01);                        //清屏顯示
        delay(1);
        write_com(0x06);   
}


void main()
{
   
        while(1)
    {

             write_word(table1);
             delay(7000);          //每一屏顯示秒鐘
         
         
             write_word(table2);
             delay(7000);
         
         
             write_word(table3);
             delay(7000);
               
                 write_word(table4);
             delay(7000);

     }
}

只有數(shù)組2把里邊的數(shù)組元素顛倒位置后才能在12864上正常顯示,其余三個數(shù)組都是第一  三  二  四句詩的順序顯示
回復(fù)

使用道具 舉報

10#
ID:700226 發(fā)表于 2020-3-3 15:38 | 只看該作者
man1234567 發(fā)表于 2020-3-3 08:39
void write_word(uchar *add)                   //用指針
{     uchar i,j;
for(j=0;j

//顯示4屏漢字,每屏顯示7秒,來回循環(huán)顯示

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar code table1[]="梨花淡白柳深青, 柳絮飛時花滿城。惆悵東欄一株雪,人生看的幾清明。";
uchar code table2[]="朝辭白帝彩云間,兩岸猿聲啼不住,千里江陵一日還。輕舟已過萬重山。";
uchar code table3[]="落魄江南載酒行,楚腰纖細(xì)掌中輕。十年一覺揚州夢,贏得青樓薄幸名。";
uchar code table4[]="去年花里逢君別,今日花開已一年,世事茫茫難自料,春愁黯黯獨成眠。";

sbit LCDEN = P2^2;
sbit LCDRS = P2^0;
sbit LCDRW = P2^1;
sbit LCDRST = P2^3;       
sbit LCDPSB = P2^4;      //并/串方式選擇


void delay(uint z)       //延遲函數(shù)
{
     uint x,y;
     for(x=z;x>0;x--)
     for(y=110;y>0;y--)
     ;
}


void write_com(uchar com)     //寫指令
{
     LCDRS = 0;
     LCDRW = 0;
     LCDEN = 0;
     P0 = com;
     delay(5);        //這個延遲函數(shù)必須要有,因為讀數(shù)據(jù)時當(dāng)E為高時,數(shù)據(jù)必須保持穩(wěn)定
     LCDEN = 1;
     LCDEN = 0;
}


void write_date(uchar date)      //寫數(shù)據(jù)
{
     LCDRS = 1;
     LCDRW = 0;
     LCDEN = 0;
     P0=date;
     delay(5);                                //這個延遲必須要有
     LCDEN = 1;
     LCDEN = 0;;
}


void write_word(uchar *add)                   //用指針
{
     uchar i;
     write_com(0x80);                   //從第一行開始顯示
     for(i=0;i<64;i++)                        //一個漢字占兩個字節(jié)
     {
         write_date(*add);
         add++;                                    //指針加,指向下一個字節(jié)

     }

}


void init()                  //初始化
{
    LCDRST = 1;                              //低電平復(fù)位,高電平運行
        write_com(0x30);                       //基本指令集
        delay(1);
        write_com(0x02);                        //地址歸位
        delay(1);
        write_com(0x0c);                        //整體顯示打開,光標(biāo)關(guān)閉
        delay(1);
        write_com(0x01);                        //清屏顯示
        delay(1);
        write_com(0x06);   
}


void main()
{
   
        while(1)
    {

             write_word(table1);
             delay(7000);          //每一屏顯示秒鐘
         
         
             write_word(table2);
             delay(7000);
         
         
             write_word(table3);
             delay(7000);
               
                 write_word(table4);
             delay(7000);

     }
}

前輩您好,我就是有那點興趣愛好自學(xué)的 一點,指針沒學(xué)好,您的代碼我也不會移植進(jìn)去,我把自己的代碼發(fā)在上邊,您看看如何修改就不在顛倒順序顯示了,(只有數(shù)組2在顛倒了第二句和第三句的順序后才正常顯示,其余三個數(shù)組里的詩詞都是按照  第一句  第三句   第二句     第四句  顛倒順序顯示的)
回復(fù)

使用道具 舉報

11#
ID:700226 發(fā)表于 2020-3-3 15:54 | 只看該作者
藏月亮 發(fā)表于 2020-3-3 15:12
老師。您好,我把您寫的代碼移植到程序里后,屏上顯示亂碼,現(xiàn)在我把自己的代碼發(fā)來。您看看該如何修改, ...

前輩 ,我補充一下,只有數(shù)組2在顛倒了第二 和第三句詩句以后才在屏上正常顯示的,其余3個數(shù)組都是第二和第三句詩句顛倒順序顯示的,您看如何修改
回復(fù)

使用道具 舉報

12#
ID:419968 發(fā)表于 2020-3-3 16:07 | 只看該作者
0x80   //第1行首地址
0x90   //第2行首地址
0x88   //第3行首地址
0x98   //第4行首地址



void write_word(uchar *add)                   //用指針
{
     uchar i;
     write_com(0x80);                   //從第一行開始顯示
     for(i=0;i<64;i++)                        //一個漢字占兩個字節(jié)
     {
         write_date(*add);
         add++;                                    //指針加,指向下一個字節(jié)

     }

}
write_com(0x80);  //這里是顯示的首地址,以后自動加一  加到0x88是就是從第三行顯示  到0x90是第二行, 到0x98 顯示第四行
回復(fù)

使用道具 舉報

13#
ID:213173 發(fā)表于 2020-3-4 10:10 | 只看該作者
藏月亮 發(fā)表于 2020-3-2 18:06
師傅,還得請您賜教
uchar table1[16] = "朝辭白帝彩云間,";
uchar table2[16] = "千里江陵一日還。"; ...


漢字庫LCD仿真.zip (254.1 KB, 下載次數(shù): 8)

回復(fù)

使用道具 舉報

14#
ID:700226 發(fā)表于 2020-3-7 11:45 | 只看該作者

謝謝前輩的賜教,我把您壓縮文件里的c文件編譯后能正常顯示了,后邊我再好好研究一下您的代碼,看看我的問題出在哪里,謝謝您的回復(fù)
回復(fù)

使用道具 舉報

15#
ID:468535 發(fā)表于 2020-3-7 13:47 來自手機 | 只看該作者
第一屏第一行就亂碼嗎?請在第一屏加延時看下,如果第一行不亂那就是每行間隔不對,若都亂碼那就是碼也不對,多看屏手冊多看例程。
回復(fù)

使用道具 舉報

16#
ID:700226 發(fā)表于 2020-3-8 23:06 | 只看該作者
adject 發(fā)表于 2020-3-3 16:07
0x80   //第1行首地址
0x90   //第2行首地址
0x88   //第3行首地址

一句話點醒夢中人,謝謝
回復(fù)

使用道具 舉報

17#
ID:700226 發(fā)表于 2020-3-8 23:20 | 只看該作者
以下是在12864液晶屏上正常顯示的代碼,感謝各位前輩的賜教,在最后有個問題請教
#include <reg52.h>
/******************************************************************/
/*                    定義接口信息                                */
/******************************************************************/
sbit    LCDRS =P2^4;
sbit    LCDRW=P2^5;
sbit    LCDEN=  P2^6;
sbit    LCDPSB=P2^1;
sbit    LCDRST=P2^3;

/******************************************************************/
/*                    子函數(shù)聲明                                    */
/******************************************************************/
void    OrderData(char data1,bit DI);           //指令 數(shù)據(jù)選擇
void    delayms(unsigned int n);                //延時函數(shù)
void    delay(unsigned int m);
void    lcd_mesg(unsigned char code *adder1);   //指針函數(shù)

//中文字符數(shù)組
unsigned char code array1[]={"去年今日此門中, 人面桃花相映紅。人面不知何處去, 桃花依舊笑春風(fēng)。"};
unsigned char code array2[]={"人生若只如初見, 何事秋風(fēng)悲畫扇, 等閑變卻故人心,卻道故人心易變。"};
unsigned char code array3[]={"梨花淡白柳深青, 柳絮飛時花滿城。惆悵東欄一株雪,人生看的幾清明。"};
unsigned char code array4[]={"落魄江南載酒行,楚腰纖細(xì)掌中輕。十年一覺揚州夢,贏得青樓薄幸名。"};
unsigned char code array5[]={"朝辭白帝彩云間,千里江陵一日還。兩岸猿聲啼不住,輕舟已過萬重山。"};
unsigned char code array6[]={"去年花里逢君別,今日花開已一年。世事茫茫難自料,春愁黯黯獨成眠。"};
unsigned char code array7[]={"結(jié)廬在人境,而無車馬喧。問君何能爾,心遠(yuǎn)地自偏,,,,,,,,,,,,,,,,,"};
unsigned char code array8[]={"采菊東籬下,悠然見南山。山氣日夕佳,飛鳥相與還................."};
unsigned char code array9[]={"此中有真意,欲辨已忘言....................................................."};
unsigned char code array10[]={"月落烏啼霜滿天,江楓漁火對愁眠。姑蘇城外寒山寺,夜半鐘聲到客船。"};
unsigned char code array11[]={"楊花落盡子規(guī)啼,聞道龍標(biāo)過五溪,我寄愁心與明月,隨風(fēng)直到夜郎西。"};
unsigned char code array12[]={"天空的蔚藍(lán),愛上了大地的碧綠,他們之間的微風(fēng)嘆了聲:唉!!!!!!!!!"};
/******************************************************************
/*                   液晶初始化-字庫                              */
/******************************************************************/
void init(void)           //LCD字庫初始化程序
{
        delay(40);             //大于40MS的延時程序
        LCDPSB=1;              //設(shè)置為8BIT并口工作模式
        delay(1);              //延時
        LCDRST=0;              //復(fù)位
        delay(1);              //延時
        LCDRST=1;              //置高運行
        delay(10);
        OrderData(0x30,0);            //基本指令集
        //delay(100);          //大于100uS的延時程序
        //OrderData(0x30,0);   //Function Set
        //delay(37);           //大于37uS的延時程序
        //OrderData(0x08,0);   //Display on Control
        //delay(100);          //大于100uS的延時程序
        OrderData(0x02,0);     //光標(biāo)設(shè)置
        delay(100);            //大于100uS的延時程序
        OrderData(0x0C,0);     //Display Control,D=1,整體顯示開,光標(biāo)關(guān)閉
        delay(100);            //大于100uS的延時程序
        OrderData(0x01,0);     //Display Clear清屏
        delay(10);             //大于10mS的延時程序
        OrderData(0x06,0);     //光標(biāo)從右向左加1位移動
        delay(100);            //大于100uS的延時程序
}
/******************************************************************/
/*                    主程序                                      */
/******************************************************************/
int main(void)
{
        while(1)
        {               
                init();                          //調(diào)用LCD字庫初始化程序
                delay(100);            //大于100uS的延時程序
                lcd_mesg(array1);      //顯示中文數(shù)組1
                delayms(240);
                delayms(240);
               
                init();                          
                delay(100);            
                lcd_mesg(array2);      //顯示中文數(shù)組2
                delayms(240);
                delayms(240);

                init();                          
                delay(100);            
                lcd_mesg(array3);      //顯示中文數(shù)組3
                delayms(240);
                delayms(240);
               
                init();                          
                delay(100);            
                lcd_mesg(array4);      //顯示中文數(shù)組4
                delayms(240);
                delayms(240);

                init();                        
                delay(100);           
                lcd_mesg(array5);     //顯示中文數(shù)組5
                delayms(240);
                delayms(240);

                init();                          
                delay(100);            
                lcd_mesg(array6);      //顯示中文數(shù)組6
                delayms(240);
                delayms(240);
               
                init();                    
                delay(100);            
                lcd_mesg(array7);     //顯示中文漢字7
                delayms(240);
                delayms(240);

                init();                    
                delay(100);            
                lcd_mesg(array8);     //顯示中文漢字8
                delayms(240);
                delayms(240);

                init();                    
                delay(100);            
                lcd_mesg(array9);     //顯示中文漢字9
                delayms(240);
                delayms(240);

                init();                    
                delay(100);            
                lcd_mesg(array10);     //顯示中文漢字10
                delayms(240);
                delayms(240);

                init();                    
                delay(100);            
                lcd_mesg(array11);     //顯示中文漢字11
                delayms(240);
                delayms(240);

                init();                    
                delay(100);            
                lcd_mesg(array12);     //顯示中文漢字12
                delayms(240);
                delayms(240);

        }
}


void lcd_mesg(unsigned char code *adder1)
{
        unsigned char i;
        OrderData(0x80,0);  //設(shè)置顯示的 RAM Address,在液晶屏的第一行顯示
        delay(100);                       
        for(i=0;i<16;i++)
        {
                OrderData(*adder1,1);
                adder1++;
        }
       
        OrderData(0x90,0);  //設(shè)置為在液晶屏的第二行顯示
        delay(100);
        for(i=0;i<16;i++)
        {
                OrderData(*adder1,1);
                adder1++;
        }
       
        OrderData(0x88,0);  //設(shè)置為在液晶屏的第三行顯示
        delay(100);
        for(i=0;i<16;i++)
        {
                OrderData(*adder1,1);
                adder1++;
        }
       
        OrderData(0x98,0);  //設(shè)置為在液晶屏的第四行顯示
        delay(100);
        for(i=0;i<16;i++)
        {
                OrderData(*adder1,1);
                adder1++;
        }
}
/******************************************************************/
/*                    函數(shù)聲明                                    */
/******************************************************************/
void OrderData(char data1,bit DI)  //傳送數(shù)據(jù)或者命令,當(dāng)DI=0是,傳送命令,當(dāng)DI=1,傳送數(shù)據(jù).
{
        LCDRW=0;
        LCDRS=DI;
        delay(1);
        P0=data1;
        LCDEN=1;
        delay(1);
        LCDEN=0;
}

void delayms(unsigned int n)             //延時10×n毫秒程序
{
        unsigned int i,j;
        for(i=0;i<n;i++)
                for(j=0;j<3000;j++);
}

void delay(unsigned int m)               //延時程序
{
        unsigned int i,j;
        for(i=0;i<m;i++)
                for(j=0;j<10;j++);
}

疑問:void    lcd_mesg(unsigned char code *adder1);   不理解code作用
回復(fù)

使用道具 舉報

18#
ID:213173 發(fā)表于 2020-3-9 07:11 | 只看該作者
藏月亮 發(fā)表于 2020-3-8 23:20
以下是在12864液晶屏上正常顯示的代碼,感謝各位前輩的賜教,在最后有個問題請教
#include
/*********** ...

關(guān)鍵字 code  定義的變量在程序存儲區(qū)域,變量為只讀。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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