使用定时中断来设计时钟,数码管除了第一位不闪 其他位都在闪
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar ms,s,m,h;
int a,b,x,y,q,p;
unsigned char code t_display[]={ //??????
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
//black - H J K L N o P U t G Q r M y
0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46}; //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
uchar code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //λ??
void Delay10us() //@11.0592MHz
{
unsigned char i;
i = 2;
while (--i);
}
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
void Delay2ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 22;
j = 128;
do
{
while (--j);
} while (--i);
}
void Delay5ms() //@11.0592MHz
{
unsigned char i, j;
i = 9;
j = 244;
do
{
while (--j);
} while (--i);
}
void display (uint s,uint m,uint h ) //???????????
{
a=s%10;
b=s/10;
P2=0XE0;
P0=~t_display[a];
P2=0X00;
P2=0XC0;
P0=T_COM[7];
P2=0X00;
P2=0XE0;
P0=~t_display[b];
P2=0x00;
P2=0XC0;
P0=T_COM[6];
P2=0X00;
x=m%10;
y=m/10;
P2=0XE0;
P0=~t_display[x];
P2=0X00;
P2=0XC0;
P0=T_COM[4];
P2=0X00;
P2=0XE0;
P0=~t_display[y];
P2=0x00;
P2=0XC0;
P0=T_COM[3];
P2=0X00;
P2=0XE0;
P0=~t_display[p];
P2=0x00;
P2=0XC0;
P0=T_COM[1];
P2=0X00;
p=h%10;
q=h/10;
P2=0XE0;
P0=~t_display[q];
P2=0X00;
P2=0XC0;
P0=T_COM[0];
P2=0X00;
}
void timer0 () interrupt 1 using 1 //????????ж??
{
static ms,s,m,h;
TH0=0X4B;
TL0=0XFD;
ms++;
display (s,m,h);
if (ms==20)
{
ms=0;
s++;
if(s==60)
{
s=0;
m++;
{
if(m==60)
{
m=0;
h++;
if(h==24)
{
h=0;
}
}
}
}
}
}
void timer0Init () //????????????
{
EA=1;
ET0=1;
TR0=1;
TMOD|=0X01;
TH0=0X4B;
TL0=0XFD;
}
void main ()
{
P2=0XA0;
P0=0XAA;
P2=0X00;
P0=0XFF;
timer0Init ();
while(1);
}