前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >STC51(LCD1602全解析.上)

STC51(LCD1602全解析.上)

作者头像
云深无际
发布2021-01-21 15:02:35
7060
发布2021-01-21 15:02:35
举报
文章被收录于专栏:云深之无迹云深之无迹

首先把今天主角看看,一块显示器~

对一个显示器,现在这种的屏幕好像不是多普遍了,很多年前。

泛滥~~~

不管怎么说,还是极具性价比的东西,值得我们学习!

那1602是个啥意思?一行可以显示16个字符

可以显示2行的意思

这里放一点简单的参数吧

首先我们看一下要插的地方,16个脚。比较浪费IO资源

我们看看原理图。引脚就是2种

电源+控制。然后是两种单片机的IO共同在工作,我第一次看见这种的搞法

这个是STC89C52上面的原理图,使用了部分的IO脚

这个是第二块单片机,STC15W408AS。用了P2的很多IO脚

我喜欢串口,所以,找到了这个芯片上面的串口引脚P3.0,P3.1

今天才发现。。。里面有两个单片机。有点厉害

这个STC15的单片机,只有一个1500多页的大型数据手册

我找到了这个芯片的一些基本的参数,你看有flash,EEPROM,有UART,A/D,PWM等。就两块五的芯片要什么自行车

还有这个CMP+的功能

具体你可以看数据手册获得

这个是我在数据手册里面找到,看15,16 的串口引脚。下载程序用

在我们的原理图里面也是这个串口

接下来的USB转TTL,串口端也是接的这个口子

我们既然有两个单片机就得研究一下这个串口的下载电路‘

一个USB母座,4脚的。两脚电源线,两脚数据线。载再与我们的CH340G芯片相连接。

然后经过两个稳压芯片

我们的显示器调节亮度的电位器在这里

与倒数第二个引脚相连

将引脚先扔上来,因为写程序要用

我们最后再看一遍丝印图,看清楚这些引脚之间的连接情况

11个引脚的连接情况

代码语言:javascript
复制
#define lcdPort P2 //LCD1602双向数据端口
代码语言:javascript
复制
sbit RS = P4^0;
sbit RW = P4^1;
sbit EN = P4^4;
sbit PSB = P4^6;

这个是我们的主单片机需要用到的IO口,一共4个

这里想插一句这个

就是你不要它的第二功能就勾上,普通的IO操作就行

这个回答就说的很好了

这个回答也很好,加起来就完整的回答了

先显示一个A,硬件ok。接下来开始漫长的语言表达


既然是单片机通过IO脚控制了显示器,那我们分析的过程不妨就分为,控制端与受控端。很明显是屏幕被安排了,那我们就分析它。控制其实在数字系统里面就是一种协议,就是双方的约定,你遵守,我也遵守。举个例子吧,这个例子假设就是打电话,硬件的协议先不说,就说上层的“沟通协议。你打通电话,你得说个喂吧?对面说你好,你是?你说你是xxx。对面说:哦哦,是你。很少有人火急火燎的听完嘟嘟声就可以巴拉巴拉,那没有信号怎么办?其实单片机也是这样,连接好以后会问显示器,你准备好了没有?显示器回应:老哥我好了。这个专业一点怎么说?叫初始化,init。好了以后该做啥做啥。那这个1602是个显示器,干的什么活?

  1. 显示个东西出来
  2. 在哪里显示这个东西、

这两个内容很显然是单片机的工作,发出控制命令。

此时我们的工作就是要解决这三个问题啦!


这个该怎么办呢?此时我们就只能看数据手册来寻求答案啦!

如果此时就一堆源码,我觉得你也受不了。我们继续看生活中的例子。如果是你当面叭叭,直接声波传输。如果远了的就得借助于通信设备叭叭了,那么就是传输的信号。

此时就归结到了这个问题上面


那免不了又要说物理的连线

1,2,15,16

可以看到这4个脚是电源的引脚,我们不需要关心

那剩下的10根线就是主角了


那咋控制呢,就是看数据手册。

这个地方做个比喻,这个

器件就好像是一个房子,房子的主人和外面要进来的人有个约定,比如敲4下,第一下是用10N(牛)的力敲门的左上角一下,第二下是用100N的力敲中心,最后两下必须在2s内用140N的力敲左上角。别问为什么,这就是器件的沟通法则,而且这个主人就是这么死板,这么一视同仁。你对得就是可以打开,错的敲法就是不开。所以你得100%的按照器件的使用规则来通信。这个敲法在哪里,在数据手册。这个过程叫初始化或者是使能器件,或者就是启动器件,界限不明朗,懂这个意思就行。

这个就是初始化要干的事情

配置里面先写这个数据类型的重新定义

一开始我们就得写一个判断这个器件是不是忙状态的函数

英文单词是temporary,临时的意思,在单片机里tmp1和tmp2是暂存器。

临时存放一些东西。

8位,一个是1,一共8个IO都是1

OxFF=1111 1111

一起都设置为8位,都是输出的情况

看输出的栏目,都是1位。直接写

首先我们得写一个可以写指令的函数

在程序内部是这样的一种写法

这是并行的方式,因为你可以看到我们用了10根线来干这个活

这个是串行的方式,用时序来控制

这个是你选择对应的通信方式需要的IO个数


延时部分好说,直接ms延时或者是nop语句。

那现在的问题是显示器怎么知道你的单片机引脚信号是命令还是数据呢?

(流转的就是这俩种东西)。

LCD1602会看RS

RS信号的高低情况

高H为数据,低L为指令

时序图必须好好说说


  1. 左边得框是某引脚得标识,表示此图体现该引脚得时序变化
  2. 交叉部分是电平得变化
  1. 表示高低电平
  1. 这个菱形灰色得,数据有效
  2. 从左到右看,时间在增长

RS为低得话,显示器知道是要给我指令了,至于是指令还是数据就是另一个事情。读写得话看RW,低为写,高为读。

写/读,指令/数据.都有了,此时怎么传输数据。通过P2来传输,比如0x45,放P2口,显示器就把这个指令拿过来,写入了。

但是还有一点,就是你进了屋子还不能乱动,需要获得上一级得同意才可以,EN端口闪亮登场

在RS,RW都拉低得情况下

EN脚拉高,芯片此时才正式启动

这个是完整得代码

这个是一开始得时序

三个低。0,0,0.

接着就是这个传参数cmd给P2得端口,写进去

空语句停留1us

此时EN=1,使能器件

停留1us

将使能得EN拉低,关闭器件。继续nop延时

这个函数是让LCD写一个命令进显示器里面去执行

延时时间看这里

写数据就一样了,就是RS电平是高

这个是实实在在得传输一个指令进去

与上面得区别是,上面得是让你写,开了这个口中,这个是你王口子里面送得小包裹。

这就是我们得指令,可以包装好直接使用

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档