📄 keycount.c
字号:
write_dr();
lcddata=0x53;
write_data();
datadr=0x46;//B
write_dr();
lcddata=0x42;
write_data();
datadr=0x48;//次第
write_dr();
lcddata=0x30+check_num/10;
write_data();
datadr=0x49;
write_dr();
lcddata=0x30+check_num%10;
write_data();
datadr=0x4a;//冒号
write_dr();
lcddata=0x3a;
write_data();
datadr=0x4b;//小时
write_dr();
lcddata=0x30+((*(TIMES+2*(*DAY_SUM)+move_num*2-2))>>4);
write_data();
datadr=0x4c;
write_dr();
lcddata=0x30+((*(TIMES+2*(*DAY_SUM)+move_num*2-2))&0x0f);
write_data();
datadr=0x4d;//冒号
write_dr();
lcddata=0x3a;
write_data();
datadr=0x4e;//分钟
write_dr();
lcddata=0x30+((*(TIMES+2*(*DAY_SUM)+move_num*2-1))>>4);
write_data();
datadr=0x4f;
write_dr();
lcddata=0x30+((*(TIMES+2*(*DAY_SUM)+move_num*2-1))&0x0f);
write_data();
}
}
void key_stop(){ /*延时等待按键取消*/
byte h;
do h=P2&0x0f;
while(h!=0x0f);
}
void key_scan(){ /*按键检测子程序*/
byte i,colcode;
colcode=P2&0x0f;
if(colcode!=0x38){ /*判断是否有键按下*/
for(i=200;i>0;i--);
colcode=P2&0x38;
if(colcode!=0x38){//若有键按下,求其值
if(colcode==0x30){//
key_num=0;
key_flag=1;
}
else if (colcode==0x20){
key_num=1;
key_flag=1;
}
else if (colcode==0x08){
key_num=2;
key_flag=1;
}
else if (colcode==0x18){
key_num=3;
key_flag=1;
}
else key_flag=0;
}
}
}
void key_dispose1(){//按键处理子程序
byte j,y;
bit alarm_flag=0;
read_initstat();
switch(key_num){
case 0x00: if((checktime_flag)||(changetime_flag)){//在修改时间或检查继电器闭合时间界面下,快捷退出
clr_lcd();
main_face();
checktime_flag=0;
changetime_flag=0;
move_num=0;
del_flag=0;
press_num=0;
last_num=0;
//check_flag=0;
}
else if((!checktime_flag)&&(!changetime_flag)){//进入修改时间界面,
change_time();
changetime_flag=1;
move_num=0x00;
checktime_flag=0;
del_flag=0;
}
key_flag=0;
key_stop();
break;
case 0x01: if((changetime_flag)&&(!checktime_flag)){//修改时间界面下,移动光标
datadr=(0x40+move_num);//T
write_dr();
lcddata=0x20;
write_data();
switch(move_num){
case 0: move_num=15;break;
case 1: move_num=0;break;
case 3: move_num=1;break;
case 4: move_num=3;break;
case 6: move_num=4;break;
case 7: move_num=6;break;
case 9: move_num=7;break;
case 10: move_num=9;break;
case 12: move_num=10;break;
case 13: move_num=12;break;
case 15: move_num=13;break;
default: move_num=0;break;
}
datadr=(0x40+move_num);//T
write_dr();
lcddata=0xb0;
write_data();
}
else if(((!changetime_flag)&&(checktime_flag))&&(!del_flag)){//查看继电器闭合时间界面下,翻动菜单
if((move_num==1)||(move_num==0)){ //从最早一天看起已看至最近一天最近一次按键时间
move_num=*PRESS_SUM;
y=*DAY_SUM;
y--;
tiancha=y;
while(*(TIMES+2*tiancha+1)==0){
if(tiancha==0){
j=*DAY_SUM;
j--;
tiancha=j;
move_num=*PRESS_SUM;
check_num=1;
break;
}
tiancha--;
check_num=1;
}
check_num=1;
check_time();
}
else{
move_num--;
if(check_num==*(TIMES+2*tiancha+1)){
tiancha--;
while(*(TIMES+2*tiancha+1)==0){
if(tiancha==0){
j=*DAY_SUM;
j--;
tiancha=j;
move_num=*PRESS_SUM;
check_num=1;
break;
}
tiancha--;
check_num=1;
}
check_num=1;
}
else check_num++;
}
check_time();
}
key_flag=0;
key_stop();
break;
case 0x02: if((changetime_flag)&&(!checktime_flag)){//在修改时间界面下,移动光标
datadr=(0x40+move_num);//T
write_dr();
lcddata=0x20;
write_data();
switch(move_num){
case 0: move_num=1;break;
case 1: move_num=3;break;
case 3: move_num=4;break;
case 4: move_num=6;break;
case 6: move_num=7;break;
case 7: move_num=9;break;
case 9: move_num=10;break;
case 10: move_num=12;break;
case 12: move_num=13;break;
case 13: move_num=15;break;
case 15: move_num=0;break;
default: move_num=0;break;
}
datadr=(0x40+move_num);//T
write_dr();
lcddata=0xb0;
write_data();
}
else if(((!changetime_flag)&&(checktime_flag))&&(!del_flag)){//查看继电器闭合时间界面下,翻动菜单
if(move_num==*PRESS_SUM){
move_num=1;
tiancha=0;
while(*(TIMES+2*tiancha+1)==0){
if(tiancha==*DAY_SUM){
tiancha=0;
move_num=1;
check_num=*(TIMES+1);
break;
}
tiancha++;
check_num=*(TIMES+2*tiancha+1);
}
check_num=*(TIMES+1);
}
else{
move_num++;
if(check_num==1){
tiancha++;
while(*(TIMES+2*tiancha+1)==0){
if(tiancha==*DAY_SUM){
tiancha=0;
move_num=1;
check_num=*(TIMES+1);
break;
}
tiancha++;
check_num=*(TIMES+2*tiancha+1);
}
check_num=*(TIMES+2*tiancha+1);
}
else check_num--;
}
check_time();
}
key_flag=0;
key_stop();
break;
case 0x03: if((!changetime_flag)&&(!checktime_flag)){//进入检查继电器闭合时间界面
if(*(PRESS_SUM)!=0){
/*if(!check_flag){
for(f=0;f<*DAY_SUM;f++){
j=*(TIMES+2*f-1);
if(j==0){
alarm_flag=1;
tiancha=f;
}
}
}
if(alarm_flag==1){
datadr=0x40;//距今天天数
write_dr();
lcddata=0x30+tiancha/10;
write_data();
datadr=0x41;
write_dr();
lcddata=0x30+tiancha%10;
write_data();
datadr=0x42;//D
write_dr();
lcddata=0x44;
write_data();
datadr=0x43;//A
write_dr();
lcddata=0x41;
write_data();
datadr=0x44;//Y
write_dr();
lcddata=0x59;
write_data();
datadr=0x45;//S
write_dr();
lcddata=0x53;
write_data();
datadr=0x46;//B
write_dr();
lcddata=0x42;
write_data();
datadr=0x48;//N
write_dr();
lcddata=0x4e;
write_data();
datadr=0x49;//O
write_dr();
lcddata=0x4f;
write_data();
datadr=0x4a;//P
write_dr();
lcddata=0x50;
write_data();
alarm_flag=0;
check_flag=1;
}*/
//else{
check_num=*(TIMES+1);
tiancha=0;
move_num=1;
checktime_flag=1;
changetime_flag=0;
del_flag=0;
check_time();
//}
}
else if(*(PRESS_SUM)==0){//未曾有继电器闭合纪录
for(j=0;j<=15;j++){//第二行全写入空白
datadr=0x40+j;
write_dr();
lcddata=0x20;
write_data();
}
datadr=0x40;//0
write_dr();
lcddata=0x30;
write_data();
datadr=0x41;//t
write_dr();
lcddata=0x54;
write_data();
datadr=0x42;//i
write_dr();
lcddata=0x69;
write_data();
datadr=0x43;//m
write_dr();
lcddata=0x6d;
write_data();
datadr=0x44;//e
write_dr();
lcddata=0x65;
write_data();
datadr=0x45;//s
write_dr();
lcddata=0x73;
write_data();
checktime_flag=1;
changetime_flag=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -