1602显示汉字
使用arduino直接驱动1602液晶显示文字

使用arduino直接驱动1602液晶显示文字展开全文1602液晶在应用中非常广泛,最初的1602液晶使用的是HD44780控制器,现在各个厂家的1602模块基本上都是采用了与之兼容的IC,所以特性上基本都是一致的。
1602LCD主要技术参数显示容量为16×2个字符;芯片工作电压为4.5~5.5V;工作电流为2.0mA(5.0V);模块最佳工作电压为5.0V;字符尺寸为2.95×4.35(W×H)mm。
1602液晶接口引脚定义接口说明:1、两组电源一组是模块的电源一组是背光板的电源一般均使用5V供电。
本次试验背光使用3.3V供电也可以工作。
2、VL是调节对比度的引脚,串联不大于5KΩ的电位器进行调节。
本次实验使用1KΩ的电阻来设定对比度。
其连接分高电位与低电位接法,本次使用低电位接法,串联1KΩ电阻后接GND。
注意:不同液晶的对比度电阻是不同的,最好是接一个电位器进行测试,本次实验使用的1KΩ电阻在其他液晶上不一定正确。
3、RS 是很多液晶上都有的引脚是命令/数据选择引脚该脚电平为高时表示将进行数据操作;为低时表示进行命令操作。
4、RW 也是很多液晶上都有的引脚是读写选择端该脚电平为高是表示要对液晶进行读操作;为低时表示要进行写操作。
5、E 同样很多液晶模块有此引脚通常在总线上信号稳定后给一正脉冲通知把数据读走,在此脚为高电平的时候总线不允许变化。
6、D0—D7 8 位双向并行总线,用来传送命令和数据。
7、BLA是背光源正极,BLK是背光源负极。
1602液晶的基本操作分以下四种:下图就是1602液晶实物图1602直接与arduino通信,根据产品手册描述,分8位连接法与4位连接法,咱们先使用8位连接法进行实验。
硬件连接方式如下图代码如下实验效果如下4位接法在正常使用下,8位接法基本把arduino的数字端口占满了,如果想要多接几个传感器就没有端口了,这种情况下怎么处理呢,咱们可以使用4位接法。
LCD1602汉字显示讲解

