/*------------------*/
/* 动态数码管扫描显字 */
/* P0 口为段选, */
/* P1 口为位选。 */
/* 8位数码管一直累加计数 */
/*---------------- -*/
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
char code duan[]={ //段数组编码 0、1、2、3、4、5、6、7、8、9、0、A、B、C、D、E、F
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
//uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位数组编码 个、十、百、千。。。
uchar ge,shi,bai,qian,wan,swan,bwan,qwan,a;
long num;
void display(uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar);
void inti() //程序初始化
{
TMOD=0x11;
TH0=(65536-50000);
TL0=(65536-50000);
EA=1;
ET0=1;
TR0=1;
num=0;
}
void delay(uint x) //约为1ms延时.
{
uint i,j;
for(i=x;i>0;i--)
for(j=121;j>0;j--);
}
void main()
{
inti();
while(1)
{
display(qwan,bwan,swan,wan,qian,bai,shi,ge); //输入任意8位数。
}
}
void display(uchar a1,uchar a2,uchar a3,uchar a4,uchar a5,uchar a6,uchar a7,uchar a8)
{
P1= 0xfe;
P0= duan[a1];
delay(1);
P0= 0;
P1= 0xfd;
P0= duan[a2];
delay(1);
P0= 0;
P1= 0xfb;
P0= duan[a3];
delay(1);
P0= 0;
P1= 0xf7;
P0= duan[a4];
delay(1);
P0= 0;
P1= 0xef;
P0= duan[a5];
delay(1);
P0= 0;
P1= 0xdf;
P0= duan[a6];
delay(1);
P0= 0;
P1= 0xbf;
P0= duan[a7];
delay(1);
P0= 0;
P1= 0x7f;
P0= duan[a8];
delay(1);
P0= 0;
}
void timer0() interrupt 1
{
TH0=(65536-50000);
TL0=(65536-50000);
a++;
if(a==49)
{
a=0;
num++;
ge = num%10;
shi = num%100/10;
bai = num%1000/100;
qian= num%10000/1000;
wan = num%100000/10000;
swan= num%1000000/100000;
bwan= num%10000000/1000000;
qwan= num%100000000/10000000;
}
}
想将delay()函数替换用计时器做延时,不想用 循环方式做延时,该如何改?
求好心人帮忙解答!
|