预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

LCD1602自定义显示字符及汉字 整理:大海橡树 第一篇讲解一下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 generateRAM),而我们之前用的显示自带的字符用到的是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 列来显示。 然后设定我们是要定义第几个自定义字符,前面已经介绍了,LCD1602最多显 示8个自定义字符;然后要规定在液晶的什么显示自定义字符,看过数据手册我 们知道,第一行第一个位置的地址是0x80,第二行一个位置的地址是0xC0。最 后就是要显示我们定义的第几个字符其对应的关系式是: 0x00-----第一个0x01-----第二个0x02-----第三个 0x03-----第四个 0x04-----第五个0x05-----第六个0x06-----第七个 0x07-----第八个 算了,还是画个流程图,这样大家看的更清楚:(第一个显示字符的数组数据, 不小心打错了,呵呵) 接下来介绍怎样对显示的数组取模:给大家介绍个取模软件,这个软件很常见叫 做zimo221,玩过点阵的和液晶的估计都知道吧,打开软件,首先我们创建一个 8*8点阵大小的图形,如下图所示: 然后呢,在里面打点,注意前三列空着不打点。这里我们显示自定义字符显示黑 白相间的点吧,这个是我打好的,看下图: 然后设定取模的方式: 然后生成代码:看你是用什么程序写,这里我是用C写的就用C51的格式 OK,字符取模就结束了,接下来时程序: /************* 程序:LCD1602的驱动原理及应用 内容:显示自定义字符 软件:KeiluVisoin4 开发板:proteus仿真图 作者:大海橡树 ************ #include<AT89X52.h> sbitRS=P2^0; sbitRW=P2^1; sbitEN=P2^2;//LCD的三个控制端 unsignedchartable[]={0x15,0x0A,0x15,0x0A,0x15,0x0A,0x15,0x0A}; voiddelay(unsignedinti) { while(--i); } voidRead_busy()//忙检测,DB7为1则busy,不能进行读写操作;每次读写前应"读忙" 检测 { P0=0x00; RS=0; RW=1; EN=1; while(P0&0x01); EN=0; } voidwrite_LCD_command(unsignedcharvalue)/