找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4401|回复: 12
收起左侧

关于51单片机液晶写入数据或者命令的时序问题

[复制链接]
回帖奖励 30 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次(中奖概率 50%)
ID:278709 发表于 2018-8-1 21:38 | 显示全部楼层 |阅读模式
这是一个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
回复

使用道具 举报

ID:381977 发表于 2018-8-2 14:01 | 显示全部楼层
按照我的理解:
RW是指示读写信号的,必须要有
E信号是用来锁存数据到LCD显示的下降沿信号,亦即你传输数据的时候只是传输到了lcd的控制器里面,并没有更新到LCD;
在写入的时候,LCD并不关心RS信号;
严格来说例程是不太严谨的,考虑到锁存过程中的干扰,应该在锁存后加一个RW=1的信号
你可以试试下面的写入操作
RW=0;
DB=   ;
E=1;
E=0;
RW=1;
也是可以的

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:97554 发表于 2018-8-2 08:46 | 显示全部楼层
RS =   ;判断命令还是数据
RW =  ;判断是读还是写

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

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

有的高速单片机需要加延时。
RS    RW为前置判断,所以时序提前,判断完之后就往下操作,无需再转换电平。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:97554 发表于 2018-8-2 08:48 | 显示全部楼层
我也是个老年初学者,只能按自己的理解跟你说这么多,不对的地方还请论坛大神斧正。

评分

参与人数 1黑币 +100 收起 理由
admin + 100 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:233756 发表于 2018-8-2 11:13 | 显示全部楼层
当你确定好是传数据还是命令,读还是写的时候,RS和RW是传输一个字节内不会改变的
而E是传输每一个位的时候控制的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:382063 发表于 2018-8-2 11:48 | 显示全部楼层
个人感觉E是上升或下降沿触发的,类似于触发器,而别的端口则只是电平控制,只是一个0 1的信号

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:278709 发表于 2018-8-2 12:38 来自手机 | 显示全部楼层
omikeai 发表于 2018-8-2 11:13
当你确定好是传数据还是命令,读还是写的时候,RS和RW是传输一个字节内不会改变的
而E是传输每一个位的时 ...

在传输数据的时候rs和rw不会变吗?可是时序图上rs和rw有变化啊
回复

使用道具 举报

ID:233756 发表于 2018-8-2 13:14 | 显示全部楼层
pinenut 发表于 2018-8-2 12:38
在传输数据的时候rs和rw不会变吗?可是时序图上rs和rw有变化啊

那是一个字节传输完了,你要调整到数据或者命令,又或者读或写的时候才会改变,只有E时每位都要改变一次的
回复

使用道具 举报

ID:233756 发表于 2018-8-2 15:12 | 显示全部楼层
pinenut 发表于 2018-8-2 12:38
在传输数据的时候rs和rw不会变吗?可是时序图上rs和rw有变化啊

时序图是把整个发送过程描述出来,一个字节发送完后,程序再重新从发送那里开始,不久等于RS和RW 变化一次了么
回复

使用道具 举报

ID:97554 发表于 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只是前边的决策,后边实施的时候他就不能再改变了。
回复

使用道具 举报

ID:74868 发表于 2018-8-2 16:19 | 显示全部楼层
51程序运行本身需要时间
回复

使用道具 举报

ID:74868 发表于 2018-8-2 16:21 | 显示全部楼层
杨雪飞 发表于 2018-8-2 15:49
两个水桶,一个叫命令,一个叫数据。RW的0或者1是决定是往里放水还是从里边取水出来,RS的0或者1是决定这 ...

讲评头头是道
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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