LCD1602显示汉字研究与程序设计1602是一款最常用也是最便宜的液晶显示屏。
最多可以显示两行标准字符,每行最多可以显示16个字符。
1602可以显示内部常用字符(包括阿拉伯数字,英文字母大小写,常用符号和日文假名等),也可以显示自定义字符(单或多个字符组成的简单汉字,符号,图案等,最多可以产生8个自定义字符)。
一、显示常用字符。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是41H,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”十进制十六进制ASCII字符十进制十六进制ASCII字符十进制十六进制ASCII字符00 00 自定义字符1 56 38 8 96 60 `01 01 自定义字符2 57 39 9 97 61 a02 02 自定义字符3 58 3A : 98 62 b03 03 自定义字符4 59 3B ; 99 63 c04 04 自定义字符5 60 3C < 100 64 d05 05 自定义字符6 61 3D = 101 65 e06 06 自定义字符7 62 3E > 102 66 f07 07 自定义字符8 63 3F ? 103 67 g08 08 自定义字符1 64 40 @ 104 68 h09 09 自定义字符2 65 41 A 105 69 i10 0A 自定义字符3 66 42 B 106 6A j11 0B 自定义字符4 67 43 C 107 6B k12 0C 自定义字符5 68 44 D 108 6C l13 0D 自定义字符6 69 45 E 109 6D m14 0E 自定义字符7 70 46 F 110 6E n15 0F 自定义字符8 71 47 G 111 6F o32 20 空格72 48 H 112 70 p33 21 ! 73 49 I 113 71 q34 22 " 74 4A J 114 72 r35 23 # 75 4B K 115 73 s36 24 $ 76 4C L 116 74 t37 25 % 77 4D M 117 75 u38 26 & 78 4E N 118 76 v39 27 ' 79 4F O 119 77 w40 28 ( 80 50 P 120 78 x41 29 ) 81 51 Q 121 79 y42 2A * 82 52 R 122 7A z43 2B + 83 53 S 123 7B {44 2C , 84 54 T 124 7C |45 2D - 85 55 U 125 7D }46 2E . 86 56 V 126 7E ~47 2F / 87 57 W48 30 0 88 58 X49 31 1 89 59 Y50 32 2 90 5A Z51 33 3 91 5B [52 34 4 92 5C \53 35 5 93 5D ]54 36 6 94 5E ^55 37 7 95 5F _显示操作的过程:首先确认显示的位置,即在第几行,第几个字符开始显示。
1602液晶显示汉字

1602液晶显示汉字此为变态法,操作有待提高程序代码如下:#include ;#include ;#define uchar unsigned char#define uint unsigned intuchar code line1[] = {"welcome!"}; uchar p[]= //自定义字模数组{0x00,0x0f,0x04,0x0f,0x05,0x07,0x00,0x00,0x0f,0x12,0x1f,0x15,0x1f,0x15,0x1f,0x15, //确0x04,0x02,0x0e,0x02,0x02,0x03,0x02,0x00,0x04,0x04,0x04,0x04,0x04,0x0a,0x11,0x00, //认0x00,0x0f,0x09,0x06,0x06,0x06,0x09,0x00,0x1f,0x0a,0x0e,0x0e,0x0a,0x1f,0x02,0x02 //取};sbit E=P2^7;sbit RW=P2^5;sbit RS=P2^6;busying (){bit result;RS = 0;RW = 1;E = 1;_nop_();_nop_();_nop_();_nop_();result = (bit)(P0&0x80);E = 0;return result;}writeorder (uchar cmd) {while (busying());RS = 0;RW = 0;E = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();E = 1;_nop_();_nop_();_nop_();_nop_();E = 0;}writedata (uchar dat) {while (busying()); RS = 1;RW = 0;E = 0;_nop_();_nop_();P0 = dat;_nop_();_nop_();_nop_();E = 1;_nop_();_nop_();_nop_();_nop_();E = 0;}delay(uchar i) {while(i--) {uchar j=250; while(j--) {_nop_();_nop_();_nop_();_nop_();}}}initial (){delay (150);writeorder (0x38); //工作方式:8位、2行、5x7 delay(5);writeorder (0x06); //输入方式:光标右移、屏幕不动delay(5);writeorder (0x0c); //显示状态:显示开、有光标、不闪烁delay(5);writeorder (0x01); //清屏delay(5);}newbyte (void) //设置自定义字符{uchar i,j,k=0;uchar temp=0x40;for(j=0;j<6;j++){for(i=0;i<8;i++){writeorder(temp+i);writedata(p[k]);k++;}temp += 8;}}main (void){uchar i=0;initial ();newbyte ();writeorder (0x85); //设置第一行显示位置writedata (0x00);writedata (0x01);writedata (0x02);writedata (0x03);writedata (0x04);writedata (0x05);writeorder (0xc4); //设置第二行显示位置while(line1[i] != '\0'){ // 显示字符"welcome!"writedata(line1[i]); i++;}while (1);}。
利用LCD1602的自定义字库显示汉字

DB 1FH,11H,11H,1FH,11H,11H,1FH,00H ;日,代码为03H
DB 1FH,04H,04H,04H,04H,04H,04H,1FH ;工,代码为04H
DB 0AH,0AH,1BH,1BH,0AH,0AH,0AH,1FH ;业,代码为05H
RET
;------------------------------------------- ----------------------------------------
;以下是编写的8个汉字及特殊符号字库表,当然也可以编写其它的8个字库,只是最多同时只能编写8个,若要用更多的汉字只能去选择带有汉字库的显示模块了。
NOP
MOV A,P0
CLR E
JB ACபைடு நூலகம்.7,WR_DATA1 ;确保写数据操作成功
POP ACC
RET
�
ACALL WR_DATA ;调写显示数据子程序
INC R1
DJNZ R2,LOOP2 ;第二行显示完
AJMP $
TABDIS:
DB '2007',01H,'7',02H,'9',03H,' 26.8',06H ;2007年7月9日 26.8℃,在第一行
DB 'NANJING COLLEGE' , '0' ;以ASCLL码‘0’结束; 在第二行
DB 18H,18H,07H,08H,08H,08H,07H,00H ;℃,代码为06H
DB 04H,0AH,15H,04H,04H,04H,04H,00H ;↑,代码为07H
LCD1602显示中文汉字

LCD1602 显示中文汉字LCD1602 相比大家都比较了解,但是我们一般只用来显示字符,数字。
最近在网上看许多人用LCD1602 来显示汉字,觉得有趣于是拜读了一些资料,教程,但感觉大部分相当晦涩难懂,本人认为既然是教程,就不必要相当的复杂,毕竟人家看完许久后还是不能得出实验结果~!!接下我谈谈我得做法,保证你10 分钟之内一样可以在LCD1602 上显示你想显示的各种符号,汉字!!!首先:我们要弄清楚一个概念,其实我们使用1602 显示中文汉字,就是利用其内部的自定义字节空间,我们都知道LCD1602 内部有一个64 字节的自定义CGRAM,那幺好,我们就是要利用自定义字节来达到显示汉字的效果.我们知道一个字符占8 个字节,所以在CGRAM 能够存放8 个字符。
也就是说,这个64 字节的CGRAM 是给我们提供写入数据的,那幺我们怎幺把我们要的汉字写入CGRAM 呢?不要急,大家查看LCD1602 的用户手册,里面提到当我们需要想CGRAM 写入数据时,我们需要先写入CGRAM 的地址,从手册上可知,CGRAM 的地址为0x40.所以当我们要写入数据时,要先写入一条地址命令write_com(0x040);然后把你要写入的数据通过写数据命令写入write_date( 你要写得数据);做完以上步骤了,是不是LCD1602 就会显示你输入的汉字呢?不要急,以上你只是把你要显示汉字的代码存放在CGRAM 里,就相当于其他常用字符一样固定在LCD 里面了,如果你不把它读出来,LCD 是不会显示的。
当你把上面的步骤做完后,接下来要做的与你平常怎幺使用LCD1602 是一样的,只不过是LCD1602 里面增加了一些你自定义的字符,汉字。
可能到这里,也许会有些疑问,既然自定义字符、汉字的代码需要我们自己输入,那幺我该怎幺编写这些代码,呵呵,不要着急,接下来就要用到下面这个取字模软件。
相信有的朋友应该都用过这个软件。
液晶1602 显示汉字研究

1602是一款最常用也是最便宜的液晶显示屏。
最多可以显示两行标准字符,每行最多可以显示16个字符。
1602可以显示内部常用字符(包括阿拉伯数字,英文字母大小写,常用符号和日文假名等),也可以显示自定义字符(单或多个字符组成的简单汉字,符号,图案等,最多可以产生8个自定义字符)。
一、显示常用字符。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是41H,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”十进制十六进制ASCII字符十进制十六进制ASCII字符十进制十六进制ASCII字符00 00 自定义字符1 56 38 8 96 60 `01 01 自定义字符2 57 39 9 97 61 a02 02 自定义字符3 58 3A: 98 62 b03 03 自定义字符4 59 3B ; 99 63 c04 04 自定义字符5 60 3C < 100 64 d05 05 自定义字符6 61 3D = 101 65 e06 06 自定义字符7 62 3E > 102 66 f07 07 自定义字符8 63 3F ? 103 67 g08 08 自定义字符1 64 40 @ 104 68 h09 09 自定义字符265 41 A105 69 i10 0A自定义字符3 66 42 B 106 6A j11 0B 自定义字符4 67 43 C 107 6B k12 0C 自定义字符5 68 44 D 108 6C l13 0D 自定义字符6 69 45 E 109 6D m14 0E 自定义字符7 70 46 F 110 6E n15 0F 自定义字符8 71 47 G 111 6F o32 20 空格72 48 H 112 70 p33 21 ! 73 49 I 113 71 q34 22 " 74 4A J 114 72 r35 23 # 75 4B K 115 73 s36 24 $ 76 4C L 116 74 t37 25 % 77 4D M 117 75 u38 26 & 78 4E N 118 76 v39 27 ' 79 4F O 119 77 w40 28 ( 80 50 P120 78 x41 29 ) 81 51 Q 121 79 y42 2A* 82 52 R 122 7A z43 2B + 83 53 S 123 7B {44 2C , 84 54 T 124 7C |45 2D - 85 55 U 125 7D }46 2E . 86 56 V 126 7E ~47 2F / 87 57 W48 30 0 88 58 X49 31 1 89 59 Y50 32 2 90 5A Z51 33 3 91 5B [52 34 4 92 5C \53 35 5 93 5D ]54 36 6 94 5E ^55 37 7 95 5F _显示操作的过程:首先确认显示的位置,即在第几行,第几个字符开始显示。
LCD1602显示中文汉字doc资料

