3780|2

9

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

带中文字库液晶显示模块12864/12232开发整理 [复制链接]

本帖最后由 ohy3686 于 2016-4-10 10:46 编辑

带中文字库液晶显示模块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
                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
                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的坐标关系如下。





此帖出自单片机论坛

最新回复

SBN1661G的资料  或者程序有吗   详情 回复 发表于 2023-12-9 22:17
点赞(1) 关注(1)
 

回复
举报

3

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
最近正在搞12232汉字显示
此帖出自单片机论坛
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

SBN1661G的资料  或者程序有吗

此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表