找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2608|回复: 17
收起左侧

向前辈请教51单片机控制下的12864液晶屏显示不正常

[复制链接]
ID:700226 发表于 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[]="落魄江南载酒行,楚腰纤细掌中轻。十年一觉扬州梦,赢得青楼薄幸名。";
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)       //延迟函数
{
     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);        //这个延迟函数必须要有,因为读数据时当E为高时,数据必须保持稳定
     LCDEN = 1;
     LCDEN = 0;
}


void write_date(uchar date)      //写数据
{
     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++)                        //一个汉字占两个字节
     {
         write_date(*add);
         add++;                                    //指针加,指向下一个字节

     }

}


void init()                                                  //初始化
{
             LCDRST = 1;                          //低电平复位,高电平运行
        write_com(0x30);                       //基本指令集
        delay(1);
        write_com(0x02);                        //地址归位
        delay(1);
        write_com(0x0c);                        //整体显示打开,光标关闭
        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);
       }
}
问题是数组table2中的数组元素颠倒顺序后才能在12864上显示正常,其余三个数组显示的顺序是第一句,第三句,第二句,第四句,请大神赐教,问题出在哪里?
回复

使用道具 举报

ID:213173 发表于 2020-3-2 07:05 | 显示全部楼层
楼主按地址顺序写,部分字符溢出屏外。一屏分4行写,首地址分别是  0x80、0x90、0x88、0x98。
回复

使用道具 举报

ID:401564 发表于 2020-3-2 08:20 | 显示全部楼层
问题在于你不认真看数据手册,你去对一下12864显示的显示内容和对应的地址,你就会明白了
回复

使用道具 举报

ID:700226 发表于 2020-3-2 18:06 | 显示全部楼层
wulin 发表于 2020-3-2 07:05
楼主按地址顺序写,部分字符溢出屏外。一屏分4行写,首地址分别是  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. }
复制代码

师傅我原来是这样在液晶屏上显示了,正常,现在我想显示4屏的古诗,循环显示,还得请您赐教
回复

使用道具 举报

ID:213173 发表于 2020-3-2 21:01 | 显示全部楼层
藏月亮 发表于 2020-3-2 18:06
师傅,还得请您赐教
uchar table1[16] = "朝辞白帝彩云间,";
uchar table2[16] = "千里江陵一日还。"; ...

你这样写试试,手上没有12864屏,无法验证。
  1.         uchar code table1[]="梨花淡白柳深青, 柳絮飞时花满城。惆怅东栏一株雪,人生看的几清明。";
  2.         uchar code table2[]="朝辞白帝彩云间,两岸猿声啼不住,千里江陵一日还。轻舟已过万重山。";
  3.         uchar code table3[]="落魄江南载酒行,楚腰纤细掌中轻。十年一觉扬州梦,赢得青楼薄幸名。";
  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.         }
复制代码
回复

使用道具 举报

ID:419968 发表于 2020-3-2 22:50 | 显示全部楼层
uchar table[4][]={{"梨花淡白柳深青, 柳絮飞时花满城。惆怅东栏一株雪,人生看的几清明。"}
                              "朝辞白帝彩云间,两岸猿声啼不住,千里江陵一日还。轻舟已过万重山。";
                              "落魄江南载酒行,楚腰纤细掌中轻。十年一觉扬州梦,赢得青楼薄幸名。"
                              "去年花里逢君别,今日花开已一年,世事茫茫难自料,春愁黯黯独成眠。"
                            }

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]);



}



}


大概这样
回复

使用道具 举报

ID:584814 发表于 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++; }
     }
}
回复

使用道具 举报

ID:700226 发表于 2020-3-3 15:12 | 显示全部楼层
藏月亮 发表于 2020-3-2 18:06
师傅,还得请您赐教
uchar table1[16] = "朝辞白帝彩云间,";
uchar table2[16] = "千里江陵一日还。"; ...

老师。您好,我把您写的代码移植到程序里后,屏上显示乱码,现在我把自己的代码发来。您看看该如何修改,我是凭着兴趣爱好自己学了一点,水平有限,还得请您赐教,代码如下:

