标题: 关于51Hei开发板板数码管消隐的研究 [打印本页]

作者: a123    时间: 2011-3-17 00:17
标题: 关于51Hei开发板板数码管消隐的研究

  想必大家都看过站长推荐的能配合51hei-5开发板电路的那个视频教程吧。我后来发现了视频里有一个小小的失误在消隐方面,如果完全按照视频教程里的来就会出现数码管暗亮影响美观,于是我在找到原因之后做了一些修改,代码在下面。

下面是本站板子数码管部分的电路图,


//*===============================
//接线要求:P0口分时复用输出,P2.6,P2.7做74ls573片选
//入口参数:0000--9999范围内的二进制或十进制数
//出口参数:无
//函数功能:数码管实现小于9999数的十进制显
//by Oliver  21/03,21:59
//==================================

#include <AT89X52.H>
#define uchar unsigned char

sbit WEI=P2^7;
sbit DUAN=P2^6;
sbit LED=P1^4;
uchar wei[]={0xfe,0xfd,0xfb,0xf7};
uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void delay(void)   //误差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=222;b>0;b--)
for(a=12;a>0;a--);
}
//--------------6ms延时
void undo(void)
{    
WEI=1;
P0=0xff;
WEI=0;
}//使位选失效

void wei_cs(uchar a)
{  
P0=wei[a];//=====关键之处---------------------------------------------------消隐------
WEI=1;
WEI=0;
}
//-------------------位选---------
void duan_cs(uchar a)
{
P0=duan[a];
DUAN=1;
DUAN=0;
}
//-------------------段选---------
void show(int DATA)
{
uchar qian,bai,shi,ge;
uchar duan_flag=0;

if(DATA>9999)
{
LED=0;
P0=0xfe;
}//判断是否超出显示范围
else
{
qian=DATA/1000;
bai=DATA%1000/100;
shi=DATA%100/10;
ge=DATA%10;
//-------------各位分离
if(qian!=0)
{
duan_cs(qian);
wei_cs(duan_flag++);
}
delay();

if((bai|qian)!=0)
{
duan_cs(bai);
wei_cs(duan_flag++);
}

delay();
if((shi|bai|qian)!=0)
{
duan_cs(shi);
wei_cs(duan_flag++);
}

delay();
if(1)
{
duan_cs(ge);
wei_cs(duan_flag);
}
}
}
void main(void)
{
while(1)
show(1545);
}

消隐的研究:隐红的出现:1 ,段码改变时,位码未变,在位码变化之前,会在前一个位码处产生残影;

2 ,位码改变时,如先使P2^7有效,则段码在位码写入之前会在新的位码处产生残影。

消除方法:1, 段码改变之前将位码全部置成无效,此时间间隔仍能满足视觉暂留的要求;

2, 位码改变时,先将下一个位码写入P0口,再使P2^7有效,则可消除此种残
影。
另外,如P0口时序要求更为严格,为保证数据安全性,可将连接图中的OC端统一接一控制引脚,使两片573同时输出使能,即可更好消除残影。

 

视频教程中的代码是:

WEI=1; //开通
P0=wei[a];
WEI=0; //锁存

 

我修改为下面的代码后,残影消失,感觉非常完美呵呵.

P0=wei[a];
WEI=1;
WEI=0;

[此贴子已经被作者于2011-3-17 0:21:47编辑过]

作者: ashan    时间: 2011-5-24 02:45
不错,解释得很详细,难怪我以前一直都没发现可以这样处理.
作者: cir_biochem    时间: 2012-6-9 22:08
 这个程序显示个位后面少了个delay();函数,  个位显示比其他位暗。
作者: 我思故我在    时间: 2014-9-15 15:22
楼主有心了,谢谢分享
作者: 麦浪无垠    时间: 2015-4-2 20:25
总之看完后懂了!
作者: 用户    时间: 2015-4-11 22:16
与这个开发板配合的视频是那个
作者: liusu    时间: 2015-6-5 21:36
赞一个
作者: admin    时间: 2018-2-22 16:40
引用小曾老师:“用锁存器进行数码管显示,遵循的原则,不管送位码,还是段码,都先数据到位,在开锁存在锁存这是第一点,第二点,每显示完一位应关掉所有显示。这样好处进行动态扫描互不干扰,显示的数字非常干净,感觉非常的好,不会有一点阴影”
作者: weilanjuedou    时间: 2019-1-24 17:43
问题困扰了很久终于得到解决,感谢楼主!
作者: lijianbin    时间: 2019-12-21 23:34
已复制,回去研究一下
作者: aqvb5r    时间: 2019-12-27 15:51
用两个573会不会成本太高了?普中的板子用的是138位选+573段选。
作者: 34岁老学生    时间: 2020-2-11 08:39
学习了
作者: 老圆    时间: 2020-2-28 12:56
P0=wei[a]; WEI=1; WEI=0;请问楼主,这句是什么意思,是先送数据后再开通吗?




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