lcd1602c语言编程,C51单片机LCD1602编程经验分享
这次我来分享一下我的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编程经验分享相关推荐
- 云大计算机831参考资料,云南大学2016年考研英语语言文学专业考研初试复试经验分享-CallmeSpell...
云南大学2016年考研英语语言文学专业考研初试复试经验分享-CallmeSpell 2017-03-09 15:57:31 作者:CallmeSpell 来源: 浏览次数:100 网友评论 0 条 总 ...
- c51单片机c语言程序,C51单片机的C语言程序设计.ppt
<C51单片机的C语言程序设计.ppt>由会员分享,可在线阅读,更多相关<C51单片机的C语言程序设计.ppt(44页珍藏版)>请在人人文库网上搜索. 1.2020/8/7,1 ...
- 51单片机c语言秒表,C51单片机秒表计时(C语言).doc
C51单片机秒表计时(C语言).doc 南开大学滨海学院C51嵌入式软件设计(C语言) 题目计时秒表 l 功能描述本设计实现在99秒内的秒表计时,一个按键实现开始.暂停.复位.l 原理概述P1接四位七 ...
- python语言表白超炫图形_经验分享 篇二:三分钟教你用Excel制作各种尺寸、底色的证件照...
经验分享 篇二:三分钟教你用Excel制作各种尺寸.底色的证件照 2018-12-29 07:00:00 654点赞 7174收藏 245评论 一.前言 继上一篇用PPT制作了证件照以后 有的值友反应 ...
- c51单片机时钟c语言程序设计,51单片机C编程(六、定时器时钟显示时分秒)
//编程:jumpmysoul #include #define ulong unsigned long char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x8 ...
- 如何用c语言对51单片机进行编程,C语言在51单片机编程中的应用技巧
随着单片机硬件性能的提高,编写应用程序更着重于程序本身的效率. Franklin或KEII.C51交叉编译器是专为51系列单片机设计的一种高效的C语言编译器,用其开发的应用程序易于维护,可移植性好,是 ...
- 脉冲宽度测量程序 c51 c语言,基于C51单片机和LCD1602显示的超声波测距仪C语言程序...
; stringBuf=stringBuf[length-i-1]; stringBuf[length-i-1]=t; } stringBuf[length]='\0'; return length; ...
- 单片机设计时钟程序c语言,基于.C51单片机的数字时钟课程设计(C语言,带闹钟).pdf...
- - .. -- 单片机技术课程设计 数字电子钟 学院 : word 可编辑 . - - .. -- 班级 : 姓名 : 学号 : 教师 : 摘 要 电子钟在生活中应用非常广泛 ,而一种简单方便的数 ...
- eeprom和编程器固件 k2_实战经验分享,编程器救砖修复k2p路由器,恢复无线信号和MAC...
前面连续写过多篇文章,介绍了无线路由器的刷机方法,root办法.刷breed办法.备份无线校准参数等.当路由器没有备份无线校准参数,而彻底成砖后,如何救砖呢?按说刷机前彻底损坏,特别是固件丢失等故障, ...
- 延时100ms c语言程序,C51单片机延时时间的计算方法解析
C程序中可使用不同类型的变量来进行延时设计.经实验测试,使用unsignedchar类型具有比unsignedint更优化的代码,在使用时应该使用unsignedchar作为延时变量.以某晶振为12M ...
最新文章
- 发布一个用于WinCE的矢量图控件
- OpenMP并行化实例----Mandelbrot集合并行化计算
- vue 获取元素在浏览器的位置_JavaScript获取窗口位置和元素坐标(兼容版)
- Spring注解编程基石(二)
- C++的四种强制类型转换
- java double精确比较,Java float比double更精确?
- 数据分析之 缺失值分析
- phpcmsV9 关键词keywords删除、替换与修改
- STM32驱动LCD原理
- Jquery弹出层插件,非常好用绚丽Lee dialog 1.0
- 批量删除Cookie(实用)
- springmvc json串的null值替换为空值
- java List 排序 Collections.sort()
- Flutter BuildOwner之inactive Elements浅析
- oracle 归档模式 ASM,oracle rac启用归档模式
- 诛仙服务器 修改技能伤害,《诛仙3》技能调整优化【 技能修改·天脉】
- CentOS 7上搭建安全、容灾、高可用的etcd集群
- Java阿拉伯数字转换为中文大写
- 深入理解GO语言:map结构原理和源码分析
- 【Pytorch分布式训练】在MNIST数据集上训练一个简单CNN网络,将其改成分布式训练
热门文章
- 软件测试缺陷报告分析,测试报告中的缺陷分析和测试结论应该怎么写?
- 过来领你的Bug之“缺陷分析“篇
- Java笔试面试-算法常用面试题
- 《ABAQUS 6.14超级学习手册》——1.5 ABAQUS帮助文档
- 星环科技TDH8.0使用必读2: 10种数据模型全支持 未来属于多模型大数据平台
- iphone11京东商品评论分析
- python 提取百度网盘下载_百度网盘直链提取工具下载
- 【ANSYS命令流】定义单元类型与实常数
- hive+hbase学习手册
- Quartz 在线Cron表达式