//显示4屏汉字,每屏显示7秒,来回循环显示

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

uchar code table1[]="梨花淡白柳深青, 柳絮飞时花满城。惆怅东栏一株雪,人生看的几清明。";
uchar code table2[]="朝辞白帝彩云间,两岸猿声啼不住,千里江陵一日还。轻舟已过万重山。";
uchar code table3[]="落魄江南载酒行,楚腰纤细掌中轻。十年一觉扬州梦,赢得青楼薄幸名。";
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)       //延迟函数
{
     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);        //这个延迟函数必须要有,因为读数据时当E为高时,数据必须保持稳定
     LCDEN = 1;
     LCDEN = 0;
}


void write_date(uchar date)      //写数据
{
     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++)                        //一个汉字占两个字节
     {
         write_date(*add);
         add++;                                    //指针加,指向下一个字节

     }

}


void init()                  //初始化
{
    LCDRST = 1;                              //低电平复位,高电平运行
        write_com(0x30);                       //基本指令集
        delay(1);
        write_com(0x02);                        //地址归位
        delay(1);
        write_com(0x0c);                        //整体显示打开,光标关闭
        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);

     }
}

网上的前辈们说指针很难学,自己现在也没能明白,
回复

使用道具 举报

ID:700226 发表于 2020-3-3 15:21 | 显示全部楼层
adject 发表于 2020-3-2 22:50
uchar table[4][]={{"梨花淡白柳深青, 柳絮飞时花满城。惆怅东栏一株雪,人生看的几清明。"}
             ...

前辈您好,我把您写的代码移植到我的程序里后,不能显示,我把自己的代码发来,麻烦您看看怎样修改好,
//显示4屏汉字,每屏显示7秒,来回循环显示

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

uchar code table1[]="梨花淡白柳深青, 柳絮飞时花满城。惆怅东栏一株雪,人生看的几清明。";
uchar code table2[]="朝辞白帝彩云间,两岸猿声啼不住,千里江陵一日还。轻舟已过万重山。";
uchar code table3[]="落魄江南载酒行,楚腰纤细掌中轻。十年一觉扬州梦,赢得青楼薄幸名。";
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)       //延迟函数
{
     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);        //这个延迟函数必须要有,因为读数据时当E为高时,数据必须保持稳定
     LCDEN = 1;
     LCDEN = 0;
}


void write_date(uchar date)      //写数据
{
     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++)                        //一个汉字占两个字节
     {
         write_date(*add);
         add++;                                    //指针加,指向下一个字节

     }

}


void init()                  //初始化
{
    LCDRST = 1;                              //低电平复位,高电平运行
        write_com(0x30);                       //基本指令集
        delay(1);
        write_com(0x02);                        //地址归位
        delay(1);
        write_com(0x0c);                        //整体显示打开,光标关闭
        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);

     }
}

只有数组2把里边的数组元素颠倒位置后才能在12864上正常显示,其余三个数组都是第一  三  二  四句诗的顺序显示
回复

使用道具 举报

ID:700226 发表于 2020-3-3 15:38 | 显示全部楼层
man1234567 发表于 2020-3-3 08:39
void write_word(uchar *add)                   //用指针
{     uchar i,j;
for(j=0;j

//显示4屏汉字,每屏显示7秒,来回循环显示

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

uchar code table1[]="梨花淡白柳深青, 柳絮飞时花满城。惆怅东栏一株雪,人生看的几清明。";
uchar code table2[]="朝辞白帝彩云间,两岸猿声啼不住,千里江陵一日还。轻舟已过万重山。";
uchar code table3[]="落魄江南载酒行,楚腰纤细掌中轻。十年一觉扬州梦,赢得青楼薄幸名。";
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)       //延迟函数
{
     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);        //这个延迟函数必须要有,因为读数据时当E为高时,数据必须保持稳定
     LCDEN = 1;
     LCDEN = 0;
}


