历史上的今天
返回首页

历史上的今天

今天是: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的时候直接调用就行了,多方便。


推荐阅读

史海拾趣

BeagleBoard公司的发展小趣事

作为一家以开源硬件为核心的公司,BeagleBoard深知教育和人才培养的重要性。他们积极与学校、教育机构合作,提供教育支持和培训服务,帮助更多的学生了解嵌入式系统开发的魅力。同时,公司还设立了奖学金和竞赛项目,鼓励年轻开发者积极参与创新实践,为行业培养了一批批优秀的人才。

Digitron公司的发展小趣事

为了进一步扩大市场份额,Digitron公司积极寻求与行业内外的企业建立战略合作关系。XXXX年,Digitron公司与一家全球知名的物流公司达成合作协议,为其提供定制化的温度监控解决方案。这一合作不仅为Digitron公司带来了可观的收入,还提高了其在物流行业的知名度。此外,Digitron公司还积极参加国际展会和论坛,与全球客户建立联系,拓展国际市场。

极海半导体(Geehy)公司的发展小趣事

Digitron公司始终将创新作为企业发展的核心驱动力。公司投入大量资金用于研发新技术和新产品,不断提升产品的性能和功能。XXXX年,Digitron公司成功研发出一款具有无线传输功能的数据记录器,用户可以通过手机或电脑实时查看和监控数据。这一创新产品受到了市场的热烈欢迎,为Digitron公司带来了显著的增长。

aconno公司的发展小趣事

品质是aconno公司发展的基石。公司从一开始就注重产品质量和用户体验,从原材料采购到生产工艺,再到产品测试,每一个环节都严格把关。这种对品质的坚持,使得aconno的产品在市场上赢得了良好的声誉。同时,公司还建立了完善的售后服务体系,为用户提供及时、专业的技术支持,进一步增强了用户的信任度和忠诚度。

Heatron公司的发展小趣事

在20世纪初,随着电子工业的蓬勃发展,对高效、可靠电加热元件的需求日益增长。Heatron公司凭借其深厚的技术积累,成功研发出了一种新型的高密度单头电热管,该产品在耐高温、耐腐蚀性能上实现了重大突破。这一技术成果迅速获得了市场的广泛认可,不仅提升了Heatron在电加热器市场的地位,还推动了整个电子行业相关应用的技术进步。

Hisetec Electronic Co Ltd公司的发展小趣事

背景:随着全球化进程的加速,电子产品的供应链越来越复杂,国际合作成为必然趋势。Hisetec Electronic Co Ltd公司敏锐地洞察到这一点,开始实施国际化战略。

发展:公司首先在欧洲设立研发中心,与当地高校和科研机构合作,共同开发新技术。随后,又在亚洲多个国家和地区建立生产基地和销售网络,实现了全球范围内的资源配置和市场覆盖。通过这一系列举措,Hisetec公司不仅降低了生产成本,还提升了品牌知名度,实现了业务的高速增长。

问答坊 | AI 解惑

国外的嵌入式面试题,你做过么?

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 ...…

查看全部问答>

电路板调试

花了2天时间,做了一块负载板,拜托我们专门焊接电路板的大姐焊接完手头上的项目,然后发生了一些事故,待我细细表来。  在上电之前,我仔细检查了电解电容和钽电容的极性(悲剧啊),然后检测了电源的输入电阻,电阻较大,然后测量5V逻 ...…

查看全部问答>

想在LCD里面增加个24小时制

      用的是飞思卡尔的单片机,里面是没有时钟模块的。最麻烦的问题是如果掉电了还要时钟模块继续工作,这样的话是不是肯定要增加干电池?    还有,如果总是发送时间信号给LCD现实的话,单片机是不是忙的过来?…

查看全部问答>

手机独立GSM模块

小弟现需一批GSM模块,希望可以通过回收旧手机,从上面拆取GSM模块使用,以降低成本,但不知哪些品牌和型号的手机是独立GSM模块的,望知道的仁兄知会一声,小弟感激不尽!…

查看全部问答>

怎么用c++ 获得ActiveSync连接状态

如题,有没有相应的事件呢? c#下用这个开源的OpenNETCF.Desktop.Communication可以方便的获得。 在vc++下怎么操作呢? 我重新编译了OpenNETCF.Desktop.Communication这个,用com的方法没有实现成功。 虽然能生产tlb文件,但是用com方法调用的 ...…

查看全部问答>

'findstr' 不是内部或外部命令,也不是可运行的程序

在创建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 ...…

查看全部问答>

谁有lm3s9792 PCB板啊?

本帖最后由 paulhyde 于 2014-9-15 09:14 编辑 谁有lm3s9792 PCB板啊?谁有lm3s9792 PCB板啊?谁有lm3s9792 PCB板啊?  …

查看全部问答>

cyclone三个系列的引脚图

那位仁兄有cyclone的引脚图啊,什么都缺啊 ,先谢谢了…

查看全部问答>

有关锂电池组保护板均衡充电基本工作原理了解

本帖最后由 qwqwqw2088 于 2017-4-17 10:19 编辑 本文介绍的是有关锂电池组保护板均衡充电基本工作原理,在采用单节锂电池保护芯片设计的且具备均衡充电能力的锂电池组保护板,示意图如图1所示。其中:1为单节锂离子电池;2为充电过电压分流放电 ...…

查看全部问答>