标题: 关于51单片机液晶写入数据或者命令的时序问题 [打印本页]

作者: pinenut    时间: 2018-8-1 21:38
标题: 关于51单片机液晶写入数据或者命令的时序问题
这是一个1602液晶的时序图
前提:向1602输入“写命令”,所以设置RS=0,RW=0,E=0;由于本时序延时的时间为纳秒级,远远小于指令周期,则未写入延时函数。
例程给的程序:
RS=0;
RW=0;
DB=   ;
E=1;
E=0;
【问题】:为什么只写了使能端E的下降沿和上升沿,为什么不写RS和RW的上升沿和下降沿?
所以我写的时序是:
RS=0;
RW=0;
E=0;
DB=  ;
RS=1;
E=1;
RS=0;

我本人的思考是:RW和RS是在lcd内部自动变化的,所以不用把上升沿和下降沿的过程写给单片机。但是LCD时序图中RS RW E三个都有变化,为什么只有E的上升沿和下降沿要写在程序里。我以为是lcd内部的设置,就去找了一下数据手册,但是并没有看到什么合适的信息。
所以我想知道,如果RW和RS真的是在传输数据时自动变化的,那以后在遇到其他时序图时,要怎么区分是模块内部自动变化的还是需要编写程序给单片机的?
如果不是我想的这个样子,那应该是什么样子?



1602时序图.PNG (19.68 KB, 下载次数: 54)

1602时序图.PNG

作者: 杨雪飞    时间: 2018-8-2 08:42
首先写命令写数据是一个子程序,会反复不断执行,是反复执行的。每执行一次RS判断是读写数据还是读写命令,判断完之后开始准备数据或指令的数据,EN=1时开始写,EN=0时结束,子程序执行完毕,下一次再读写重复这样的操作。所以不能再重复在子程序中写RS   RW。时序图是判断他们置高低还有先后的顺序,而且要按要求控制在时序图时间内完成操作才能正确写入。并不是让你按照时序图微妙不差的完成各个引脚的高低转换。

作者: 杨雪飞    时间: 2018-8-2 08:46
RS =   ;判断命令还是数据
RW =  ;判断是读还是写

DB =       数据准备阶段,在寄存器。

EN = 1 ;开始写入或者读出;
EN = 0 ; 结束写入或者读出;

有的高速单片机需要加延时。
RS    RW为前置判断,所以时序提前,判断完之后就往下操作,无需再转换电平。
作者: 杨雪飞    时间: 2018-8-2 08:48
我也是个老年初学者,只能按自己的理解跟你说这么多,不对的地方还请论坛大神斧正。
作者: omikeai    时间: 2018-8-2 11:13
当你确定好是传数据还是命令,读还是写的时候,RS和RW是传输一个字节内不会改变的
而E是传输每一个位的时候控制的
作者: 飞翔的Cat    时间: 2018-8-2 11:48
个人感觉E是上升或下降沿触发的,类似于触发器,而别的端口则只是电平控制,只是一个0 1的信号
作者: pinenut    时间: 2018-8-2 12:38
omikeai 发表于 2018-8-2 11:13
当你确定好是传数据还是命令,读还是写的时候,RS和RW是传输一个字节内不会改变的
而E是传输每一个位的时 ...

在传输数据的时候rs和rw不会变吗?可是时序图上rs和rw有变化啊
作者: omikeai    时间: 2018-8-2 13:14
pinenut 发表于 2018-8-2 12:38
在传输数据的时候rs和rw不会变吗?可是时序图上rs和rw有变化啊

那是一个字节传输完了,你要调整到数据或者命令,又或者读或写的时候才会改变,只有E时每位都要改变一次的
作者: waynehuge    时间: 2018-8-2 14:01
按照我的理解:
RW是指示读写信号的,必须要有
E信号是用来锁存数据到LCD显示的下降沿信号,亦即你传输数据的时候只是传输到了lcd的控制器里面,并没有更新到LCD;
在写入的时候,LCD并不关心RS信号;
严格来说例程是不太严谨的,考虑到锁存过程中的干扰,应该在锁存后加一个RW=1的信号
你可以试试下面的写入操作
RW=0;
DB=   ;
E=1;
E=0;
RW=1;
也是可以的
作者: omikeai    时间: 2018-8-2 15:12
pinenut 发表于 2018-8-2 12:38
在传输数据的时候rs和rw不会变吗?可是时序图上rs和rw有变化啊

时序图是把整个发送过程描述出来,一个字节发送完后,程序再重新从发送那里开始,不久等于RS和RW 变化一次了么
作者: 杨雪飞    时间: 2018-8-2 15:49
pinenut 发表于 2018-8-2 12:38
在传输数据的时候rs和rw不会变吗?可是时序图上rs和rw有变化啊

两个水桶,一个叫命令,一个叫数据。RW的0或者1是决定是往里放水还是从里边取水出来,RS的0或者1是决定这个取水或者放水是对命令水桶操作还是对数据水桶操作,这两个决定完了可以不用管了,然后EN就是下达的开始干的命令,然后开始在一个周期内,放多少水或者取多少水,周期结束,EN归0,这个周期就是八个脉冲,这八个脉冲分别对D0---D7操作,是给高还是低电平。

这就是一个操作过程,所以,RS   RW只是前边的决策,后边实施的时候他就不能再改变了。
作者: lgjdqm    时间: 2018-8-2 16:19
51程序运行本身需要时间
作者: lgjdqm    时间: 2018-8-2 16:21
杨雪飞 发表于 2018-8-2 15:49
两个水桶,一个叫命令,一个叫数据。RW的0或者1是决定是往里放水还是从里边取水出来,RS的0或者1是决定这 ...

讲评头头是道




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1