微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 6位LED显示单片机控制电子钟/计数器

6位LED显示单片机控制电子钟/计数器

时间:11-10 来源:互联网 点击:

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;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top