1602液晶的控制问题
但用汇编的时候,却只有用上升沿才可以正常工作(clr E , setb E)
实在是很困惑,只是用的语言不同,为什么需要完全不同的写法,或者说是理论?
小编你解决了?同求
没法通过实验解决,我汇编试了下降沿,C语言试了上升沿,都无法工作,只有我主楼说的那2种情况可以,实在是搞不懂
这与使用的编程语言无关。
问题描述的很烂,没法回答。建议先学会表述问题,再提问,被人回答的概率会高一些。至少我见了会回答
手册上肯定不会错的,看你的整体逻辑图,不要只看一个,几次下来才能知道
可能是你用的单片机速度比例程中的硬件速度快了,适当增加延时看看。(程序是建立在硬件基础上的,你不了解人家,怎样和人家正常沟通呢?)
busy:
mov p0,#0ffh
clr rs
setb rw
clr e
nop
setb e
jb p0.7,busy
ret
这是判忙部分的程序,其他的写指令或写数据,对e都用的同样的写法
我觉得能工作的原因可能是这样的:
因为在闲暇时E始终都是置1的,所以在执行下一个指令时(写数据,写指令或判忙),会先置0,就会产生一个下降沿,就在此时LCD工作,之后又置1,恢复常态
但是这却不能解释为什么我在闲暇时E置0,在执行指令时先置1再置0无法工作的情况。有可能是因为单片机速度太快,置1之后迅速置0,电压攀升没有达到规定的高电平的数值就已经在此置0,所以单片机判定不出这是一个下降沿,等我回去实验一下
有结果了吗?多加几个 NOP
实验了,加了延时还是无法工作
因为我用C语言写的时候也没有加任何延时,所以我觉得可能问题不出在这里
void LCDwaitready(void)
{
unsigned char sta;
DB = 0xff;
RS = 0;
RW = 1;
do
{
EN = 1;
sta = DB;
EN = 0;
}while(sta & 0x80);
}
这里C51 的判忙函数
看你的C程序,我的理解是检测的上升沿。
所以,“按下降沿来判断操作数据”,是手册上的原话?还是你根据图形或程序,自己说的?
这个是判忙标志的时序图

应该是由低到高跳变后检测
学习啊。 太学习了。
按手册上来准没错,
回去看看手册或者相关历程,1602是比较常用的,IO口控制的屏应该不难
出现什么什么问题,什么现象是什么样子的,建议直接用别人的程序,毕竟高手写的东西还是比较好
