微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 带中文字库液晶显示模块12864/12232开发笔记

带中文字库液晶显示模块12864/12232开发笔记

时间:10-02 整理:3721RD 点击:

带中文字库液晶显示模块12864/12232开发整理


广东职业技术学院  欧浩源(ohy3686@foxmail.com)


一、概述
1. 液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16×16点阵)、128个字符(8×16点阵)及64×256点阵显示RAM(GDRAM)。
2. LCD类型:STN。
3. 接口方式:8位并口、4位并口、三线串口(CS、CLK、SID)。
4. 供电电压:分3.3V和5.0V两种。(供应商说不通用,诸位购买时需注意)。
5. 工作温度:0到60℃(常温),-20℃到75℃(宽温)。
二、引脚定义


三、串行通信时序


根据串行方式时序图,首先设计底层的字节发送驱动程序。

函数名:SendByte_LCD

参数:data—需要发送的字节。

void  SendByte_LCD(unsigned char data){

        unsigned char i;

        CS   = 1;      

       CLK  = 0;

       for(i=0;        i<8;        i++){

               if(data & 0x80) {SID =1;}                 //高位字节先发送

               else {SID =0;}

      data << 1;                                                //准备下一位数据

      CLK         = 1;

      Delay(200);                                               //发送一位数据

     CLK = 0;

      }

     CS   = 0;      

}


四、串行数据传送规则

     串行数据传送共分三个字节完成:

    第一字节:串口控制格式。

          1  1  1  1  1  A  B  C

          A:数据传送的方向控制。

              H—数据从LCD到MCU。

              L—数据从MCU到LCD。

          B:数据的类型选择。

              H—是用户显示的数据。

              L—是控制模块的指令。

          C:固定为0.

    第二字节:(并行)8位数据的高4位:D7  D6  D5  D4  0  0  0  0

    第三字节:(并行)8位数据的低4位:D3  D2  D1  D0  0  0  0  0

根据串行数据的传送规则,发送数据和发送指令是不同的,因此,在实际应用中,可以设计两个发送子程序来完成相应的功能。


1. 发送指令子程序:SendCMD_LCD

void  SendCMD_LCD(unsigned char dat){

    SendByte_LCD( 0xf8 );                                        // 1 1 1 1 1 0 0 0

    SendByte_LCD( dat & 0xf0 );

    SendByte_LCD( (dat << 4 ) & 0xf0 );

}


2. 发送数据子程序:SendDAT_LCD

void  SendDAT_LCD(unsigned char dat){

    SendByte_LCD( 0xfa );                                        // 1 1 1 1 1 0 1 0

    SendByte_LCD( dat & 0xf0 );

    SendByte_LCD( (dat << 4 ) & 0xf0 );

}

五、显示坐标关系



六、显示模块子程序设计

1. 显示汉字子程序

void  DisplayC_LCD ( unsigned char addr,                  //显示内容的起始地址

                                  unsigned char *data,                  //显示内容的汉字指针

                                  unsigned char num )                //显示的汉字数目

{

       unsigned char n;

       SendCMD_LCD( addr );

       for ( n=0;  n<num;  n++){

                SendDAT_LCD( data );                        //一个汉字有两个字节的内码

                data++;

                SendDAT_LCD( data );

                data++;

        }

}

    例如:要在第2行中间的位置显示:“中国广东”,即:

             DisplayC_LCD ( 0x93, “中国广东”, 4 );

    由于有些集成开发环境对中文支持不够,导致输入的字符串为乱码,可以通过相关软件先将要输入的汉字内码查出来,然后一个个输入。这种方法虽不便,但可靠。


2. 显示汉字子程序(内码输入方法)

void  DisplayD_LCD ( unsigned char addr,                  //显示内容的起始地址

                                  unsigned char data1,                  //汉字内码的第一字节

                                  unsigned char data2 )                //汉字内码的第二字节

{

          SendCMD_LCD( addr );

          SendDAT_LCD( data1 );                       

          SendDAT_LCD( data2 );

}

例如:要在第2行中间的位置显示:“广”(内码:B9H, E3H),即:

            DisplayD_LCD ( 0x93, 0xB9, 0xE3 );


3. 显示字符和数字子程序

void  DisplayN_LCD ( unsigned char addr,                  //显示内容的起始地址

                                 unsigned char *data,                  //显示内容的字符指针

                                 unsigned char num )                //显示的字符数目

{

        unsigned char n;

        SendCMD_LCD( addr );

        for ( n=0;  n<num;  n++){

                SendDAT_LCD( data );                                        //一个字符只有一个字节的内码

                data++;

        }

}

     例如:要在第2行中间的位置显示:“12345678ABCD”,即:

             DisplayN_LCD ( 0x93, “12345678ABCD”, 12 );


4. 数字转换字符程序

    由于数字不能直接输入显示,为了方便使用,计算结果先通过该程序转换为字符显示。

void  DisplayN2S_LCD (unsigned char num )                //显示的数字

{

         SendCMD_LCD( addr );

         switch ( num ){

                       case 0:         SendDAT_LCD( ‘0’ );                        break;

                       case 1:        SendDAT_LCD( ‘0’ );                        break;

                                    ……

                       case 14:         SendDAT_LCD( ‘E’ );                        break;

                       case 15:         SendDAT_LCD( ‘F’ );                        break;

                      default:        SendDAT_LCD( ‘R’ );                        break;

            }

}

    例如:要在第2行中间的位置显示数字5,即:

               SendCMD_LCD( 0x93 );

               DisplayN2S_LCD( 5 );


七. 初始化设置

     30H:功能设置。基本指令集,一次送8位数据。

     04H:设定进入点。显示字符,光标从左到右位移,DDRAM地址加1.

     0CH:显示设定。整体显示,不显示游标。

     01H:清零。将DDRAM填满20H清零,地址AC恢复到00H。

     02H:设定DDRAM地址计数器AC到00H,并且光标移到开头原点位置,不改变DARAM的内容。


八. 12232与12864开发的差别

     对于带中文字库的LCD液晶模块12232F的应用,方法和上述几乎一致,不同的是显示坐标有所差别,12232F的坐标关系如下。




好资料,学习了,谢谢分享。

谢谢小编的分享!  好资料

哇哦,太好的资料了

进来学习一下下了,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top