登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 51单片机之LCD1602程序编写详解

[复制链接]
发表于 2023-2-10 17:02:21 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 51单片机
学习安排: LCD1602
开始时间: 2023-01-16
结束时间: 2023-02-16
前言:           1. LCD1602对于初学者可以说是比较重要的,他可以帮你进行程序的调试,让你知道某个变量在某个时间的值,也可以让你显示一些有意思的东西,以下来说明如何使用它
           2.部内的板子在第一次使用LCD1602时,需要手动调节一下旁边的对比度,调到显示黑色的方块

          3.下面提到的ASCLL码表请自行查询了解
一、LCD1602的介绍(了解即可)

1.png
大体知道底层是ASCLL码以及显示字符即可


二、涉及到的引脚及电路
2.png 3.png
一 一对应着看就行,右图VSS对应VCC,名字无所谓,VO是对比度,前言提到过,A和K不用管,DB0-DB7是数据位,负责数据的输出和输入,RS和RW负责给他们赋值而达到一定的目的,我们不从LCD里读东西,所以RW=0,RS就要根据你想写的东西来赋值(下面第六大点会用到)实际上我们要管的只有P0口(DB0-DB7),E,RS和RW,程序里也只会体现这四个。


三、内部结构(了解即可)
4.png
大概知道其实LCD不止16列,其实有40列,但是屏幕只能显示16列,后面可以通过移动屏幕的代码让他显示17-40列的内容,但一般也不会这么用
然后就是字模库,相当于内置了一个ASCLL表,他内部会根据你写的程序显示字符


四、时序结构
5.png     前两个不用管,看下面两个,这个表结合上面第二大点的表,就能看出,不管是写数据还是写指令都要经历E=1再E=0这个过程,我取个名字叫使能过程,这个过程是在数据位(P0口)接受到数据之后进行的,且在数据接受完成前结束,这样数据才是有效数据,我们的代码待会也会根据这个写。



五、指令集
6.png
给LCD发对应的指令就能达到图中对应的效果,标红的指令是经常用到的,用16进制输入进去即可,AC可以理解为光标,即数据输入的位置,下面的程序会用到这些指令


六、程序
1.首先先把写指令和写数据的代码写出来,这是最基本的代码
100.png
7.png
delay是防止单片机运行过快而直接跳过对E(图中为EN)的赋值,前者为写指令,后者写数据

2.然后进行LCD的初始化

8.png
上面刚写的写指令程序这里马上就用到了,这些指令根据指令集查询即可,其中0x38要多写几遍,否则可能会跳过这个指令。使用LCD时,要在main函数里提前初始化


3.光标位置
9.png 12.png
函数里输入行和列,然后通过发送图中的指令(没有为什么),就能让光标显示在你想要的行和列,column-1是因为地址是从00H开始的,你输入1列他会给你显示在第二列,所以在程序里提前减1,又因为第二列地址是从40H开始的,所以else里面的指令要加上40H。

4.显示字符或字符串
13.png
str代表字符串,这两个很简单就不再解释了。由于LCD底层就是ASCLL码,所以使用Data函数时,括号里可以直接写变量的名字,或者你具体想显示的字符

5.显示数字
15.png
第一个函数不多讲解了,应该能看明白,第二个函数中len表示数字的位数,Data括号中‘0’+是为了从ASCLL表中0这个字符的地址开始往下找对应的字符,而加号后面的内容相当于一个正序的整数分解的过程,举个例子,要显示789这个数,先把7提取出来即789/100=7.00(c语言不保留小数,除非你定义浮点数),7.00%10=7,这样就提取出了7,以此类推

6.其他
有了以上的内容,你就可以根据自己的需求写写其他代码了,比如如果你想显示负数,你可以加个判断If什么什么,显示个负号


end.
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表