6位LED显示单片机控制电子钟/计数器
unsigned char show_key (void){
unsigned char x=0,y=0;
switch (program){
case 0: P1&=senen_seg[second%10]; //时钟秒的个位
break;
case 1: if(count_time>=2000) P1&=senen_seg[second%10]; //校正秒的个位
break;
case 2: if(delayed_hour==24) P1=0xfe; //闹钟秒的个位
else P1&=senen_seg[delayed_second%10];
break;
case 3: if(count_bit>=0) P1&=senen_seg[count_second%10];//倒计时秒的个位
else P1=0xff;
break;
case 4: P1&=senen_seg[count_second%10]; //秒表秒的个位
break;
case 5: P1&=senen_seg[count_second%10]; //计数器个位
break;
}
P3_3=0;
delay(10);
if(P3_5==0){ //功能键1识别
key1_enter=1;
if(count<=254)count++;
}
if(P3_4==0) key2_enter=1; //功能键2识别
if(P3_2==0) key3_enter=1; //功能键3识别
P3_3=1;
P1|=0xff;
switch (program){
case 0: P1&=senen_seg[second/10]; //时钟秒的十位
break;
case 1: if(count_time>=2000) P1&=senen_seg[second/10]; //校正秒的十位
break;
case 2: if(delayed_hour==24) P1=0xfe; //闹钟秒的十位
else P1&=senen_seg[delayed_second/10];
break;
case 3: if(count_bit>=1) P1&=senen_seg[count_second/10];//倒计时秒的十位
else P1=0xff;
break;
case 4: P1&=senen_seg[count_second/10]; //秒表秒的十位
break;
case 5: P1&=senen_seg[count_second/10]; //计数器十位
break;
}
P3_1=0;
delay(10);
P3_1=1;
P1|=0xff;
switch (program){
case 0: P1&=senen_seg[minute%10]; //时钟分的个位
break;
case 1: if(count_time>=2000) P1&=senen_seg[minute%10]; //校正分的个位
break;
case 2: if(delayed_hour==24) P1=0xfe; //闹钟分的个位
else P1&=senen_seg[delayed_minute%10];
break;
case 3: if(count_bit>=2) P1&=senen_seg[count_minute%10];//倒计时分的个位
else P1=0xff;
break;
case 4: P1&=senen_seg[count_minute%10]; //秒表分的个位
break;
case 5: P1&=senen_seg[count_minute%10]; //计数器百位
break;
}
P3_2=0;
delay(10);
P3_2=1;
P1|=0xff;
switch (program){
case 0: P1&=senen_seg[minute/10]; //时钟秒的个位
break;
case 1: if(count_time>=2000) P1&=senen_seg[minute/10]; //校正秒的个位
break;
case 2: if(delayed_hour==24) P1=0xfe; //闹钟秒的个位
else P1&=senen_seg[delayed_minute/10];
break;
case 3: if(count_bit>=3) P1&=senen_seg[count_minute/10];//倒计时秒的个位
else P1=0xff;
break;
case 4: P1&=senen_seg[count_minute/10]; //秒表秒的个位
break;
case 5: P1&=senen_seg[count_minute/10]; //计数器千位
break;
}
P3_5=0;
delay(10);
P3_5=1;
P1|=0xff;
switch (program){
case 0: P1&=senen_seg[hour%10]; //时钟时的个位
break;
case 1: if(count_time>=2000) P1&=senen_seg[hour%10]; //校正时的个位
break;
case 2: if(delayed_hour==24) P1=0xfe; //闹钟时的个位
else P1&=senen_seg[delayed_hour%10];
break;
case 3: if(count_bit>=4) P1&=senen_seg[count_hour%10];//倒计时时的个位
else P1=0xff;
break;
case 4: P1&=senen_seg[count_hour%10]; //秒表时的个位
break;
case 5: P1&=senen_seg[count_hour%10]; //计数器万位
break;
}
P3_0=0;
delay(10);
if(P3_4==1 && key2_enter==1){
x=3; //确认功能键2识别,返回3
key2_enter=0;
}
P3_0=1;
P1|=0xff;
switch (program){
case 0: P1&=senen_seg[hour/10]; //时钟时的个位
break;
case 1: if(count_time>=2000) P1&=senen_seg[hour/10]; //校正时的个位
break;
case 2: if(delayed_hour==24) P1=0xfe; //闹钟时的个位
else P1&=senen_seg[delayed_hour/10];
break;
case 3: if(count_bit>=5)P1&=senen_seg[count_hour/10]; //倒计时时的个位
else P1=0xff;
break;
case 4: P1&=senen_seg[count_hour/10]; //秒表时的个位
break;
case 5: P1&=senen_seg[count_hour/10]; //计数器万位
break;
}
P3_4=0;
delay(10);
if(P3_5==1 && key1_enter==1){ //确认功能键1识别,执行退出或进入下一个功能
if(count>=127) x=1; //确认功能键1为长按,返回1
else x=2; //确认功能键1为短按,返回2
key1_enter=0;
count=0;
}
if(P3_2==1 && key3_enter==1){
x=4; //确认功能键3识别,返回4
key3_enter=0;
}
P3_4=1;
P1|=0xff;
if(program<=1 && count_time>=2000) P1&=0xff; //校时和显示功能时钟时冒号闪烁
if(program<=1 && count_time<=2000) P1&=0x7f;
if(program==2) P1&=0x7f; //设置闹钟功能时冒号长亮
if(program==3) P1&=0xff; //设置倒计时功能时冒号长灭
if(program==4) P1&=0x7f; //设置秒表功能时冒号长亮
if(program==5) P1&=0xff; //设置计数时冒号长灭
y=x;
x=0;
return y;
}
LED显示单片机控制电子钟计数 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)