数码管动态显示
最好可以推荐一些学习中断的视频,感谢
一个573做段选,一个做位选,动态扫描就可以了,很简单。
不会啊,初学者
程序写了,但效果不是我想要的
只是程序,初学者伤不起啊
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code shu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x07,0x7f,0x6f};//显示1,23456·····
uint g,s,b,q,w,sw,bw,qw,i;
void display(g,s,b,q,w,sw,bw,qw); //变量 确定显示的段选---A
void delay(void) //误差 -0.434027777779us
{
unsigned char a,b;
for(b=100;b>0;b--)
for(a=130;a>0;a--);
}
void main()
{
i=0;
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
//TH0=(65536-45872)/256; //初值化
//TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
//if(i==10)
// {
for(qw=0;qw<10;qw++)
{
for(bw=0;bw<10;bw++)
{
for(sw=0;sw<10;sw++)
{
for(w=0;w<10;w++)
{
for(q=0;q<10;q++)
{
for(b=0;b<10;b++)
{
for(s=0;s<10;s++)
{
for(g=0;g<10;g++)
{
display(g,s,b,q,w,sw,bw,qw);
}
if(g==10)
g=0;
}
}
}
}
}
}
}
// i=0;
// i++;
// }
} //表示display 演示
}
void display(g,s,b,q,w,sw,bw,qw)
{
dula=1;
P0=shu[qw];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay();
dula=1;
P0=shu[bw];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay();
dula=1;
P0=shu[sw];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay();
dula=1;
P0=shu[w];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay();
dula=1;
P0=shu[q];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay();
dula=1;
P0=shu[b];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay();
dula=1;
P0=shu[s];
dula=0;
P0=0xff;
wela=1;
P0=0xbf;
wela=0;
delay();
dula=1;
P0=shu[g];
dula=0;
P0=0xff; //g表示个位数 ----A以下类似
wela=1;
P0=0X7f;
wela=0;
delay();
}
void T0zhongduan() interrupt 1
{
TH0=0x3C;
TL0=0xB0;
//TH0=(65536-50000)/256;
//TL0=(65536-50000)%256;
i++;
// g=i%10;
// s=i%100/10;
// b=i%1000/100;
// q=i%10000/1000;
// w=i%100000/10000;
// sw=i%1000000/100000;
// bw=i%10000000/1000000;
// bw=i%100000000/10000000;
if(i==20)
{
i=0;
i++;
}
}
那看你是显示效果不好,还是其他的问题了,如楼上所说,一个573段选,一个573位选,用定时器做刷新就可以了,要不就上电路图和程序吧
八个数码管组成八位数,显示9个9有难度,甚至做不到。
没见过过这么多位数的计时器
我也很郁闷