找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14825|回复: 13
收起左侧

关于51Hei开发板板数码管消隐的研究

  [复制链接]
ID:25279 发表于 2011-3-17 00:17 | 显示全部楼层 |阅读模式

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

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

a63.jpg

//*===============================
//接线要求: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编辑过]

评分

参与人数 1黑币 +12 收起 理由
weilanjuedou + 12 很给力!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2018-2-22 16:40 | 显示全部楼层
引用小曾老师:“用锁存器进行数码管显示,遵循的原则,不管送位码,还是段码,都先数据到位,在开锁存在锁存这是第一点,第二点,每显示完一位应关掉所有显示。这样好处进行动态扫描互不干扰,显示的数字非常干净,感觉非常的好,不会有一点阴影”
回复

使用道具 举报

ID:29055 发表于 2011-5-24 02:45 | 显示全部楼层
不错,解释得很详细,难怪我以前一直都没发现可以这样处理.
回复

使用道具 举报

ID:1805 发表于 2012-6-9 22:08 | 显示全部楼层
 这个程序显示个位后面少了个delay();函数,  个位显示比其他位暗。
回复

使用道具 举报

ID:66061 发表于 2014-9-15 15:22 | 显示全部楼层
楼主有心了,谢谢分享
回复

使用道具 举报

ID:74621 发表于 2015-4-2 20:25 | 显示全部楼层
总之看完后懂了!
回复

使用道具 举报

ID:65232 发表于 2015-4-11 22:16 | 显示全部楼层
与这个开发板配合的视频是那个
回复

使用道具 举报

ID:82145 发表于 2015-6-5 21:36 | 显示全部楼层
赞一个
回复

使用道具 举报

ID:386477 发表于 2019-1-24 17:43 | 显示全部楼层
问题困扰了很久终于得到解决,感谢楼主!
回复

使用道具 举报

ID:634141 发表于 2019-12-21 23:34 | 显示全部楼层
已复制,回去研究一下
回复

使用道具 举报

ID:675484 发表于 2019-12-27 15:51 | 显示全部楼层
用两个573会不会成本太高了?普中的板子用的是138位选+573段选。
回复

使用道具 举报

ID:690948 发表于 2020-2-11 08:39 来自手机 | 显示全部楼层
学习了
回复

使用道具 举报

ID:699553 发表于 2020-2-28 12:56 | 显示全部楼层
P0=wei[a]; WEI=1; WEI=0;请问楼主,这句是什么意思,是先送数据后再开通吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表