这次我来分享一下我的LCD1602的编程经验:

先说明一下,我下面要说的LCD1602的芯片驱动是HD44780,如果你们的LCD1602驱动芯片不是HD44780,那么下面的内容是不适用的。

我对LCD1602的整体理解

这里说一下我对LCD1602的整体理解哈,LCD1602是一个可以显示两行字符的LCD显示器,每一行可以都写入40个字符,但是每行都只有前16个字符可以显示,每行后面的24个字符无法立即显示,只说不容易明白,下面看一下示意图:

1489981601295097458.jpg (77.2 KB, 下载次数: 98)

2017-3-20 12:24 上传

另外LCD1602只能显示字符,数字和一些简单的符号,是无法显示汉字的,切记。

LCD1602引脚:

然后再说一下引脚,每当学习一个芯片或者模块,最先要了解的就是引脚:

1489981601420057235.jpg (82.17 KB, 下载次数: 108)

2017-3-20 12:24 上传

由于我们现在只是学习怎么编程,所以电路的连接我就不讲了,下面说一下与编程有关的引脚:

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读时序:

1489981601639008721.jpg (65.38 KB, 下载次数: 94)

2017-3-20 12:24 上传

读函数的源码我没写,毕竟这个几乎用不到。

用图中可以看出:

RS引脚按照你的读取什么而定,读取数据就高电平,读取命令就是低电平;

RW引脚自然就是高电平了,因为我们要读嘛;

然后再往后就是E引脚了,我们在读取命令或者数据的时候,必须要先使能这个器件,所以E引脚要置为高电平;

最后D0到D7就是读取的数据了,我们找个变量数组保存起来就行了。

虽然读时序讲完了,但是在实际开发中我们几乎不需要进行读操作,我想这时有人就会说了:不是要读取忙标志吗,那不就要进行读操作了吗?的确是那样,但是LCD1602的速度是纳秒级别的,而51单片机是毫秒级别的,所以基本不需要读取忙标志,只要微延时就行了。

如图:

1489981601701033698.jpg (87.6 KB, 下载次数: 110)

2017-3-20 12:24 上传

LCD1602写时序:

1489981601763037667.jpg (52.55 KB, 下载次数: 106)

2017-3-20 12:24 上传

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

1489981601873012435.jpg (93.82 KB, 下载次数: 90)

2017-3-20 12:24 上传

【注】在函数里面我用了两种方式,并4口和并8口

下面说一下最重要的写操作时序,从图中可以看出:

RS引脚按照你的读取什么而定,读取数据就高电平,读取命令就是低电平;

RW引脚自然就是低电平了,因为这次我们要写嘛;

然后再往后就是E引脚了,我们在读取命令或者数据的时候,必须要先使能这个器件,所以E引脚要置为高电平;

最后D0到D7就是写入的数据或者命令了。

LCD1602过程

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

1489981601951026446.jpg (81.97 KB, 下载次数: 107)

2017-3-20 12:24 上传

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

1489981601997090234.jpg (167.38 KB, 下载次数: 105)

2017-3-20 12:24 上传

大家如果想看懂的话就从上往下一步一步地看,然后就明白为什么初始化要像上面那样写了。

【注】很多初始化的版本都可以成功初始化,我说的那个仅仅是最正规的而已,个人喜好,只要可以初始化成功就可以了。

最后写好LCD1602的头文件,然后LCD1602的函数库就做好了,当然我们没写读函数,这些你想写的话自己加上去就行了。有了这个函数库,以后用LCD1602的时候直接调用就行了,多方便。

本文转载自:嵌入式开发心得

