历史上的今天
今天是:2025年01月25日(星期六)
2021年01月25日 | C51单片机编程技巧:LCD1602编程经验分享
2021-01-25 来源:eefocus
简介:先说明一下,我下面要说的LCD1602的芯片驱动是HD44780,如果你们的LCD1602驱动芯片不是HD44780,那么下面的内容是不适用的。
这次我来分享一下我的LCD1602的编程经验:
先说明一下,我下面要说的LCD1602的芯片驱动是HD44780,如果你们的LCD1602驱动芯片不是HD44780,那么下面的内容是不适用的。
我对LCD1602的整体理解
这里说一下我对LCD1602的整体理解哈,LCD1602是一个可以显示两行字符的LCD显示器,每一行可以都写入40个字符,但是每行都只有前16个字符可以显示,每行后面的24个字符无法立即显示,只说不容易明白,下面看一下示意图:

另外LCD1602只能显示字符,数字和一些简单的符号,是无法显示汉字的,切记。
LCD1602引脚:
然后再说一下引脚,每当学习一个芯片或者模块,最先要了解的就是引脚:

由于我们现在只是学习怎么编程,所以电路的连接我就不讲了,下面说一下与编程有关的引脚:
1.RS引脚:数据/命令选择端(H/L)
当你要给LCD发送指令的时候,就给这个引脚低电平;
当你要与LCD交互数据的时候,就给这个引脚高电平。
2.R/W引脚:读/写选择端(H/L)
当你要向LCD写入数据的时候,就给这个引脚低电平;
当你要读LCD中的数据的时候,就给这个引脚高电平。
3.E引脚:使能端(这里照顾一下爱钻牛角尖的人:E为什么叫“使能”啊?另外“使能”啥意思,我怎么从来没听说过啊?)
答1:E引脚英文全称:Enable引脚,En是英语中的一个前缀,译为“使...”,而后面的able是译为“能够”,所以合起来就叫“使能”引脚了。
答2:使能啥意思呢,这里不说专业术语哈,你可以理解为使能端就是一个开关,当这个引脚是高/低电平时这个器件是可以用的,当它为相反电平时这个器件就是没用的,你无论怎么做它也是不工作的。当然到底是低电平器件有效呢,还是高电平器件有效呢?这个就要看具体器件的数据手册或者有的引脚上也会直接标出来,比如E就是高电平有效,E(——)就是低电平有效。
4.D0~D7引脚:这个就没什么好说的了,就是传输数据或者命令的引脚。
5.其他的电源引脚,背光电源什么的就不说了,表格里面已经说得非常清楚了,而且我们现在仅仅是学习编程,电路连接不讲。
引脚说完了,那么下面我们就可以说LCD1602的编程部分了:
我认为对于LCD1602需要记住的就两部分,时序和指令(并不是非要完全记住,学完后自己写一个函数库,以后开发用到的时候直接调用就行了)
先说一下时序和初始化过程:
LCD1602读时序:

读函数的源码我没写,毕竟这个几乎用不到。
用图中可以看出:
RS引脚按照你的读取什么而定,读取数据就高电平,读取命令就是低电平;
RW引脚自然就是高电平了,因为我们要读嘛;
然后再往后就是E引脚了,我们在读取命令或者数据的时候,必须要先使能这个器件,所以E引脚要置为高电平;
最后D0到D7就是读取的数据了,我们找个变量数组保存起来就行了。
虽然读时序讲完了,但是在实际开发中我们几乎不需要进行读操作,我想这时有人就会说了:不是要读取忙标志吗,那不就要进行读操作了吗?的确是那样,但是LCD1602的速度是纳秒级别的,而51单片机是毫秒级别的,所以基本不需要读取忙标志,只要微延时就行了。
如图:

LCD1602写时序:

这个函数我写了,下面是代码:

【注】在函数里面我用了两种方式,并4口和并8口
下面说一下最重要的写操作时序,从图中可以看出:
RS引脚按照你的读取什么而定,读取数据就高电平,读取命令就是低电平;
RW引脚自然就是低电平了,因为这次我们要写嘛;
然后再往后就是E引脚了,我们在读取命令或者数据的时候,必须要先使能这个器件,所以E引脚要置为高电平;
最后D0到D7就是写入的数据或者命令了。
LCD1602过程
这个我也写了,下面是代码:

LCD1602的初始化,也就是HD44780芯片的初始化过程,这个初始化过程的版本太多了,大多数初始化过程都可以成功初始化,但是我这里是在写文章嘛,自然就不能讲一个乱七八糟的初始化过程啦,所以我就查了一下HD44780芯片的英文原版数据手册,下面上图:

大家如果想看懂的话就从上往下一步一步地看,然后就明白为什么初始化要像上面那样写了。
【注】很多初始化的版本都可以成功初始化,我说的那个仅仅是最正规的而已,个人喜好,只要可以初始化成功就可以了。
最后写好LCD1602的头文件,然后LCD1602的函数库就做好了,当然我们没写读函数,这些你想写的话自己加上去就行了。有了这个函数库,以后用LCD1602的时候直接调用就行了,多方便。
史海拾趣
|
Embedded System Interview Questions: Can structures be passed to the functions by value? Why cannot arrays be passed by values to functions? Advantages and disadvantages of using macro and inline functions? What happens wh ...… 查看全部问答> |
|
用的是飞思卡尔的单片机,里面是没有时钟模块的。最麻烦的问题是如果掉电了还要时钟模块继续工作,这样的话是不是肯定要增加干电池? 还有,如果总是发送时间信号给LCD现实的话,单片机是不是忙的过来?… 查看全部问答> |
|
如题,有没有相应的事件呢? c#下用这个开源的OpenNETCF.Desktop.Communication可以方便的获得。 在vc++下怎么操作呢? 我重新编译了OpenNETCF.Desktop.Communication这个,用com的方法没有实现成功。 虽然能生产tlb文件,但是用com方法调用的 ...… 查看全部问答> |
|
在创建wince平台时,编译时,出现SMDK2410 - 1 error(s), 0 warning(s),在build.log出现:\'findstr\' 不是内部或外部命令,也不是可运行的程序 或批处理文件。… 查看全部问答> |
|
向高手求教EVC4连接不上模拟器的问题,有详细说明,急盼eeworld上的高手帮忙!!!!! 我的WinCE开发平台的环境设置: PC操作系统:Windows Xp home; evc环境:evc4+sp3+sp4+ActiveSync4.5+standardsdk+standardsdk4.2+ppc2003sdk+Windows mobile second edtion image+EmuAsConfig; 问题一:一开始创建工程的时候,选择ppc2003的Appwi ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:14 编辑 谁有lm3s9792 PCB板啊?谁有lm3s9792 PCB板啊?谁有lm3s9792 PCB板啊? … 查看全部问答> |
|
本帖最后由 qwqwqw2088 于 2017-4-17 10:19 编辑 本文介绍的是有关锂电池组保护板均衡充电基本工作原理,在采用单节锂电池保护芯片设计的且具备均衡充电能力的锂电池组保护板,示意图如图1所示。其中:1为单节锂离子电池;2为充电过电压分流放电 ...… 查看全部问答> |