L CD1 6 0 2 显示中文汉字LCD1602 显示中文汉字LCD1602 相比大家都比较了解,但是我们一般只用来显示字符,数字。
最近在网上看许多人用LCD1602 来显示汉字,觉得有趣于是拜读了一些资料,教程,但感觉大部分相当晦涩难懂,本人认为既然是教程,就不必要相当的复杂,毕竟人家看完许久后还是不能得出实验结果~!!接下我谈谈我得做法,保证你10分钟之内一样可以在LCD1602 上显示你想显示的各种符号,汉字!!!首先:我们要弄清楚一个概念,其实我们使用1602 显示中文汉字,就是利用其内部的自定义字节空间,我们都知道LCD1602 内部有一个64字节的自定义CGRAM ,那么好,我们就是要利用自定义字节来达到显示汉字的效果. 我们知道一个字符占8 个字节,所以在CGRAM 能够存放8 个字符。
也就是说,这个64 字节的CGRAM 是给我们提供写入数据的,那么我们怎么把我们要的汉字写入CGRAM 呢?不要急,大家查看LCD1602 的用户手册,里面提到当我们需要想CGRAM 写入数据时,我们需要先写入CGRAM 的地址,从手册上可知,CGRAM 的地址为0x40所以当我们要写入数据时,要先写入一条地址命令write_com(0x040); 然后把你要写入的数据通过写数据命令写入write_date( 你要写得数据);做完以上步骤了,是不是LCD1602 就会显示你输入的汉字呢?不要急,以上你只是把你要显示汉字的代码存放在CGRAM 里,就相当于其他常用字符一样固定在LCD 里面了,如果你不把它读出来,LCD 是不会显示当你把上面的步骤做完后,接下来要做的与你平常怎么使用 的,只不过是LCD1602里面增加了一些你自定义的字符,汉字。
可能到这里,也许会有些疑问,既然自定义字符、汉字的代码需要我们自己输 入,那么我该怎么编写这些代码,呵呵,不要着急,接下来就要用到下面这个 取字模软件。
4収虫日式*偉改壬慨烁楼咀韋IH*丘出用片4B-S I 询厲 1 .11 g 佃如 ATI相信有的朋友应该都用过这个软件。
一、常用液晶的使用之LCD1602显示自定义字符及汉字

一、常用液晶的使用之LCD1602显示自定义字符及汉字一、常用液晶的使用之LCD1602显示自定义字符及汉字2010年12月22日星期三 11:00好久没写单片机的文章了,一直以来比较忙,早就想写一个关于常见液晶的使用方法的,但是一直没机会写,只得抽些时间写一下了,总共介绍两款液晶吧,LCD1602和LCD12864,原本还想加上NOKIA5110的,但是Proteus仿真库里面没有就不写了!呵呵,有什么不妥的地方,还望大家指正啊!第一篇讲解一下LCD1602,学过单片机的朋友们都知道它了吧,可以说是用的最广,最简单,也是学液晶入门级别的一块液晶了。
LCD1602顾名思义就是两行显示的液晶,每行最多显示16个字符(里面总共有160个字符),其中包括阿拉伯数字、英文字母的大小写,常用符号,及日文的假名!每个字符对应一个ASCII码,我们通过向液晶送相应符号的ASCII码来显示这个字符。
下面看一下Proteus软件中的LCD1602,在Proteus软件的元件库中,LCD1602为LM016L,下面是这块液晶的引脚图:具体的相关引脚和功能设定参看LCD1602的PDF文档资料,由于篇幅问题,这里就不赘述了!还有一点要说的就是大家在仿真LCD1602时,要是用的是DB7~DB0连单片机的P0口的话,一定要加上拉电阻,要不然驱动不了,因为单片机的四组IO口就P0的内部无上拉,驱动能力弱!看下面的图:在P0口加了排阻(RESPACK-8)对于自带字符的显示,只需要将对应的ASCII码写入LCD中显示即可,这个是每个人开始学习液晶最开始要学会的了,看看数据手册,写写程序,想必大家都会了,这里就不做介绍,本篇着重讲解一下怎样自定义显示字符,比如显示自定的字符、显示汉字等等这些!要显示我们自定义的字符,就要用到LCD中的CGRAM存储器(character generate RAM),而我们之前用的显示自带的字符用到的是DDRAM,两个是不同的。
1602显示汉字加时间

