数码管动态显示原理 (如何让数码管的动态扫描慢一点)

数码管(阳极)我把前四位位选打开,让他们分别显示1234,让后再让他们自加,结果太快了,像秒表一样,我就想延时,结果后面一位慢了,可是前面3位都慢了,在闪烁,怎么样才能后... 数码管(阳极)
我把前四位位选打开,让他们分别显示1234,让后再让他们自加,结果太快了 ,像秒表一样,我就想延时,结果后面一位慢了,可是前面3位都慢了,在闪烁,怎么样才能后面的也慢前面的不闪啊???
我的位选是单个开的 ,还有我还没学中断,学长说不用中断也可以的,可是 我就是试不出来~~~不过谢谢你们了 ~~~~
展开
 我来答
huzuogeng
2010-03-12 · TA获得超过283个赞
知道答主
回答量:105
采纳率:0%
帮助的人:52.1万
展开全部
不用中断也可:
1,初始化
2,显示第一位
3,延时(2MS)
4,显示第二位
5,延时(2MS)
6,显示第三位
7,延时(2MS)
8,显示第四位
9,延时(2MS)
10,增加数字(这里设置一个寄存器加1,只有计数到1000显示数值才增加,这样就是4秒显示数值增加1)
11,跳转到第2步
ljc1188
2010-03-12 · 超过26用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:72.8万
展开全部
扫描在定时中断内执行,秒脉冲可以用软件延时,也可以用定时中断产生,最好用定时中断,尽量少占用cpu的资源。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nana_candy88
2010-03-12 · TA获得超过149个赞
知道答主
回答量:161
采纳率:0%
帮助的人:76.7万
展开全部
我觉得位选不要一起打开。
延时加的太长了,超过人眼视觉停留时间,灯才会闪的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ljfang35316
2010-03-26 · TA获得超过162个赞
知道小有建树答主
回答量:639
采纳率:0%
帮助的人:380万
展开全部
//简单的写一个,自己参考一下

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit k1 = P1^0;
sbit k2 = P1^1;
sbit k3 = P1^2;
sbit k4 = P1^3;

uchar a,b,c,d;
uint e;

uchar code tab_num[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};//共阳数码管

void delay(uchar k) //延时函数
{
uchar i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++);
}
}

void display_led()
{
k1 = 1;
P0 = tab_num[a];
delay(5);
k1 = 0;

k2 = 1;
P0 = tab_num[b];
delay(5);
k2 = 0;

k3 = 1;
P0 = tab_num[c];
delay(5);
k3 = 0;

k4 = 1;
P0 = tab_num[d];
delay(5);
k4 = 0;

e++;
if(e==100){e=0;d++;};//e==100改变e的大小可以改变自加的速度
//要使用秒闪,要计算好上面程序的执行时间,延时时间,再来却定e的大小
//指令的执行周期与晶振有关,可以去参考资料。
if(d>9){d=0;c++;};
if(c>9){c=0;b++;};
if(b>9){b=0;a++;};
if(a>9){a=0;};
}

void main()
{
a = 1;
b = 2;
c = 3;
d = 4;
P1 = 0x00;
while(1)
{
display_led();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式