void write_date(uchar date)      //写数据
{
     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++)                        //一个汉字占两个字节
     {
         write_date(*add);
         add++;                                    //指针加,指向下一个字节

     }

}


void init()                  //初始化
{
    LCDRST = 1;                              //低电平复位,高电平运行
        write_com(0x30);                       //基本指令集
        delay(1);
        write_com(0x02);                        //地址归位
        delay(1);
        write_com(0x0c);                        //整体显示打开,光标关闭
        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);

     }
}

前辈您好,我就是有那点兴趣爱好自学的 一点,指针没学好,您的代码我也不会移植进去,我把自己的代码发在上边,您看看如何修改就不在颠倒顺序显示了,(只有数组2在颠倒了第二句和第三句的顺序后才正常显示,其余三个数组里的诗词都是按照  第一句  第三句   第二句     第四句  颠倒顺序显示的)
回复

使用道具 举报

ID:700226 发表于 2020-3-3 15:54 | 显示全部楼层
藏月亮 发表于 2020-3-3 15:12
老师。您好,我把您写的代码移植到程序里后,屏上显示乱码,现在我把自己的代码发来。您看看该如何修改, ...

前辈 ,我补充一下,只有数组2在颠倒了第二 和第三句诗句以后才在屏上正常显示的,其余3个数组都是第二和第三句诗句颠倒顺序显示的,您看如何修改
回复

使用道具 举报

ID:419968 发表于 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++)                        //一个汉字占两个字节
     {
         write_date(*add);
         add++;                                    //指针加,指向下一个字节

     }

}
write_com(0x80);  //这里是显示的首地址,以后自动加一  加到0x88是就是从第三行显示  到0x90是第二行, 到0x98 显示第四行
回复

使用道具 举报

ID:213173 发表于 2020-3-4 10:10 | 显示全部楼层
藏月亮 发表于 2020-3-2 18:06
师傅,还得请您赐教
uchar table1[16] = "朝辞白帝彩云间,";
uchar table2[16] = "千里江陵一日还。"; ...

无标题.jpg
汉字库LCD仿真.zip (254.1 KB, 下载次数: 8)
回复

使用道具 举报

ID:700226 发表于 2020-3-7 11:45 | 显示全部楼层

谢谢前辈的赐教,我把您压缩文件里的c文件编译后能正常显示了,后边我再好好研究一下您的代码,看看我的问题出在哪里,谢谢您的回复
回复

使用道具 举报

ID:468535 发表于 2020-3-7 13:47 来自手机 | 显示全部楼层
第一屏第一行就乱码吗?请在第一屏加延时看下,如果第一行不乱那就是每行间隔不对,若都乱码那就是码也不对,多看屏手册多看例程。
回复

使用道具 举报

ID:700226 发表于 2020-3-8 23:06 | 显示全部楼层
adject 发表于 2020-3-3 16:07
0x80   //第1行首地址
0x90   //第2行首地址
0x88   //第3行首地址

一句话点醒梦中人,谢谢
回复

使用道具 举报

ID:700226 发表于 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;

/******************************************************************/
/*                    子函数声明                                    */
/******************************************************************/
void    OrderData(char data1,bit DI);           //指令 数据选择
void    delayms(unsigned int n);                //延时函数
void    delay(unsigned int m);
void    lcd_mesg(unsigned char code *adder1);   //指针函数