/*************************************************************** *******功能:1602显示汉字(年代日)走时WEB:QQ:863888999测试单片机:STC89C52RC外面晶振:调试环境:KEIL3调试硬件平台:使用清翔电子科技QX-MCS51单片机开发板测试经过备注:张强供给日期:文件名://-------------------------程序功能-------------------------//利用准时器0走时,1602显示,按键可调时间。
//---------------------------备注---------------------------////-------------------------使用说明-------------------------//硬件平台:QX-X3;KEY13选择调理时分秒,KEY14加,KEY15减。
硬件平台:QX-MCS;S2选择调理时分秒,S3加,S4减,S5确认。
**********************************************************************/#include<reg52.h>#defineucharunsignedchar#defineuint unsignedintsbitlcdrs =P3^5;//液晶引脚定义sbitled_cs=P3^6;sbitlcden =P3^4;sbitdx=P2^7;//数码管引脚定义sbitwx=P2^6;sbitkey1=P3^0;sbitkey2=P3^1;sbitkey3=P3^2;sbitkeyE=P3^3;ucharnum,key1num,count,hour,min,sec;ucharcodecg_1602[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,0x0f,0x09,0x0f ,0x09,0x0f,0x09,0x11,0x00,0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00};//"年代日"/*延时函数*/voiddelay(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=114;j>0;j--);}/*1602液晶*/voidwrite_com(ucharcom)// 写命令{lcdrs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}voidwrite_data(uchardate)// 写数据{lcdrs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}voidwrite_by_xy(ucharx,uchary)// 坐标定位{ucharaddress;if(y==0)address=0x80+x;//y=0,写第一行elseaddress=0xc0+x;//y=1,写第二行write_com(address);}/*voidwrite_char(ucharx,uchary,uchardate)// 坐标定位显示{write_by_xy(x,y);//先定位write_data(date);// 后写数}*/voidwrite_string(ucharx,uchary,uchar*s)// 写字符串{write_by_xy(x,y);//设定显示地点while(*s)//writecharacter{P0=*s;write_data(*s);s++;}}voidwrite_sfm(ucharadd,uchardate)// 写时分秒函数{ucharhour,ge;hour=date/10;//分解一个 2位数的十位和个位ge=date%10;write_com(0x80+0x40+add);// 设置显示地点write_data(0x30+hour);// 送去液晶显示十位write_data(0x30+ge);//送去液晶显示个位}voidwrite_cg()//写入固定汉字和符号{write_com(0x40);//设定CGRAM地点for(num=0;num<24;num++)//将自定义字型码写入CGRAM中{write_data(cg_1602[num]);}write_com(0x84);// 年{write_data(0);}write_com(0x87);//月{write_data(1);}write_com(0x8a);//日{write_data(2);}write_string(2,1,":");write_string(5,1,":");write_string(9,1,"QX-MCU");}voidinit_1602()//初始化{dx=0;wx=0;led_cs=0;hour=22;min=33;sec=55;key1num=0;count=0; write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_string(0,0,"2014");write_string(5,0,"07");write_string(8,0,"12");write_sfm(0,hour);write_sfm(3,min);write_sfm(6,sec);write_cg();TMOD=0x01;//设置准时器0工作模式 1TH0=(65536-50000)/256;//准时器装初值TL0=(65536-50000)%256;EA=1;//开总中止ET0=1;//开准时器 0中止TR0=1;//启动准时器0}/*键盘扫描函数*/voidkeyscan()//按键扫描函数{keyE=0;if(key1==0){delay(5);if(key1==0)//确认功能键被按下{key1num++;//功能键按下次数记录while(!key1);//开释确认if(key1num==1)//第一次被按下时{TR0=0;//封闭准时器write_com(0x80+0x40+7);//光标定位到秒地点write_com(0x0f);// 光标开始闪耀}if(key1num==2)//第二次按下光标闪耀定位到分钟地点{write_com(0x80+0x40+4);}if(key1num==3)//第三次按下光标闪耀定位到小时地点{write_com(0x80+0x40+1);}if(key1num==4)//第四次按下{key1num=0;//记录按键数清零write_com(0x0c);//撤消光标闪耀TR0=1;//启动准时器使时钟开始走}}}if(key1num!=0)//只有功能键被按下后,增添和减小键才有效{if(key2==0){delay(5);if(key2==0)//增添键确认被按下{while(!key2);//按键开释if(key1num==1)//若功能键第一次按下{sec++;//则调整秒加 1if(sec==60)//若满60后将清零sec=0;write_sfm(6,sec);//每调理一次送液晶显示一下write_com(0x80+0x40+7);//显示地点从头回到调理处}if(key1num==2)//若功能键第二次按下{min++;//则调整分钟加 1if(min==60)//若满60后将清零min=0;write_sfm(3,min);// 每调理一次送液晶显示一下write_com(0x80+0x40+4);//显示地点从头回到调理处}if(key1num==3)//若功能键第三次按下{hour++;//则调整小时加 1if(hour==24)//若满24后将清零hour=0;write_sfm(0,hour);;// 每调理一次送液晶显示一下write_com(0x80+0x40+1);//显示地点从头回到调理处}if(key3==0){delay(5);if(key3==0)//确认减小键被按下{while(!key3);//按键开释if(key1num==1)//若功能键第一次按下{sec--;//则调整秒减 1if(sec==-1)//若减到负数则将其从头设置为 59sec=59;write_sfm(6,sec);//每调理一次送液晶显示一下write_com(0x80+0x40+7);//显示地点从头回到调理处}if(key1num==2)//若功能键第二次按下{min--;//则调整分钟减1if(min==-1)//若减到负数则将其从头设置为 59 min=59;write_sfm(3,min);// 每调理一次送液晶显示一下write_com(0x80+0x40+4);//显示地点从头回到调理处}if(key1num==3)//若功能键第二次按下{hour--;//则调整小时减 1if(hour==-1)//若减到负数则将其从头设置为23 hour=23;write_sfm(0,hour);// 每调理一次送液晶显示一下write_com(0x80+0x40+1);//显示地点从头回到调理处}}}}}/*主函数*/voidmain(){dx=0;wx=0;led_cs=0;init_1602();while(1){keyscan();/*中止函数*/voidtimer0()interrupt1//准时器0中止服务程序{TH0=(65536-50000)/256;//再次装准时器初值TL0=(65536-50000)%256;count++;//中止次数累加if(count==20)//20次50毫秒为1秒{count=0;sec++;if(sec==60)//秒加到60则进位分钟{sec=0;//同时秒数清零min++;if(min==60)//分钟加到60则进位小时{min=0;//同时分钟数清零hour++;if(hour==24)//小时加到24则小时清零{hour=0;}write_sfm(0,hour);// 小时若变化则从头写入}write_sfm(3,min);// 分钟若变化则从头写入}write_sfm(6,sec);//秒若变化则从头写入}}。
LCD1602汉字显示技术在万年历中的应用及Proteus仿真