lcd1602c语言编程,C51单片机LCD1602编程经验分享相关推荐

  1. 云大计算机831参考资料,云南大学2016年考研英语语言文学专业考研初试复试经验分享-CallmeSpell...

    云南大学2016年考研英语语言文学专业考研初试复试经验分享-CallmeSpell 2017-03-09 15:57:31 作者:CallmeSpell 来源: 浏览次数:100 网友评论 0 条 总 ...

  2. c51单片机c语言程序,C51单片机的C语言程序设计.ppt

    <C51单片机的C语言程序设计.ppt>由会员分享,可在线阅读,更多相关<C51单片机的C语言程序设计.ppt(44页珍藏版)>请在人人文库网上搜索. 1.2020/8/7,1 ...

  3. 51单片机c语言秒表,C51单片机秒表计时(C语言).doc

    C51单片机秒表计时(C语言).doc 南开大学滨海学院C51嵌入式软件设计(C语言) 题目计时秒表 l 功能描述本设计实现在99秒内的秒表计时,一个按键实现开始.暂停.复位.l 原理概述P1接四位七 ...

  4. python语言表白超炫图形_经验分享 篇二:三分钟教你用Excel制作各种尺寸、底色的证件照...

    经验分享 篇二:三分钟教你用Excel制作各种尺寸.底色的证件照 2018-12-29 07:00:00 654点赞 7174收藏 245评论 一.前言 继上一篇用PPT制作了证件照以后 有的值友反应 ...

  5. c51单片机时钟c语言程序设计,51单片机C编程(六、定时器时钟显示时分秒)

    //编程:jumpmysoul #include #define ulong unsigned long char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x8 ...

  6. 如何用c语言对51单片机进行编程,C语言在51单片机编程中的应用技巧

    随着单片机硬件性能的提高,编写应用程序更着重于程序本身的效率. Franklin或KEII.C51交叉编译器是专为51系列单片机设计的一种高效的C语言编译器,用其开发的应用程序易于维护,可移植性好,是 ...

  7. 脉冲宽度测量程序 c51 c语言,基于C51单片机和LCD1602显示的超声波测距仪C语言程序...

    ; stringBuf=stringBuf[length-i-1]; stringBuf[length-i-1]=t; } stringBuf[length]='\0'; return length; ...

  8. 单片机设计时钟程序c语言,基于.C51单片机的数字时钟课程设计(C语言,带闹钟).pdf...

    - - .. -- 单片机技术课程设计 数字电子钟 学院 : word 可编辑 . - - .. -- 班级 : 姓名 : 学号 : 教师 : 摘 要 电子钟在生活中应用非常广泛 ,而一种简单方便的数 ...

  9. eeprom和编程器固件 k2_实战经验分享,编程器救砖修复k2p路由器,恢复无线信号和MAC...

    前面连续写过多篇文章,介绍了无线路由器的刷机方法,root办法.刷breed办法.备份无线校准参数等.当路由器没有备份无线校准参数,而彻底成砖后,如何救砖呢?按说刷机前彻底损坏,特别是固件丢失等故障, ...

  10. 延时100ms c语言程序,C51单片机延时时间的计算方法解析

    C程序中可使用不同类型的变量来进行延时设计.经实验测试,使用unsignedchar类型具有比unsignedint更优化的代码,在使用时应该使用unsignedchar作为延时变量.以某晶振为12M ...

最新文章

  1. 发布一个用于WinCE的矢量图控件
  2. OpenMP并行化实例----Mandelbrot集合并行化计算
  3. vue 获取元素在浏览器的位置_JavaScript获取窗口位置和元素坐标(兼容版)
  4. Spring注解编程基石(二)
  5. C++的四种强制类型转换
  6. java double精确比较,Java float比double更精确?
  7. 数据分析之 缺失值分析
  8. phpcmsV9 关键词keywords删除、替换与修改
  9. STM32驱动LCD原理
  10. Jquery弹出层插件,非常好用绚丽Lee dialog 1.0
  11. 批量删除Cookie(实用)
  12. springmvc json串的null值替换为空值
  13. java List 排序 Collections.sort()
  14. Flutter BuildOwner之inactive Elements浅析
  15. oracle 归档模式 ASM,oracle rac启用归档模式
  16. 诛仙服务器 修改技能伤害,《诛仙3》技能调整优化【 技能修改·天脉】
  17. CentOS 7上搭建安全、容灾、高可用的etcd集群
  18. Java阿拉伯数字转换为中文大写
  19. 深入理解GO语言:map结构原理和源码分析
  20. 【Pytorch分布式训练】在MNIST数据集上训练一个简单CNN网络,将其改成分布式训练

热门文章

  1. 软件测试缺陷报告分析,测试报告中的缺陷分析和测试结论应该怎么写?
  2. 过来领你的Bug之“缺陷分析“篇
  3. Java笔试面试-算法常用面试题
  4. 《ABAQUS 6.14超级学习手册》——1.5 ABAQUS帮助文档
  5. 星环科技TDH8.0使用必读2: 10种数据模型全支持 未来属于多模型大数据平台
  6. iphone11京东商品评论分析
  7. python 提取百度网盘下载_百度网盘直链提取工具下载
  8. 【ANSYS命令流】定义单元类型与实常数
  9. hive+hbase学习手册
  10. Quartz 在线Cron表达式