微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 1602液晶的控制问题

1602液晶的控制问题

时间:10-02 整理:3721RD 点击:
按手册上说,是按下降沿来判断操作数据的在用C语言写的时候,确实如是(E = 1; E = 0)
但用汇编的时候,却只有用上升沿才可以正常工作(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口控制的屏应该不难

出现什么什么问题,什么现象是什么样子的,建议直接用别人的程序,毕竟高手写的东西还是比较好

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top