第3卷第3期2010年6月清远职业技术学院学报Journal of Qingyuan Polytechnic Vol.3,No.3June.20101简介1602是一款最常用也是最便宜的液晶显示屏,可以显示两行标准字符,每行显示16个字符,广泛应用于智能仪表、通信、办公自动化设备中。
它的主要作用是显示ASCII 码字符,因此又被称作“字符型显示器件”[1]。
对于内部没有标准汉字库的液晶显示器要显示汉字,第一步要取得想要的中文或者图形的字模数据。
通过字模软件不能直接提取5*8点阵的字模数据,可以通过手动提取的方法从汉字字型取模。
第二步,将取得的汉字字模数据保存到液晶存储器内部。
第三步,将汉字显示到需要位置,用Proteus 仿真或下载调试[2-5]。
2液晶显示器内部存储器1602里的存储器有三种:DDRAM 、CGROM 和CGRAM 。
2.1DDR AM 存储器DDRAM 存储器是和显示屏的内容对应的,1602内部的DDRAM 有80字节,显示屏上第一行的内容对应DDRAM 中80H 到8FH 的内容,第二行的内容对应DDRAM 中C0H 到CFH 的内容,每行16个,共2行,16×2共显示32个字符(图1)。
使用时,将显示的字符写入合适行列即可(详见3.4液晶1602显示子程序)。
图1字符型液晶1602的DDRAM 存储器2.2CGR OM 存储器CGROM 称为字符发生ROM ,其作用是存储各类字符的码,保存了厂家生产时固化在LCM 中的点阵型显示数据。
1602液晶模块内部的字符发生存储器CGROM 已经存储了160个不同的点阵字符图形,有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,这部分代码与ASCII 码基本一致,比如小写的英文字母“a ”的代码是61H ,大写的英文字母“A ”的代码是41H 。
2.3CGR AM 存储器CGRAM 称为字符发生RAM ,是厂家留给用户自己定义点阵型显示数据的,作用是存储用户自定义的字符代码。
1602显示汉字和自定义字符库

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,但是没有汉字库。
每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
今天偶然在网上发现有的人利用1602显示简单的汉字,对这个产生了兴趣,上网搜了一些资料,自己慢慢的研究了一下,终于弄懂了怎么回事,自己也写了一个显示“天”,“℃”,“你”,“土”,心形,“明”的程序。
下面就和大家一起分享一下。
查看LCD1602的CGROM字符代码表,可以发现从00000000B~00000111B (00H~07H)地址的内容是没有定义的,它是留给用户自己定义的,用户可以通过先定义LCD1602的CGRAM中的内容,最多可以自定义8个字符,然后就可以同调用CGROM字符一样来调用自定义好的字符。
那么如何设定CGRAM中的内容呢?首先我们要把所要编写的字符对应于5X8点阵的“字模”提取出来,我们可以通过相关的软件来提取,也可以手工提取。
说白了也就是将点阵的某一行中有显示的点用1表示,无显示的点用0表示,以此形成该行对应的字模数据。
设定CGRAM的内容,要一行一行的设定,每一行对应一个CGRAM,5X8点阵,每行5点,共8行,因此要将8行的字模数据都写入CGRAM。
写好后,就可像调用CGROM字符一样来来调用它了(CGRAM是可写可读的,CGROM只可读不可写)。
下面贴出我的程序(见1602LCD文件夹中的1602显示汉字.Uv2文件),实物图和Proteus仿真图,由于一个字符的点数为5X8,点数太少所以显示效果不是很好,经实验发现实物效果比仿真要好,下面为两者的效果图。
LCD1602显示汉字详解

2. 取模 首先取得想要的中文或者图形的字模数组。通过字模软件不能直接提取 5*8 点阵的字模数 据,可以通过手动提取的方法。如下图所示,对应一个字符显示区域。每 8 个字节,组成一
个Байду номын сангаас阵数组。
3. 实验原理图与结果
4. 程序
/***********************************************
(网上摘抄,写的很好!!!!!)
由上两条指令可知 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 个字 符。
LCD1602自定义显示字符及汉字

OK,字符取模就结束了,接下来时程序: /*************/echoas/home********* 程序:LCD1602的驱动原理及应用 内容:显示自定义字符 软件:Keil uVisoin4 开发板:proteus 仿真图 作者:大海橡树 ************/echoas/home***********/ #include<AT89X52.h> sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2;//LCD 的三个控制端 unsigned char table[]={0x15,0x0A,0x15,0x0A,0x15,0x0A,0x15,0x0A}; void delay(unsigned int i) { while(--i); } void Read_busy() //忙检测,DB7为1则 busy,不能进行读写操作 ;每次读写前应示的汉字不是很好看!呵呵,不过还是能看清的!我们在 LCD1602做数字 钟的时候可以用一个或两个 CGRAM 来显示年、月、日;上面的这个字 8 个 CGRAM 地址都用上了,其实我们可以用数码管动态扫描的原理在 LCD1602 上 显示四个大的汉字,因为每次显示一个汉字是8个 CGRAM 都用上了,所以没次 只显示一个!根据动态扫描的原理就能够实现四个汉字同时显示!有兴趣的朋友 可以试一下! LCD1602 就介绍到这里,想必大家都会了!下一篇有时间的话给大家介绍 LCD12864液晶,带字库的和不带字库的两种!用12864显示动画、温后呢,在里面打点,注意前三列空着不打点。这里我们显示自定义字符显示黑 白相间的点吧,于自带字符的显示,只需要将对应的 ASCII 码写入 LCD 中显示即可,这个是 每个人开始学习液晶最开始要学会的了,看看数据手册,写写程序,想必大家都 会了,这里就不做介绍,本篇着重讲解一下怎样自定义显示字符,比如显示自定 的字符、显示汉字等等这些! 要 显示我们自定义的字符,就要用到 LCD 中的 CGRAM 存储器( character generate RAM) ,而我们之前用的显示自带的字符用到的是 DDRAM,两个是不 同的。看液晶手册我们知道, CGRAM 的地址是0x40 ~ 0x7F,共128个字节,而 一个字符是8个字节, 所以一共能显示8个自定义的字符。内部常用字符的显示是 从0x20开始的,0x00 ~ 0x0F 是专门留给自定义字符显示用的。那么怎样显示一 个自定义字符呢? 首 先我们要清楚 LCD1602 显示字符的点阵大小,眼力好的可以看出来, LCD1602一个显示字符的位置是 5*8的点阵,也就是说它所能显示的点阵图形的 大小是5*8的!要显示一个自定义的字符,首先我们要知道所显示自定义字符的 点阵数据,也就是在一个 5*8的点阵上那个点是黑的(将该点点黑,就是高电平 ----1) ,哪个点是白的(该点不显示,为低电平----0 ) ,但是我们送入到 LCD 中 的是 ASCII 码,它是8位的数据,而一个显示字符的点阵大小只 是5*8的,显然 不够,显示的办法是8*8点阵的前三列不用,也就是不显示,我们只用后面的5 列来显示。 然后设定我们是要定义第几个自定义字符,前面已真图:
用1602显示汉字

