单片机中lcd12864的时序程序
如下是单片机对lcd12864进行写指令的时序图,时序图不是很能看懂:按照我的理解貌似是:(就是按照时序图中的时间轴把相应的引脚的电平输出)。RS=0;RW=0;E=0;...
如下是单片机对lcd12864进行写指令的时序图,时序图不是很能看懂:
按照我的理解貌似是:(就是按照时序图中的时间轴把相应的引脚的电平输出)。
RS=0;
RW=0;
E=0;
延时
E=1;
P0=DATA;//这时条件满足,数据有效;
延时
E=0;
可是程序是这样的:
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
我有点迷糊,希望大家能给我解释下,谢谢了; 展开
按照我的理解貌似是:(就是按照时序图中的时间轴把相应的引脚的电平输出)。
RS=0;
RW=0;
E=0;
延时
E=1;
P0=DATA;//这时条件满足,数据有效;
延时
E=0;
可是程序是这样的:
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
我有点迷糊,希望大家能给我解释下,谢谢了; 展开
展开全部
LZ 迷糊的只是 应该 先 En=1 再 P0=DATA, 还是 先 P0=DATA 再 En=1;
En 是 LCD 使能端,En=1 表示 使能 LCD 操作,En=0 表示 禁止 LCD 操作。
程序前面 已经 对 RS 跟 RW 进行了选择(写指令),如果 这时候 开启 En 使能端,那么 LCD 将 允许 该操作(写指令),同时 将 数据端P0 的数据 读取到 LCD,这个过程的时间 是 ns 级别 的,程序还没来得及 将 DATA 的 数据 送到 P0 ,就已经发生了 数据被读取的操作,也就是说,LCD 读进去的数据,并不是 LZ 想要的 DATA 数据,而是 之前 的数据,很可能是随机的。这将导致LCD 执行了错误 的命令,或是 无法识别命令。
所以 ,要在使能端 En=1 前,先将 数据 DATA 放到 数据口P0,再 使能 En,如此 LCD 就会 读取到 正确 的命令数据了。
En 是 LCD 使能端,En=1 表示 使能 LCD 操作,En=0 表示 禁止 LCD 操作。
程序前面 已经 对 RS 跟 RW 进行了选择(写指令),如果 这时候 开启 En 使能端,那么 LCD 将 允许 该操作(写指令),同时 将 数据端P0 的数据 读取到 LCD,这个过程的时间 是 ns 级别 的,程序还没来得及 将 DATA 的 数据 送到 P0 ,就已经发生了 数据被读取的操作,也就是说,LCD 读进去的数据,并不是 LZ 想要的 DATA 数据,而是 之前 的数据,很可能是随机的。这将导致LCD 执行了错误 的命令,或是 无法识别命令。
所以 ,要在使能端 En=1 前,先将 数据 DATA 放到 数据口P0,再 使能 En,如此 LCD 就会 读取到 正确 的命令数据了。
更多追问追答
追问
奥,原来是这样!那先送数据再使能,岂不是和时序图中的顺序(先使能再送数据)不同吗?难道时序图中不是这个意思吗?
追答
时序图的意思是:在 使能端En 有效前,DB0-DB7 的数据 是 没作用的,当En 使能有效后(过了斜坡),DB0-DB7 才是 有效数据(阴影部分,Valid data 的中文翻译是:有效数据)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询