原理图
代码实现:
#include <reg51.h>
unsigned char states[]={0x06,0x05,0x03};
unsigned int n = 0;
unsigned int k = 0;
unsigned int count = 60;
const char seg[] = {0x3F, 0x06, 0x5B, 0x4F,
0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
void initimer() {
TMOD = 0X00;
TL0 = (8192 - 5000) % 256;
TH0 = (8192 - 5000) / 256;
ET0 = 1;
EA = 1;
TR0 = 1;
}
void flashlled(){
if(count <= 10 && k==0)
states[k] = states[k] ^ 0x01;
else if(k==1)
states[k]= states[k] ^ 0x02;
else if(count <= 10 && k==2)
states[k] = states[k] ^ 0x04;
P0=states[k];
}
void initimer_ISR() interrupt 1 {
TL0 = (8192 - 5000) % 256;
TH0 = (8192 - 5000) / 256;
n++;
if (n >= 50) {
n = 0;
count--;
}
if(count==0){
states[0]=0x06;
states[1]=0x05;
states[2]=0x03;
k=++k%3;
if(k==1)
count=4;
else
count=60;
}
}
void display() {
P1 = seg[count / 10];
P2 = seg[count % 10];
}
void main() {
initimer();
while (1) {
display();
flashlled();
}
}