用1602显示汉字2009-08-27 01:14:08| 分类:单片机| 标签:|举报|字号大中小订阅1602可以显示汉字啦!不过显示功能有些小bug 查了半天也没查出问题出在哪(郁闷....——)LCD1602已很普遍了,具体介绍我就不多说了,市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,定义如下表所示:(图1)字符型LCD的引脚定义(图1)HD44780内置了DDRAM、CGROM和CGRAM。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下表:(图2)(图2)也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码就行了。
但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。
那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。
第二行也一样用前16个地址。
对应如下:图3。
DDRAM地址与显示位置的对应关系:(图3)我们知道文本文件中每一个字符都是用一个字节的代码记录的。
一个汉字是用两个字节的代码记录。
在PC上我们只要打开文本文件就能在屏幕上看到对应的字符是因为在操作系统里和BIOS里都固化有字符字模。
什么是字模?就代表了是在点阵屏幕上点亮和熄灭的信息数据。
例如“A”字的字模:01110○■■■○10001■○○○■10001■○○○■10001■○○○■11111■■■■■10001■○○○■10001■○○○■上图左边的数据就是字模数据,在取字模软件要用8*8的行列。
前三列不用000,黑色表示显示1高电平右边就是将左边数据用“○”代表0,用“■”代表1。
1602原理 汉字显示 原理理解

主要是看懂它CGROM CGRAM的存储空间图,和工作原理用户直接操作DDRAM,DDRAM有80个字节,其位置与1602的显示位置有对应关系,基本思想是向指定的DDRAM地址中写入字符对应的ASCII码,其实是指针,DDRAM通过这个指针在CGROM中找到它对应的字模数组,然后显示在屏幕上。
用户看起来是对DDRAM的操作,实则是通过DDRAM调用了CGROM中的字模数组,显示在LCD上。
图1其奥妙在于它的ASCII码、字符点阵地址、行地址的对应关系上图2(没有复制完整)DDRAM的地址对应LCD上的一个位,其内容是一个指针,指向了点阵中的数组。
以00H为例,(写地址的时候要写成0X80,因为指令规定了高位要为1 ,见DDRAM地址设置指令)向00H中写一个01100010则LCD的处理器会视01100010为指针,然后通过CGROM找到它对应的一组字模代码,如下图,这个指针对应的是一个存储空间,这个存储空间就是8行5列,对应下面的行地址0000到0111.这就是行地址的意思,也就是字模码的行。
,第8行对应的是光标,就是我们在LCD上看到一最后一行,如果是光标闪烁的话,那一闪闪的就是第8行的位在不断的置0置1的结果。
如下图3示行、列描述的是存储空间,字模码的行列就是8行5列的;还有个行地址批的是CGROM 的行,CGROM中的低4位就是行,共16行16列,如图2 示图3下面提用户自定的的解释CGRAM其实是CGROM中的一部分,这部分是没有被写进字模码的存储空间。
前8位没有用到,可以让用户自己写字模码。
用户最多写8个,CGROM中对应行0000行到0111行,当然对就的是第0列。
第个CGRAM对应一个8行5列的存储空间,如下图4示因此写自定义字模时要先设定好这个CGRAM的地址,如00000000,然后要在这个地址中写入8行的数据,如图4示,第一个地址代表字符标号,也就是行DDRAM中写的指针,下面的字符码的低3位,现时也是CGRAM的高3位,位5 4 3。
LCD2004 LCD1602显示自定义汉字详解

