右边那个用于插入1602,左边那个电位器(滑动变阻器)用于调节液晶的对比度,转动后,字符的颜色会发生深浅变化。

这样插上去,插反了容易把液晶烧坏。
1602:1行可以显示16个字符,一共两行。
还有1601,0801,0802,12864,12232、、。
12864:图形液晶,横着有128个点,竖着有64个点。要让显示东西,控制矩阵内这些任何的点就会显示图形或汉字。如果是带字库的液晶,写字的时候,直接把汉字赋给液晶的数据口,这些字体就能出来。
1602只能显示数字和字符,即数字、英文字母、符号,所有的asc码,不能显示汉字。
这种液晶就是两色,还有带有灰度值得,可以显示出动画,还有wei 彩的、真彩的就是彩色液晶,也可以由单片机驱动。
液晶比数码管有意思多了,而且比数码管简单。
1602有好几种接口,这里是并行接口。


3VL就是液晶对比度调节。
4RS液晶写数据之前要先接收命令,表示他要干什么,命令是要让液晶内部进行一些设置,数据就是直接要显示的数据。首先命令在什么位置显示什么东西,就像光标闪烁就是命令。H电平接收数据,L电平接收命令。
5RW读写数据,液晶可以写数据,也可以从里面读数据。今天简化一下,就不读数据了。
D0~D7,8位数据口。
15~16不接背光就不亮了。

设计电路板才需要考虑尺寸,所以不看了。

控制器接口这是液晶内部。

要读当前状态是否允许写,比如上一个状态还没有显示出来又写了一个,这就不行,数据会丢失。这是高速操作用的。
我们只看写,1.2:RS=L(选中了命令,命令就是指令),RW=L(写),D0~D7指令码(后面讲,D0~D7可以送指令也可以送数据,由RS决定),E=高脉冲
前者为高脉冲,后者为低脉冲。输出就不管了。
1.3也是读,就不看了。
1.4:RS=H(选中数据),RW=L(写),D0~D7(数据),E=高脉冲。
数字芯片要读懂时序图。

读的就不看了,看写的。

能看到许多都是两条线,那是因为一个是写,一个是读。
我们只看写的,首先RS,RW变低,过一段时间,再给E一个高脉冲,持续一段时间,再拉为低电平,持续一段时间,再将RS、RW变回高。具体写程序再看。
延时多少时间,要看时序参数:

不同厂家操作时序不一样,这里郭天祥说按照长沙太阳人公司(就是上面这些内容的出处)的不能正常工作…..然后看了英文原版的。



我们可以不检测,我们做个延时,等他忙完,在进行第二个操作,可以省不少事情,不至于程序写的麻烦。

看到省略号后面还有,视频中字符是从右侧慢慢移到左边的,实际上就是写到了后面,先全部写完,有一个整屏移动指令,就全都移动出来了。还有别的方向的。但是省略号后面那些不在显示范围内。

5*7点阵:其实每个字符是由5行7列的点阵组成的


要显示东西,肯定要让D=1,光标显示关闭等会我们分别试试看看效果。
N=1,每写一个字节,地址指针自动加1,下一次直接写数据就可以了,N=0,就是倒着往前写。

80字节RAM:00~67。
数据指针,也是指令,要先设置数据指到什么位置,然后再写数据,不能直接写0-27,前面要有个80H+,80H+1地址就是01,80H就是00。


我们写的时候不按照这个,按照自己的方法。
1602和51单片机的接口

这里中间74LS00那里不看,可能是自动写入方法。RD和WR第二功能还没讲,用的时候自己看。


15、16背光,加了一个10Ω电阻,怕直接加5V电压后电流过大把芯片烧坏,用它限流。
D0~D7数据口接了P0口,6接口是使能端,接了P3.4。然后5这个IO口和我们的不一样,因为这里只写,所以视频中直接接了低电平,4是数据命令选择端,接了P3.5,3是偏压信号,接地,液晶显示需要负电压,并用滑动变阻器调节,电压就会变化,内部对比度就会变化。
接下来程序,我们先把光标写出来
注意D0~D7连接着数码管的,写数据时,数码管也会变,实验板是usb供电,同时把数码管和液晶打开,功耗会过大,usb供电电流比较小,功耗不够,液晶就会不亮,所以我们把数码管全部关端,把锁存端关闭就可以。
然后就照着下面的图写就可以了








这里我先尝试按照视频中的电路接法,用的仿真,把RW接地。由于RW一直为低,所以就不需要tSP1的等待时间了

代码是成功的,我们也可以让光标不闪烁,即将0x0f改为0x0e;

但是会发现,前面有一个黑块,这这么回事?
本以为没有初始化光标,所以在init中write_com(0x06)后面加了一个write_com(0x80);结果不行,光标没了...
可能是一开始有数据,我们先清屏一下,加上write_com(0x01)
光标有了,接下来可以写数据了,我们先写一个1

成功并且光标后移1位
如果我们直接写write_com(1)
那么显示就不对。
这里可以看一个手册



这里给出了每个字符对应的16进制数,即asc值。
这就是各个字符的16进制编码,从图中可以看到1的是31,a是41,之前串口通信的时候我们也看到过。
我们写'1'就是给了1的asc
如果我们直接给了0x31,那么也是输出1
如果我们想多输入几个,那么主函数如下
接下来我们写两行,第一行:I LIKE MCU! 第二行:,那么为了简便,我们要用到循环,不过有的人可能会这么写:

一行哪有那么多字符额...
所以我们要换行

如果想让每一个字符出现的慢一点,就把delay加长。
接下来我们让所有字符从右往左移动出来。


之前的不全,少了这个指令
cursor光标,display shift显示移动
在不改变DD RAM的情况下,他会移动光标或显示
00:光标左移
01:光标右移
10:显示左移,光标跟随显示移动
11:显示右移
写一条指令移动一下
首先我们就不能写在00了,就要从10开始
怪异,视频中是0x10,我的必须是0x1c,方向和上面的数据手册相反,下次实验板试试好了
仿真用0x1c,单片机用0x18

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/191916.html