LCD1602显示汉字详解
- 格式:pdf
- 大小:454.80 KB
- 文档页数:7
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 _显示操作的过程:首先确认显示的位置,即在第几行,第几个字符开始显示。
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型LCD介绍
现在的字符型液晶模块已经是单片机应用设计中最常用的信息显示器件了。
1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。
1602型LCD可以显示2行16个字符,有8位数据总线D0~D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。
1. 外型尺寸:80X36X13(LXWXH)
2.接口信号说明
1602型LCD的接口信号说明如表1-11所示.
3.主要技术参数
1602型LCD的主要技术参数如下:
4.基本操作程序
读状态:输入:RS=L,RW=H,E=H 输出:D0~D7=状态字
读数据:输入:RS=H,RW=H,E=H 输出:无
写指令:输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲输出:D0~D7=数据写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲输出:无
5.RAM地址映射图
控制器内部带有80字节的RAM缓冲区,对应关系如图11-3所示
6.状态字说明
☆注意每次对控制器进行读写操作之前,都必须进行读写检测,确保STA7为0。
7.数据指针设置
控制器内部设有一个数据地址指针,用户可以通过它们访问内部的全部80字的RAM。
8.其它设置
9.初始化设置
(1)显示模式设置
显示开/关及光标设置。
LCD1602中文资料1. 简介LCD1602是一种常见的液晶显示模块,它具有两行,每行可以显示16个中文字符或32个英文字母字符。
它广泛应用于数字仪表、电子产品、家电控制、智能家居等领域。
2. 主要特点•显示容量:LCD1602可以同时显示两行,每行可以显示16个中文字符或32个英文字母字符。
•分辨率:每个字符由5 x 8个像素点组成。
•背光控制:可通过控制背光开关来控制显示背光。
•低功耗:LCD1602使用低功耗驱动电路,非常适合电池供电的应用。
•接口简单:LCD1602使用标准的I2C接口进行通信,方便与各种微控制器连接。
3. 硬件连接LCD1602的硬件连接非常简单,只需要将其的VCC引脚连接到3.3V或5V电源,GND引脚连接到地,SDA引脚连接到I2C总线的数据线,SCL引脚连接到I2C总线的时钟线。
以下是连接示意图:SDA ———————————> I2C总线数据线SCL ———————————> I2C总线时钟线VCC ———————————> 3.3V或5V电源GND ———————————> 地4. 软件驱动使用LCD1602显示中文需要相应的软件驱动。
以下是使用Python编写的一个简单的LCD1602驱动代码示例:import smbus2import time# LCD1602的I2C地址ADDRESS =0x27# LCD1602的控制命令LCD_COMMAND =0x80LCD_DATA =0x40def lcd_init():# 初始化LCD1602bus = smbus2.SMBus(1)bus.write_byte(ADDRESS, 0x38) # 设置显示模式为2行,5 x 8个像素点bus.write_byte(ADDRESS, 0x0c) # 打开显示,关闭光标bus.write_byte(ADDRESS, 0x06) # 设置光标移动方向为从左到右bus.write_byte(ADDRESS, 0x01) # 清屏def lcd_write(ch):# 向LCD1602写入字符bus = smbus2.SMBus(1)bus.write_byte(ADDRESS, LCD_DATA)bus.write_byte(ADDRESS, ord(ch))def lcd_display(text):# 在LCD1602上显示文本bus = smbus2.SMBus(1)bus.write_byte(ADDRESS, LCD_COMMAND) for ch in text:bus.write_byte(ADDRESS, ord(ch))# 使用示例lcd_init() # 初始化LCD1602lcd_display('Hello, World!') # 在LCD1602上显示文本5. 示例应用使用LCD1602显示中文可以应用于各种场景,以下是一个使用LCD1602显示温湿度的示例应用:import smbus2import Adafruit_DHT# LCD1602的I2C地址ADDRESS =0x27# LCD1602的控制命令LCD_COMMAND =0x80LCD_DATA =0x40def lcd_init():# 初始化LCD1602bus = smbus2.SMBus(1)bus.write_byte(ADDRESS, 0x38) # 设置显示模式为2行,5 x 8个像素点bus.write_byte(ADDRESS, 0x0c) # 打开显示,关闭光标bus.write_byte(ADDRESS, 0x06) # 设置光标移动方向为从左到右bus.write_byte(ADDRESS, 0x01) # 清屏def lcd_write(ch):# 向LCD1602写入字符bus = smbus2.SMBus(1)bus.write_byte(ADDRESS, LCD_DATA)bus.write_byte(ADDRESS, ord(ch))def lcd_display(text):# 在LCD1602上显示文本bus = smbus2.SMBus(1)bus.write_byte(ADDRESS, LCD_COMMAND)for ch in text:bus.write_byte(ADDRESS, ord(ch))# 使用示例lcd_init() # 初始化LCD1602while True:# 读取温湿度数据humidity, temperature = Adafruit_DHT.read_ret ry(Adafruit_DHT.DHT11, 4)# 在LCD1602上显示温湿度数据lcd_display(f'温度:{temperature}℃湿度:{hu midity}%')time.sleep(2)6. 总结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 里面增加了一些你自定义的字符,汉字。
可能到这里,也许会有些疑问,既然自定义字符、汉字的代码需要我们自己输入,那幺我该怎幺编写这些代码,呵呵,不要着急,接下来就要用到下面这个取字模软件。
相信有的朋友应该都用过这个软件。
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显示自定义字符及汉字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液晶模块内部的字符发生存储器(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显示全部字库字符LCD1602显示全部字库字符、看门狗定时器测试LCD1602液晶内含有192个字符字库,这个程序是分6屏进行显示,整个显示过程长约7秒,看门狗定时器设置时间为8.38秒,刚好显示完全部字符,修改看门狗就可以看到在显示中途重启,比较直观LCD_E BIT P3.4 ;LCD片选LCD_RS BIT P3.5 ;指令、数据位LCD_RW BIT P3.6 ;读、写位PORT EQU P0 ;端口定义WDT_COUNT EQU 0E1H ;看门狗START: LCALL LCD_INITLCALL WDT_INITMOV A,#01H ;清屏LCALL WR_CMDDISP_LOOP: MOV R0,#06H ;循环计数器MOV R1,#80H ;LCD地址计数器MOV R2,#00H ;字符表指针计数器MOV DPTR,#TABWR_DAT_LOOP: MOV A,R1 ;地址命令LCALL WR_CMDINC R1 ;地址加一MOV A,R2 ;表指针MOVC A,@A+DPTRLCALL WR_DA TLCALL DELAY100MSINC R2 ;表指针加一CJNE R1,#90H,BIJIAO ;字符是否到16MOV R1,#0C0H ;到16,换地址BIJIAO: CJNE R1,#0D0H,WR_DAT_LOOP ;字符数是否到32MOV R1,#80H ;地址回归LCALL DELAY1SMOV A,#1B ;清屏LCALL WR_CMDDJNZ R0,WR_DA T_LOOPMOV WDT_COUNT,#00110111BLJMP DISP_LOOPLCD_INIT: MOV A,#111000B ;8位总线LCALL WR_CMDMOV A,#10B ;数据指针清零LCALL WR_CMDMOV A,#01H ;清屏LCALL WR_CMDMOV A,#1111B ;显示开,光标开,闪烁开LCALL WR_CMDMOV A,#10000000B ;设置显示地址00HLCALL WR_CMDRETWDT_INIT: MOV WDT_COUNT,#00110111B ;看门狗定时器设置时间1.1秒RETCHK_BUSY: SETB PORT.7CLR LCD_RSSETB LCD_RWWAIT1: SETB LCD_EMOV C,PORT.7JC WAIT1CLR LCD_ERETWR_CMD: LCALL CHK_BUSYCLR LCD_RSCLR LCD_RWSETB LCD_EMOV PORT,ACLR LCD_ERETWR_DAT: LCALL CHK_BUSYSETB LCD_RSCLR LCD_RWSETB LCD_EMOV PORT,ACLR LCD_ERETDELAY100MS: MOV R7,#10DL5: MOV R6,#250DL4: NOPNOPDJNZ R6,DL4DJNZ R7,DL5RETDELAY1S: MOV R7,#10DL1: MOV R6,#200DL2: MOV R5,#248DL3: DJNZ R5,DL3DJNZ R6,DL2DJNZ R7,DL1RETTAB: DB 20H,21H,22H,23H,24H,25H,26H,27H,28H,29H,2AH,2BH,2CH,2D H,2EH,2FHDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,3AH,3BH,3CH, 3DH,3EH,3FHDB40H,41H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH,4CH, 4DH,4EH,4FHDB50H,51H,52H,53H,54H,55H,56H,57H,58H,59H,5AH,5BH,5CH, 5DH,5EH,5FHDB60H,61H,62H,63H,64H,65H,66H,67H,68H,69H,6AH,6BH,6CH, 6DH,6EH,6FHDB70H,71H,72H,73H,74H,75H,76H,77H,78H,79H,7AH,7BH,7CH, 7DH,7EH,7FHDB0A0H,0A1H,0A2H,0A3H,0A4H,0A5H,0A6H,0A7H,0A8H,0A9H ,0AAH,0ABH,0ACH,0ADH,0 AEH,0AFHDB0B0H,0B1H,0B2H,0B3H,0B4H,0B5H,0B6H,0B7H,0B8H,0B9H,0 BAH,0BBH,0BCH,0BDH,0BE H,0BFHDB0C0H,0C1H,0C2H,0C3H,0C4H,0C5H,0C6H,0C7H,0C8H,0C9H, 0CAH,0CBH,0CCH,0CDH,0CE H,0CFHDB0D0H,0D1H,0D2H,0D3H,0D4H,0D5H,0D6H,0D7H,0D8H,0D9 H,0DAH,0DBH,0DCH,0DDH,0 DEH,0DFHDB0E0H,0E1H,0E2H,0E3H,0E4H,0E5H,0E6H,0E7H,0E8H,0E9H,0E AH,0EBH,0ECH,0EDH,0EEH ,0EFHDB0F0H,0F1H,0F2H,0F3H,0F4H,0F5H,0F6H,0F7H,0F8H,0F9H,0F AH,0FBH,0FCH,0FDH,0FEH,0 FFHEND。