**********/
void main()
{
uint i;
uint count=0;
LcdInit();
IntConfiguration();
K3=1;
Delay10ms(); Delay(1); Delayms(1);
for(i=0;i<8;i++) {
LcdWriteCom(0x40+i); LcdWriteData(sheng[i]); //Delay(100); } LcdWriteCom(0x80); LcdWriteData(0x00);
//26 显示‘日’ //27 显示‘快’ //28 显示‘乐’
for(i=0;i<8;i++)
//29 显示’生‘
{ LcdWriteCom(0x40+i); LcdWriteData(sheng[i]); //Delay(100);
} LcdWriteCom(0xc0+8); LcdWriteData(0x00);
for(i=0;i<8;i++) {
LcdWriteCom(0x58+i); LcdWriteData(le[i]); //Delay(100); } LcdWriteCom(0x80+15); LcdWriteData(0x03);
//14 显示‘日’ //15 显示‘快’ //16 显示‘乐’
for(i=0;i<8;i++) {
LcdWriteCom(0x48+i); LcdWriteData(ri[i]); //Delay(100); } LcdWriteCom(0x80+5); LcdWriteData(0x01);
1602液晶显示汉字程序

1602 液晶显示汉字程序利用1602 显示汉字也不是新鲜的内容,今天不想颓废了。
只是需要自己事先定义一下汉字的字模,就是显示出来的汉子字体结构。
要定义字模就需要知道1602 的CG RAM 地址和显示字符的地址DD RAM图1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 第一行第一个字符的地址是( 0x80) ,后面的字符地址以此类推第二行第一个字符的地址为( 0x80 + 0x40) ,需要在第一行的基地址后面加上一个偏移量0x40 ,后面的地址在此基址上再依次加一。
void delay(unsigned int time_i){ int i;for (;tim>0;tim--){for (i=0;i<10;i++); } }void command_out (char out_data) {RW=0;RS=0;EN=1;DB=out_data;EN=0;delay(10);}void OUTD(char out_data){RS=1;RW=0;EN=1;DB= out_data;EN=0;delay(10);}OUTI() 是写入指令的函数,OUTD() 是写入数据的函数。
如:左上角第一个5*7 的显示数据为:0x00,0x01,0x81,0x12,0x24,0x41,0x81,0x10蓝色区域的相应位为1这样就可以写出全部 4 个 5*7 点阵的显示数据了,把它封装在一个数组中,如数组, hanzi[]={OxOO,OxO1,Ox81,Ox12,Ox24,Ox41,Ox81,Ox1O,} 之后利用命令:OUTI(0X40); for (i=0;i<64;i++){ OUTD(neu[i]);} 将这个数组中的数据赋值到 1602 内部 CGRAM 中。
一个1602显示汉字程序

一个1602显示汉字程序//************************************* //lcd头文件//*************************************#include<reg52.h>#include<string.h>#include <absacc.h>#define lcd_data P0 //定义端口#define uchar unsigned char#define uint unsigned intsbit RS=P2^1;sbit RW=P2^2;sbit E=P2^3;sbit BF=P0^7;//*************************************** //延时函数//*************************************** void delay(uint i){while(i--);}//***************************************//写控制字//*************************************** void write_struct(uchar temp){E=0;delay(100);//while(BF==1);RW=0;RS=0;lcd_data=temp;delay(3);E=1;delay(3);E=0;}//**************************************//写数据//**************************************void write_data(uchar temp){delay(100);//while(BF==1);E=0;RS=1;RW=0;lcd_data=temp;E=1;delay(3);E=0;}//***************************************//获得显示地址//x表示是第几行显示(0-1)//y表示某行的第几个字符(0-15)//***************************************uchar getchar_adress(uchar x,uchar y){ uchar address;if(x==0) address=0x80+y; //第一行else address=0xc0+y; //第二行return address;}//***************************************//lcd初始化//***************************************void lcd_init(){write_struct(0x38); //设置接口DB宽度(8位)和LCM显示行数(2行) write_struct(0x08); //write_struct(0x0c); //设置光标为移位模式write_struct(0x01); //执行清屏操作write_struct(0x06); //设置光标为加1模式}//***************************************//向CGRAM写入数据//***************************************void write_cgram(unsigned char adress,unsigned char *p){char i;for(i=0;i<8;i++){ write_struct(adress+i);write_data(p[i]);}}//***************************************//显示CGRAM数据//x表示是第几行显示(0-1)//y表示某行的第几个字符(0-15)//***************************************void display_cgram(unsigned char x,uchar y,uchar *CgramData) {uchar address,cgram_address,p;address=getchar_adress(x,y); //获得CGRAM字符显示位置cgram_address=0x40+(address&0x07)*8; //CGR AM初始地址 p=address&0x07;write_cgram(cgram_address,CgramData);write_struct(address); //设置DDRAM地址write_data(p);}//显示字符//***************************************void display(char temp0,char *p){write_struct(temp0);delay(3);write_data(*p);}//****************************************//显示字符串//****************************************void display_str(uchar x,uchar y,char *p){char i,temp0;temp0=getchar_adress(x,y);write_struct(temp0);for(i=0;i<16;i++){if(*p=='\0')break;write_data(*p);p++;}}//****************************************//清屏//****************************************void lcd_clr(){write_struct(0x01);}//*****************************************************end。
单片机1602显示汉字方法

单片机1602显示汉字方法1602控制器内部带有80*8位(80字节)RAM,可根据自己进行设置。
在初始化设置中将其设为0x40;则可以写入RAM;由于内部RAM 的限制,一次只能显示一个汉字;=================================================================C语言程序如下:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit rs=P3^5;sbit en=P3^4;uchar code cgcode[]={0x04,0x07,0x06,0x06,0x07,0x06,0x06,0x06, /*每一个文字用6个5*7点阵组成,每一个块是汉字的点阵*/0x00,0x1F,0x00,0x00,0x02,0x17,0x1E,0x0C,0x08,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x06,0x06,0x06,0x06,0x0D,0x0C,0x08,0x10,0x0C,0x1E,0x1F,0x13,0x02,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x1A,0x1A,0x0F,0x06};uchar tab[]={0x00,0x01,0x02}; /*内部RAM地址*/void delay(uint z){uint x,y;for(x=z;z>0;z--)for(y=110;y>0;y--);}void write_com(uchar com){rs=0;P0=com;delay(5);en=1;delay(5);en=0;}void write_data(uchar date){rs=1;P0=date;delay(5);en=1;delay(5);en=0;}void init(){en=0;write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口write_com(0x0c); //开显示,不显示光标write_com(0x06); //读写一指针后地址自动加1write_com(0x01); //显示清屏}void main(){int i;init();rs=0;write_com(0x40);for(i=0;i<48;i++){write_data(cgcode[i]);}write_com(0x86);for(i=0;i<3;i++){write_data(tab[i]);delay(100);}write_com(0x86+40);write_data(0x03); delay(100); write_data(0x04); delay(100); write_data(0x05); while(1);}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
液晶显示模块LCD1602介绍液晶显示(LCD)是单片机应用系统中的一种常见人机接口形式,其优点是体积小、重量轻、功耗低。
目前市场上的液晶显示器主要有字段型、点阵字符型和点阵图形三大类。
此处介绍点阵字符型LCD1602。
点阵字符型液晶显示根据显示容量可以分为1*16,2*16,2*20字等形式。
LCD1602为2*16型。
LCD1602可以显示内部常用字符(包括阿拉伯数字,英文字母大小写,常用符号和日文假名等),也可以显示自定义字符(单或多个字符组成的简单汉字,符号,图案等,最多可以产生8个自定义字符)。
LCD1602模块采用16引脚接线:引脚01:Vss,接地。
引脚02:Vdd,接5V。
引脚03:VL,对比度调整端。
通常接地,此时对比度最高。
引脚04:RS,数据/命令寄存器选择端。
1→数据寄存器,0→命令寄存器。
引脚05:RW,读/写选择端。
1→读,0→写。
引脚06:E,使能端。
1→0跳变时液晶模块执行命令。
引脚07-14,D0-D7,8位双向数据总线。
引脚15:BLA,背光正极。
应缴16:BLK,背光负极。
LCD1602模块的命令,共有11条,如表1所示表1 LCD1602的操作命令序号指令RS R/W D7 D6 D5 D4 D3 D2 D1 D01 清屏0 0 0 0 0 0 0 0 0 12 光标归位0 0 0 0 0 0 0 0 1 *3 输入模式设置0 0 0 0 0 0 0 0 I/D S4 显示与不显示设置0 0 0 0 0 1 D C B0 0 0 0 0 1 S/C R/L * * 5 光标或屏幕内容移位选择6 功能设置0 0 0 0 1 DL N F * *7 CGRAM地址设置0 0 0 1 CGRAM地址8 DDRAM地址设置0 0 1 DDRAM地址0 1 BF 计数器地址9 读忙标志和计数器地址设置10 写DDRAM或1 0 要写的数据CGROM1 1 读出的数据11 读DDRAM或CGROM命令说明:命令1:清屏。
光标回到左上角,地址计数器设为0.命令2:光标归位。
光标回到左上角。
命令3:显示模式设置I/D S 显示模式0 0 光标左移1格,地址计数器减10 1 屏幕内容全部右移1格,光标不动1 0 光标右移1格,地址计数器加11 1 屏幕内容全部左移1格,光标不动命令4:显示与不显示设置。
D=1 →开显示,D=0 →关显示C=1 →开光标,C=0 →关光标B=1 →光标闪烁,B=0 →光标不闪烁命令5:光标或屏幕内容移位选择。
S/C=1 →移动屏幕内容,S/C=0 →移动光标R/L=1 →右移,R/L=0 →左移,命令6:功能设置。
DL=0 → 4位数据接口,DL=1 → 8位数据接口N=0 →单行显示,N=1 →双行显示F=0 →显示5*7点阵,F=1 →显示5*10点阵命令7:CGRAM地址设置。
地址范围40H-7FH (将一个字符分成5*8点阵,一次写入一行,8行组成一个字符)命令8:DDROM地址(显示地址)设置。
第一行地址80-8F,第二行地址C0-CF命令9:读忙标志和计数器地址设置。
BF=1→忙,BF=0→不忙计数器地址00H-7FH命令10:写DDRAM或CGROM。
要配合地址设置命令。
命令11:读DDRAM或CGROM。
要配合地址设置命令。
LCD1602模块使用时要先进行初始化,初始化内容为:●清屏●功能设置●显示与不显示设置●输入模式设置一、显示常用字符1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表2所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是41H,显示时模块把地址41H 中的点阵字符图形显示出来,我们就能看到字母“A”表2 点阵字符图形编码序号代码ASCII字符序号代码ASCII字符序号代码ASCII字符0 00 CGRAM自定义字符143 2B + 86 56 V1 01 自定义字符2 44 2C ,87 57 W2 02 自定义字符3 45 2D - 88 58 X3 03 自定义字符4 46 2E . 89 59 Y4 04 自定义字符5 47 2F / 90 5A Z5 05 自定义字符6 48 30 0 91 5B [6 06 自定义字符7 49 31 1 92 5C ¥7 07 自定义字符8 50 32 2 93 5D ]8 08 自定义字符1 51 33 3 94 5E ^9 09 自定义字符2 52 34 4 95 5F _10 0A 自定义字符3 53 35 5 96 60 `11 0B 自定义字符4 54 36 6 97 61 a12 0C 自定义字符5 55 37 7 98 62 b13 0D 自定义字符6 56 38 8 99 63 c14 0E 自定义字符7 57 39 9 100 64 d15 0F 自定义字符8 58 3A : 101 65 e16 10 自定义字符1 59 3B ; 102 66 f17 11 自定义字符2 60 3C < 103 67 g18 12 自定义字符3 61 3D = 104 68 h19 13 自定义字符4 62 3E > 105 69 i20 14 自定义字符5 63 3F ? 106 6A j21 15 自定义字符6 64 40 @ 107 6B k22 16 自定义字符7 65 41 A 108 6C l23 17 自定义字符8 66 42 B 109 6D m24 18 自定义字符1 67 43 C 110 6E n25 19 自定义字符2 68 44 D 111 6F o26 1A 自定义字符3 69 45 E 112 70 p27 1B 自定义字符4 70 46 F 113 71 q28 1C 自定义字符5 71 47 G 114 72 r29 1D 自定义字符6 72 48 H 115 73 s30 1E 自定义字符7 73 49 I 116 74 t31 1F 自定义字符8 74 4A J 117 75 u32 20 空格75 4B K 118 76 v33 21 !76 4C L 119 77 w34 22 " 77 4D M 120 78 x35 23 # 78 4E N 121 79 y36 24 $ 79 4F O 122 7A z37 25 % 80 50 P 123 7B {38 26 & 81 51 Q 124 7C |39 27 ' 82 52 R 125 7D }40 28 (83 53 S 126 7E→41 29 )84 54 T ←42 2A * 85 55 U显示操作的过程:首先确认显示的位置,即在第几行,第几个字符开始显示。
也就是要显示的地址,如下表所示的显示地址。
第一行的显示地址是0x80-0x8F,第二行的显示地址是0xC0-0xCF。
例如想要在第2行,第3个位置显示一个字符,那么地址码就是0xC2。
在编程过程中,通常编写一个函数确定在某行某个位置显示数据。
函数需要行参数(y),和列参数(x)来确定显示位置。
程序参考如下/***************设置显示位置**************************/void LCD_set_xy( unsigned char x, unsigned char y ){unsigned char address;if (0 == y) x |= 0x80; //当要显示第一行时地址码+0x80;else x |= 0xC0; //在第二行显示是地址码+0xC0;Write_com(x); //发送地址码0x80-0x8F 或者0xC0-0xCF}其次设置要显示的内容,即上面提到的CGROM内的字符编码。
如显示“A”,将编码41H写入到液晶屏显示即可。
通常设置地址和显示内容用一个函数来完成。
代码参考如下://功能:按指定位置显示一个字符//输入:列显示地址x(取值范围0-15) 行显示地址y(取值范围0-1), 指定字符void DisplayOneChar(unsigned char x, unsigned char y, unsigned char Data) {if (0 == y) x |= 0x80; //当要显示第一行时地址码+0x80;else x |= 0xC0; //在第二行显示是地址码+0xC0;Write_com(x); //发送地址码Write_dat(Data); //发送要显示的字符编码}显示字符“A”调用过程如下代码:DisplayOneChar(0,0,0x41);//功能:在第1行第1个字符显示一个大写字母A二、显示字符串在C语言操作时,还可以显示整个字符串。
定义一个字符串显示函数,可以通过直接输入字符方式进行显示//功能:按指定位置显示一串字符//输入:列显示地址x(取值范围0-15) 行显示地址y(取值范围0-1), 指定字符串指针*p,要显示的字符个数count (取值范围1-16)void Disp_1602 (unsigned char x, unsigned char y, unsigned char *p, unsigned char count){unsigned char i;for(i=0;i<count;i++){if (0 == y) x |= 0x80; //当要显示第一行时地址码+0x80;else x |= 0xC0; //在第二行显示是地址码+0xC0;Write_com(x); //发送地址码Write_dat(*p); //发送要显示的字符编码x++;p++;}}调用方法如下:DisplayListChar(0,0,"hello world",11); //液晶1602第一行显示DisplayListChar(0,1,"",12); //液晶1602第二行显示二、显示自定义字符。
显示效果:三、显示汉字1、首先取得想要的中文或者图形的字模数组。
通过字模软件不能直接提取5*8点阵的字模数据,可以通过手动提取的方法。
如下图所示,对应一个字符显示区域。
每8个字节,组成一个点阵数组。
“日”的点阵数组即为{0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00}2个点阵组成一个汉字取模举例:“车”字取模数组为:{0x00,0x0f,0x02,0x04,0x07,0x00,0x0f,0x00,0x10,0x1e,0x00,0x10,0x1c,0x10,0x1e,0x10}将生成的点阵数组保存到CGRAM存储器中,生成自定义字符。