LCD1602显示汉字详解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2. 取模 首先取得想要的中文或者图形的字模数组。通过字模软件不能直接提取 5*8 点阵的字模数 据,可以通过手动提取的方法。如下图所示,对应一个字符显示区域。每 8 个字节,组成一
个点阵数组。
3. 实验原理图与结果
4. 程序
/***********************************************
//lcdrs = 1; P2OUT |= 0x02;
P1OUT = dat; delay_nms(5); //lcden=1;
P2OUT|= 0x01; delay_nms(5); // lcden=0;
P2OUT&= 0xfe;
} void init() {
write_com(0x38);// write_com(0x0f);// write_com(0x01);// write_com(0x06);// // write_com(0x07);//整屏移动 delay_nms(10);
void write_com(unsigned int com) { //lcdrs = 0;
P2OUT&= 0xfd; P1OUT = com; delay_nms(5); //lcden = 1;
P2OUT|= 0x01; delay_nms(5); P2OUT&= 0xfe; }
void write_dat(unsigned int dat) {
write_com(0x80+0x09); write_dat(table[2]); delay_nms(100);
write_com(0x80+0x0a); write_dat(2); while(1); }
CGROM 中存储了一些标准的 字符的字模编码,是液晶屏出厂时固化在控制芯片中 的,用户不能改变其中的存储内容,只能读取调用,包含有标准的 ASCII 码、日文字符和 希腊文字符
CGRAM 是控制芯片留给用户,用以存储用户自己设计的字模编码。为了便于理解,可以 如下打一比方:CGROM 和 CGRAM 中存储的字模信息相当于厨房中的食品,CGROM 是厨房中现成 的熟食,CGRAM 是用户自行制作的菜肴,这些食品都要通过托盘转移一下,才能送到餐桌上 食用;类似的字模编码都要先被读取到对应的 DDRAM 中,经如上中转以后,屏幕的相应位置 才显示出字符。对于字符屏,要显示某个字符时,往 ddram 里写字符的索引(一般都是 ascii 码)就可以完成显示。比如你写 0x38,则显示为数字 8。
课后练习十一之 LCD1602 显示汉字详解 From: EE 常见泽
1. 液晶显示中的 DDRAM、CGROM 和 CGRAM 的作用(部分来源于网络) DDRAM 显示用 ram,直接和屏幕上的点相对应.屏幕上的一个点和 ddram 中的一个位对
应,字符屏的 ddram 和图形屏的 ddram 有一点点区别。 第一行的内容对应 DDRAM 中 80H 到 8FH 内容 第二行的内容对应 DDRAM 中 C0H 到 CFH 内容
****
LAUNCH PAD 学习之 LCD 显示汉字 ***
****
MCU: MSP430G2452
***
****
作者: 常见泽
***
****
***
****
***
****
2012.06.02.21:08
***
****
实验现象:LCD 2012 年 6 月 2 日
***
****
***
**** P1.0~P1Βιβλιοθήκη Baidu7 接 LCD 数据口 P2.0 P2.1 en rs ***
unsigned char num;
void delay_1ms(void) {
unsigned int i; for (i=0;i<1140;i++); }
void delay_nms(unsigned int n) {
unsigned int i=0; for (i=0;i<n;i++) delay_1ms(); }
write_com(0x80+0x01); write_dat(table[0]); delay_nms(100);
write_com(0x80+0x02); write_dat(table[1]); delay_nms(100);
write_com(0x80+0x03); write_dat(table[2]);
(网上摘抄,写的很好!!!!!)
由上两条指令可知 DDRAM 地址(DB7 赋值 1),所以地址从 0x80 开始 可知 CGRAM 地址(DB6 赋值 1),所以地址从 0x40 开始
首先:我们要弄清楚一个概念,其实我们使用 1602 显示中文汉字,就是利用其内部的自定 义字节空间,我们都知道 LCD1602 内部有一个 64 字节的自定义 CGRAM、也、、、,这个 64 字节的 CGRAM 是给我们提供写入数据的,从我们上面介绍的可知,CGRAM 的地址为 0x40. 所以当我们要写入数据时,要先写入一条地址命令 write_com(0x040); 然后把你要写入的数据通过写数据命令写入 write_dat(数据); 其次就是要把我们的自定义汉字、字符显示在 LCD1602 上了。我们知道常用字符是从 0x20 开始显示,而 0x00—0x0f 都是没有用的,其实这个正式为我们自定义显示字符准备的。当 你把上面的代码输入到 CGRAM 中,LCD1602 机会把汉字或字符赋予地址,这个地址是从 0x00 开始,因为最多只能 8 个字符,所以当在 CGRAM 里面输入 8 个字符代码时,这 8 个 字符的代码的数据地址就是 0x00 开始到 0x07。所以当你要在 LCD1602 上显示自定义字符 时 , 只 需 要 把 这 个 地 址 用 数 据 输 入 就 OK 。 write_dat(0x00—0x07); 当 然 也 可 以 是 write_dat(0—7)也就是你自定义的 8 个字 符。
***********************************************/
#include <msp430g2452.h>
unsigned char table[] ={"0123456789"}; unsigned char hanzi1[8]={0x04,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02};//年 unsigned char hanzi2[8]={0x0f,0x09,0x0f,0x09,0x0f,0x09,0x13,0x11};//月 unsigned char hanzi3[8]={0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00};//日
CGRAM_LCD(hanzi1,0x40); CGRAM_LCD(hanzi2,0x48); CGRAM_LCD(hanzi3,0x50);
// Stop WDT // P1.2 output
write_com(0x80); write_dat(table[2]); delay_nms(100);
}
void CGRAM_LCD(unsigned char *hz,unsigned char temp) {
unsigned char s; for(s=0;s<8;s++) {
write_com(temp+s);
write_dat(*(hz+s)); } } void main(void) { WDTCTL = WDTPW + WDTHOLD; P1DIR |= 0xff; P2DIR |= 0xff; init();
delay_nms(100);
write_com(0x80+0x04); write_dat(0); delay_nms(100);
write_com(0x80+0x06); write_dat(table[6]); delay_nms(100);
write_com(0x80+0x07); write_dat(1); delay_nms(100);
相关文档
最新文档