📄 key.c
字号:
#include "fun.h"
#include "VAR.h"
void init_t1(void)
{num_t1=0;
TMOD|=0X10;
TH1=0X00;
TL1=0X00;
PT1=0;
TR1=1;
ET1=1;
EA=1;
}
void interrupt_t1(void) interrupt 3 using 3
{TR1=0;
TH1=0X00;
TL1=0X00;
TF1=0;
num_t1++;
TR1=1;
}
void init_t0(void)
{flag_frame=FALSE;
frame.lf=0;
TMOD|=0X01;
TH0=0XFE; //450US
TL0=0XD0;
TR0=1;
TF0=0;
//PT0=1;
ET0=1;
EA=1;
}
void interrupt_t0(void) interrupt 1 using 1
{static uchar i=0;
TH0 =0XFC;
TL0 =0XD0;
TF0=0;
frame.lf=frame.lf<<1|(ulong)D;
if(++i>27)
{TR0=0;
ET0=0;
i=0;
flag_frame=TRUE;
}
}
void keyin(void)
{if(flag_key)return;
flag_key=TRUE;
dispall();
hp=0;lp=0;
dispflicker(hp,lp);
init_t1();
}
void keyout(void)
{if(!flag_key)return;
keychange();
dispstop(hp,lp);
flag_key=FALSE;
dispall();
ET1=0;
TR1=0;
//EX0=1;
}
void keychange(void)
{if(flag_change)
{if(hp==0)
{bcd2_binary_time();
binary_bcd1_time();
wr_date();
}
else if(hp==1||hp==2)
{bcd_binary();
binary_24wcxx.year =binary_realtime.year;
binary_24wcxx.month=binary_realtime.month;
binary_24wcxx.day =binary_realtime.day;
if(binary_realtime.hour<18)yesterday(&binary_24wcxx);
wr_24wcxx(addrtab[hp]);
}
else if(hp<29)
{bcd_binary();
wr_24wcxx(addrtab[hp]);
}
flag_change=FALSE;
}
}
void keynum(uchar value)
{uchar *p;
if(!flag_key)return;
if(hp==0)
{p=(uchar*)&bcd2_realtime;
p+=lp;
if(*p!=value)
{*p=value;
flag_change=TRUE;
bcd2_binary_time();
timejudge();
binary_bcd2_time();
disp2(0);
dispstop(0,lp);
}
else dispone(hp,lp,value);
if(++lp>=12)
{if(flag_change)
{binary_bcd1_time();
wr_date();
}
flag_change=FALSE;
hp++;
lp=8; //去除一个数码管
rd_24wcxx(addrtab[hp]);
binary_bcd();
}
dispflicker(hp,lp);
}
else if(hp==1||hp==2)
{p=(uchar *)&bcd_24wcxx;
p+=(lp-1);
if(*p!=value)
{*p=value;
flag_change=TRUE;
}
dispone(hp,lp,value);
if(++lp>=12)
{if(flag_change)
{bcd_binary();
binary_24wcxx.year =binary_realtime.year;
binary_24wcxx.month=binary_realtime.month;
binary_24wcxx.day =binary_realtime.day;
if(binary_realtime.hour<18)yesterday(&binary_24wcxx);
wr_24wcxx(addrtab[hp]);
}
flag_change=FALSE;
if(++hp>2)lp=1;
else lp=7;
rd_24wcxx(addrtab[hp]);
binary_bcd();
}
dispflicker(hp,lp);
}
else if(hp<29)
{p=(uchar *)&bcd_24wcxx;
p+=(lp-1);
if(*p!=value)
{*p=value;
flag_change=TRUE;
bcd_binary();
datejudge();
binary_bcd();
}
disp2(hp);
dispstop(hp,lp);
if(++lp>=12)
{if(flag_change)
{bcd_binary();
wr_24wcxx(addrtab[hp]);
}
flag_change=FALSE;
if(++hp>=29){hp=28;lp=11;}
else lp=1;
rd_24wcxx(addrtab[hp]);
binary_bcd();
}
dispflicker(hp,lp);
}
}
void keydirection(uchar value)
{if(!flag_key)return;
switch(value)
{case UP :keychange();
dispstop(hp,lp);
if(hp==0){hp=28;lp=1;}
else if(hp==1){hp=0;lp=0;}
else if(hp==2){hp=1;lp=8;}
else if(hp==3){hp=2;lp=7;}
else hp--;
dispflicker(hp,lp);
if(hp)
{rd_24wcxx(addrtab[hp]);
binary_bcd();
}
else
{rd_date();
bcd1_binary_time();
binary_bcd2_time();
}
break;
case DOWN :keychange();
dispstop(hp,lp);
if(hp==0){hp=1;lp=8;}
else if(hp==1){hp=2;lp=7;}
else if(hp==2){hp=3;lp=1;}
else if(hp==28){hp=0;lp=0;}
else hp++;
dispflicker(hp,lp);
if(hp)
{rd_24wcxx(addrtab[hp]);
binary_bcd();
}
else
{rd_date();
bcd1_binary_time();
binary_bcd2_time();
}
break;
case RIGHT:dispstop(hp,lp);
if(++lp>=12)
{keychange();
hp++;
if(hp==1)lp=8;
else if(hp==2)lp=7;
else if(hp>=29){hp=0;lp=0;}
else lp=1;
if(hp)
{rd_24wcxx(addrtab[hp]);
binary_bcd();
}
else
{rd_date();
bcd1_binary_time();
binary_bcd2_time();
}
}
dispflicker(hp,lp);
break;
case LEFT :dispstop(hp,lp);
if((hp==0&&lp==0)||(hp==1&&lp==8)||(hp==2&&lp==7)||(hp>2&&lp==1))
{keychange();
if(hp==0&&lp==0){hp=28;lp=11;}
else if(hp==1&&lp==8){hp=0;lp=11;}
else if(hp==2&&lp==7){hp=1;lp=11;}
else if(hp<29&&lp==1){hp--;lp=11;}
if(hp)
{rd_24wcxx(addrtab[hp]);
binary_bcd();
}
else
{rd_date();
bcd1_binary_time();
binary_bcd2_time();
}
}
else lp--;
dispflicker(hp,lp);
break;
default:break;
}
}
void key(void)
{
if((frame.sf.f1!=last_id)&&(frame.sf.f1==KEY_ID1||frame.sf.f1==KEY_ID2))
{last_id=frame.sf.f1;
num_t1=0;
}
else return;
switch(frame.sf.f2)
{case KEY_1:keynum(1);
break;
case KEY_2:keynum(2);
break;
case KEY_3:keynum(3);
break;
case KEY_4:keynum(4);
break;
case KEY_5:keynum(5);
break;
case KEY_6:keynum(6);
break;
case KEY_7:keynum(7);
break;
case KEY_8:keynum(8);
break;
case KEY_9:keynum(9);
break;
case KEY_0:keynum(0);
break;
//case KEY_POINT:break(11);
//case KEY_SPACE:break(12);
case KEY_UP :keydirection(UP);
break;
case KEY_DOWN:keydirection(DOWN);
break;
case KEY_B1 :keydirection(LEFT);
break;
case KEY_B2 :keydirection(RIGHT);
break;
case KEY_ADJUST:keyin();
break;
case KEY_FUNCTION:keyout();
break;
default:break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -