我这个51单片机做出来的计时器,数码管走1秒,但是实际需要好几秒。
#include <REG52.H>
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
sbit LSA = P2 ^ 2;
sbit LSB = P2 ^ 3;
sbit LSC = P2 ^ 4;
u8 code LedChar[] = {
0x3f,
0x06,
0x5b,
0x4f,
0x66,
0x6d,
0x7d,
0x07,
0x7f,
0x6f,
0x77,
0x7c,
0x39,
0x5e,
0x79,
0x71,
};
u8 LedBuff[8] = {
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
};
u8 i=0,j= 0;
u16 cnt = 0;
u16 sec = 0;
void display()
{
u8 i;
for (i = 0; i < 8; i++) {
switch (i) {
case 0:
LSC = 0;
LSB = 0;
LSA = 0;
break;
case 1:
LSC = 0;
LSB = 0;
LSA = 1;
break;
case 2:
LSC = 0;
LSB = 1;
LSA = 0;
break;
case 3:
LSC = 0;
LSB = 1;
LSA = 1;
break;
case 4:
LSC = 1;
LSB = 0;
LSA = 0;
break;
case 5:
LSC = 1;
LSB = 0;
LSA = 1;
break;
case 6:
LSC = 1;
LSB = 1;
LSA = 0;
break;
case 7:
LSC = 1;
LSB = 1;
LSA = 1;
break;
}
P0 = LedBuff[i];
for(j=0;j<83;j++);
P0 = 0x00;
}
}
void main()
{
TMOD = 0x01;
TH0 = 0xfc;
TL0 = 0x67;
TR0 = 1;
while (1) {
if(TF0==1){
TF0 = 0;
TH0 = 0xfc;
TL0 = 0x67;
cnt++;
if (cnt == 1000) {
cnt = 0;
sec++;
LedBuff[0] = LedChar[sec % 10];
LedBuff[1] = LedChar[sec / 10 % 10];
LedBuff[2] = LedChar[sec / 100 % 10];
LedBuff[3] = LedChar[sec / 1000 % 10];
LedBuff[4] = LedChar[sec / 10000 % 10];
LedBuff[5] = LedChar[sec / 100000 % 10];
LedBuff[6] = LedChar[sec / 1000000 % 10];
LedBuff[7] = LedChar[sec / 10000000 % 10];
}
}
display();
}
}