//中文字符数组
unsigned char code array1[]={"去年今日此门中, 人面桃花相映红。人面不知何处去, 桃花依旧笑春风。"};
unsigned char code array2[]={"人生若只如初见, 何事秋风悲画扇, 等闲变却故人心,却道故人心易变。"};
unsigned char code array3[]={"梨花淡白柳深青, 柳絮飞时花满城。惆怅东栏一株雪,人生看的几清明。"};
unsigned char code array4[]={"落魄江南载酒行,楚腰纤细掌中轻。十年一觉扬州梦,赢得青楼薄幸名。"};
unsigned char code array5[]={"朝辞白帝彩云间,千里江陵一日还。两岸猿声啼不住,轻舟已过万重山。"};
unsigned char code array6[]={"去年花里逢君别,今日花开已一年。世事茫茫难自料,春愁黯黯独成眠。"};
unsigned char code array7[]={"结庐在人境,而无车马喧。问君何能尔,心远地自偏,,,,,,,,,,,,,,,,,"};
unsigned char code array8[]={"采菊东篱下,悠然见南山。山气日夕佳,飞鸟相与还................."};
unsigned char code array9[]={"此中有真意,欲辨已忘言....................................................."};
unsigned char code array10[]={"月落乌啼霜满天,江枫渔火对愁眠。姑苏城外寒山寺,夜半钟声到客船。"};
unsigned char code array11[]={"杨花落尽子规啼,闻道龙标过五溪,我寄愁心与明月,随风直到夜郎西。"};
unsigned char code array12[]={"天空的蔚蓝,爱上了大地的碧绿,他们之间的微风叹了声:唉!!!!!!!!!"};
/******************************************************************
/*                   液晶初始化-字库                              */
/******************************************************************/
void init(void)           //LCD字库初始化程序
{
        delay(40);             //大于40MS的延时程序
        LCDPSB=1;              //设置为8BIT并口工作模式
        delay(1);              //延时
        LCDRST=0;              //复位
        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);     //光标设置
        delay(100);            //大于100uS的延时程序
        OrderData(0x0C,0);     //Display Control,D=1,整体显示开,光标关闭
        delay(100);            //大于100uS的延时程序
        OrderData(0x01,0);     //Display Clear清屏
        delay(10);             //大于10mS的延时程序
        OrderData(0x06,0);     //光标从右向左加1位移动
        delay(100);            //大于100uS的延时程序
}
/******************************************************************/
/*                    主程序                                      */
/******************************************************************/
int main(void)
{
        while(1)
        {               
                init();                          //调用LCD字库初始化程序
                delay(100);            //大于100uS的延时程序
                lcd_mesg(array1);      //显示中文数组1
                delayms(240);
                delayms(240);
               
                init();                          
                delay(100);            
                lcd_mesg(array2);      //显示中文数组2
                delayms(240);
                delayms(240);

                init();                          
                delay(100);            
                lcd_mesg(array3);      //显示中文数组3
                delayms(240);
                delayms(240);
               
                init();                          
                delay(100);            
                lcd_mesg(array4);      //显示中文数组4
                delayms(240);
                delayms(240);

                init();                        
                delay(100);           
                lcd_mesg(array5);     //显示中文数组5
                delayms(240);
                delayms(240);

                init();                          
                delay(100);            
                lcd_mesg(array6);      //显示中文数组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);  //设置显示的 RAM Address,在液晶屏的第一行显示
        delay(100);                       
        for(i=0;i<16;i++)
        {
                OrderData(*adder1,1);
                adder1++;
        }
       
        OrderData(0x90,0);  //设置为在液晶屏的第二行显示
        delay(100);
        for(i=0;i<16;i++)
        {
                OrderData(*adder1,1);
                adder1++;
        }
       
        OrderData(0x88,0);  //设置为在液晶屏的第三行显示
        delay(100);
        for(i=0;i<16;i++)
        {
                OrderData(*adder1,1);
                adder1++;
        }
       
        OrderData(0x98,0);  //设置为在液晶屏的第四行显示
        delay(100);
        for(i=0;i<16;i++)
        {
                OrderData(*adder1,1);
                adder1++;
        }
}
/******************************************************************/
/*                    函数声明                                    */
/******************************************************************/
void OrderData(char data1,bit DI)  //传送数据或者命令,当DI=0是,传送命令,当DI=1,传送数据.
{
        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作用
回复

使用道具 举报

ID:213173 发表于 2020-3-9 07:11 | 显示全部楼层
藏月亮 发表于 2020-3-8 23:20
以下是在12864液晶屏上正常显示的代码,感谢各位前辈的赐教,在最后有个问题请教
#include
/*********** ...

关键字 code  定义的变量在程序存储区域,变量为只读。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表