因为led数码管和跑马灯都是用的P0口做数据口,所以会有你说的现象,但是只要我们把led数码管的显示关掉就可以了,但是怎么关呢? 有2种方法搞定这个问题
1.硬件法 拔掉P2.7口的双排针跳线,将远离单片机的一端用杜邦线短路到地,就可以了.(解释:根据电路图分析我们可以知道:共阴的数码管如果将所有位选置1的话,所有的数码管都会处于灭的状态,而单片机上电所有io口上电时都是1,将负责位选的74hc573的锁存端 一直短路到地就可实现)
2.软件法 C语言: 将下面的几行代码复制到 mian函数的开始 P2_7=1; //令位选的U2-747c573直通 P0=0xFF; //P0口全送高电平 P2_7=0; //锁存,也就是U2-74hc573的输出FF从此不变,这样8个共阴数码管的 //公共端都被置为高电平,所以全都会灭掉 P2_6=0; //锁存,原理同上,干掉8*8点阵
解释:同理只是用软件来关闭数码管而已,注意头文件要使用#include"AT89x52.h",这个文件比reg52.h使用更方便因为io引脚都定义好了可以直接以P2_7=1;的形式调用
汇编语言: ORG 0000H setb P2.7 mov P0,#11111111B clr P2.7 clr P1.4 mov P0,#11111100B //点亮最后2个灯 sjmp $ end
小知识:
锁存器就是把当前的状态锁存起来,使CPU送出的数据在接口电路的输出端保持一段时间锁存后状态不再发生变化,直到解除锁定,74hc573就是锁存器
[此贴子已经被作者于2012-4-15 21:50:24编辑过]
|