带中文字库液晶显示模块12864/12232开发整理
一、概述
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的坐标关系如下。
|