#include <reg52.h>
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit KEY_SET = P3^2;
sbit KEY_ADD = P3^3;
unsigned char code duan_table[] = {
0xC0, 0xF9, 0xA4, 0xB0, 0x99,
0x92, 0x82, 0xF8, 0x80, 0x90
};
unsigned char hour = 12, minute = 0, second = 0;
unsigned char mode = 0;
bit colon = 1;
bit run = 1;
void delay_ms(unsigned int ms) {
unsigned int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 114; j++);
}
void Timer0_Init() {
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = 0x4C;
TL0 = 0x00;
ET0 = 1;
TR0 = 1;
EA = 1;
}
void Display() {
unsigned char h1, h2, m1, m2;
h1 = hour / 10;
h2 = hour % 10;
m1 = minute / 10;
m2 = minute % 10;
P2 = duan_table[h1];
LED1 = 1; LED2 = 0; LED3 = 0; LED4 = 0;
delay_ms(5);
if(colon) {
P2 = duan_table[h2] & 0x7F;
} else {
P2 = duan_table[h2];
}
LED1 = 0; LED2 = 1; LED3 = 0; LED4 = 0;
delay_ms(5);
P2 = duan_table[m1];
LED1 = 0; LED2 = 0; LED3 = 1; LED4 = 0;
delay_ms(5);
P2 = duan_table[m2];
LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 1;
delay_ms(5);
}
void Key_Scan() {
static unsigned char key_set_cnt = 0, key_add_cnt = 0;
if(KEY_SET == 0) {
key_set_cnt++;
if(key_set_cnt >= 5) {
while(KEY_SET == 0);
key_set_cnt = 0;
if(mode == 0) {
run = 0;
}
mode++;
if(mode > 2) {
mode = 0;
run = 1;
}
}
} else {
key_set_cnt = 0;
}
if(mode != 0 && KEY_ADD == 0) {
key_add_cnt++;
if(key_add_cnt >= 5) {
while(KEY_ADD == 0);
key_add_cnt = 0;
if(mode == 1) {
hour++;
if(hour >= 24) hour = 0;
} else if(mode == 2) {
minute++;
if(minute >= 60) minute = 0;
}
}
} else {
key_add_cnt = 0;
}
}
void Timer0_ISR() interrupt 1 {
static unsigned char count = 0;
static unsigned char blink_cnt = 0;
TH0 = 0x4C;
TL0 = 0x00;
count++;
if(count >= 20) {
count = 0;
if(run) {
second++;
if(second >= 60) {
second = 0;
minute++;
if(minute >= 60) {
minute = 0;
hour++;
if(hour >= 24) hour = 0;
}
}
}
}
blink_cnt++;
if(blink_cnt >= 10) {
blink_cnt = 0;
colon = !colon;
}
}
void main() {
P2 = 0xFF;
P1 = 0x00;
Timer0_Init();
while(1) {
Key_Scan();
Display();
}
}




运行时的图片是第二张,可见数码管和p1.0到p1.3几个口没有反应,需要在继续把这几个口也连上电阻吗,如果不是这个问题可能是什么别的原因,改代码,换硬件都试过了,不知道为什么就是不亮