标题: 跑马灯亮了,可是八段译码管也会亮,为什么? [打印本页]

作者: tangmj324    时间: 2009-12-7 19:27
标题: 跑马灯亮了,可是八段译码管也会亮,为什么?

关于跑马灯的问题

问:做跑马灯试验时,根据修改程序,跑马灯亮了,可是为什么八段译码管也会逐个亮起来呢?我把跳帽J26,J27拿掉也没有用啊?


作者: admin    时间: 2009-12-7 21:04


 因为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编辑过]

作者: sophya    时间: 2009-12-8 15:48
用个锁存器如何?
作者: admin    时间: 2009-12-9 01:23
2.软件法  就是用锁存器实现的
作者: xiaofei    时间: 2009-12-9 02:09

学习一下


作者: ccusde    时间: 2010-1-14 18:18
我也学习一下,基本明白了
作者: 老湿    时间: 2012-3-18 21:32
mark一下
作者: windwithgone    时间: 2012-3-26 21:02
学习了,多谢多谢,我一直也有同感,今天终于解决了!
作者: graduate108    时间: 2012-4-12 16:30
同志们,我做1602显示,数码管老亮着干扰,按照你们的方法都没办法把数码管显示关掉,求高手指点呀
作者: xuqinghua    时间: 2012-4-12 17:59
关了呗兄弟
作者: liufuguansheng    时间: 2012-4-30 10:46

你好,我不是很明白,为什么只能用p2.7和p1.4,p0能不能帮忙解析下。我是刚买了板子学习的。谢谢啦


作者: 二十出头    时间: 2014-1-21 22:58
其实直接把 51hei.h 复制到工程文件夹里,再在程序里包含,然后调用 guandz() 和 guanled()就可以了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1