此程序的電路圖下載:點(diǎn)這里 注意:只需要看數(shù)碼管部分即可,其他部分可忽略掉. 程序是用c語(yǔ)言編寫(xiě)的,采用的單片機(jī)型號(hào)是stc89c52
#include <reg52.h>
typedef unsigned char uchar8;
typedef unsigned int uint16;
typedef unsigned long ulong32;
sbit ENLED = P1^4;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
uchar8 led_char[] = {
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90
};
uchar8 zifu_led[] = {
0xff,0xff,0xff,
0xff,0xff,0xff
};
void main()
{
uchar8 cnt = 0;
uchar8 key = 0;
ulong32 sec = 0;
ADDR3 = 1;
ENLED = 0;
TMOD = 0x01;
TH0 = 0xB7;
TL0 = 0x00;
TR0 = 1;
while(1)
{
if(1 == TF0)
{
TF0 = 0;
TH0 = 0xB7;
TL0 = 0x00;
cnt++;
if(100 = cnt)
{
cnt = 0;
sec++;
zifu_led[0] = sec%10;
zifu_led[1] = sec/10%10;
zifu_led[2] = sec/100%10;
zifu_led[3] = sec/1000%10;
zifu_led[4] = sec/10000%10;
zifu_led[5] = sec/100000%10;
}
}
switch(key)
case 0:P0 = 0xff;ADDR2 = 0; ADDR1 = 0; ADDR0 = 0;P0 = led_char[zifu_led[0]];key++;break;
case 1:P0 = 0xff;ADDR2 = 0; ADDR1 = 0; ADDR0 = 1;P0 = led_char[zifu_led[1]];key++;break;
case 2:P0 = 0xff;ADDR2 = 0; ADDR1 = 1; ADDR0 = 0;P0 = led_char[zifu_led[2]];key++;break;
case 3:P0 = 0xff;ADDR2 = 0; ADDR1 = 1; ADDR0 = 1;P0 = led_char[zifu_led[3]];key++;break;
case 4:P0 = 0xff;ADDR2 = 1; ADDR1 = 0; ADDR0 = 0;P0 = led_char[zifu_led[4]];key++;break;
case 5:P0 = 0xff;ADDR2 = 1; ADDR1 = 0; ADDR0 = 1;P0 = led_char[zifu_led[5]];key = 0;break;
default:break;
}
}