📄 key.h
字号:
BYTE code Key_index[]={
'A', 'B', 'C', 'D',
'3', '6', '9', '#',
'2', '5', '8', '0',
'1', '4', '7', '*'};
sbit KEY_COL_1 = P1^0; // * 0 # D
sbit KEY_COL_2 = P1^1; // 7 8 9 C
sbit KEY_COL_3 = P1^2; // 4 5 6 B
sbit KEY_COL_4 = P1^3; // 1 2 3 A
#define KEY_ROW_1 0x10
#define KEY_ROW_2 0x20
#define KEY_ROW_3 0x40
#define KEY_ROW_4 0x80
void Read_key(void)
{
EA=0;
OUT_373_1
EA=1;
if(KEY_COL_1==0)
Pre_key=1;
else if(KEY_COL_2==0)
Pre_key=2;
else if(KEY_COL_3==0)
Pre_key=3;
else if(KEY_COL_4==0)
Pre_key=4;
else
Pre_key=0;
}
void Timer1_interrupt(void) interrupt TF1_VECTOR
{
TH1=TIMER1_COUNT;
if(IDCardTime)
IDCardTime--;
if(Timer_20ms)
Timer_20ms--;
if(Timer_20ms2)
Timer_20ms2--;
if(Pause_time){
Pause_time--;
}
if(BELL_counter){
BELL_counter--;
if(BELL_counter==0){
b_BELL=0;
BELL_OFF
}
}
if(AUX_counter){
AUX_counter--;
if(AUX_counter==0){
AUX_OUT_OFF
}
}
if(VOC_counter){
VOC_counter--;
if(VOC_counter==0){
EA=0;
D373_3|=VOC_PLAY_MASK; // VOC_PLAY=1
OUT_373_3
EA=1;
}
}
if(VOC_delay_counter){
VOC_delay_counter--;
if(VOC_delay_counter==0){
EA=0;
P0=VOC_buf[0]; B_373_2=1; B_373_2=0; VOC_counter=VOC_buf[1];
D373_3&=~VOC_PLAY_MASK; // VOC_PLAY=0
OUT_373_3
EA=1;
}
}
if(Key==0){ // no key wait for process
D373_1|=0xF0;
D373_1&=(~KEY_ROW_1); // Row_1 = 0
Read_key();
if(Pre_key==0){ // no key press
D373_1|=0xF0;
D373_1&=(~KEY_ROW_2); // Row_2 = 0
Read_key();
if(Pre_key==0){ // no key press
D373_1|=0xF0;
D373_1&=(~KEY_ROW_3); // Row_3 = 0
Read_key();
if(Pre_key==0){ // no key press
D373_1|=0xF0;
D373_1&=(~KEY_ROW_4); // Row_4 = 0
Read_key();
if(Pre_key!=0)
Pre_key+=12;
}else
Pre_key+=8;
}else
Pre_key+=4;
} // Now Pre_key=keyboard current status(0-16)
if(Pre_key==0){ // no key press
Key_stat=0;
}
if(Key_stat==0){ // no key pressed or wait for process
if(Pre_key!=0){
Last_key=Pre_key; // Save key in Pre_key
Key_stat=1;
if(b_BELL==0){ // BELL is current off
BELL_ON // BELL on
BELL_counter=10;
}
}
}else if(Key_stat==1){ // key pressed, wait 20ms read again
if(Pre_key==Last_key){ // key in has no change
Key=Last_key;
Key_stat=2;
}
}
}else{ // Last key is waiting for process
EA=0;
D373_1&=0xF; // Row_1234 = 0
OUT_373_1
EA=1;
if((KEY_COL_1&KEY_COL_2&KEY_COL_3&KEY_COL_4)==1){ // All key released
if(Key_stat==3){
Key_stat=0;
Key=0;
}
}
}
}
void Key_Process(BYTE k)
{
BYTE i,j;
if(Menu_stat==0){ // Normal process mode
if((b_Serial_mode==RS232_MODE)&&(!b_Send_busy)){
Send_buf[3]=20; Send_buf[4]=~20;
Send_buf[5]=k;
for(i=6; i<22; i++)
Send_buf[i]=0;
Send_Data();
}
if((k>='0')&&(k<='9')&&(Key_p<6)){ // Number input
Key_buf[Key_p]=k;
Key_p++;
if(Key_p==6){ // Password length
Set_28F040_Page(1);
for(i=0; i<6; i++){
j=Flash[0x2401+i]; // Password stored here
if((j>='0')&&(j<='9')&&(j!=Key_buf[i]))
goto Key_exit;
}
Menu_stat=1; // Main menu
Show_mainmenu();
Key_exit:{}
}
}else{
Key_p=0;
if(k=='*'){
Sys_Stat=SB;
LCD_ShowStatus();
newVOC_Play(4);
}else if(k=='#'){
Sys_Stat=XB;
LCD_ShowStatus();
newVOC_Play(6);
}else if(k=='A'){
Sys_Stat=JBS;
LCD_ShowStatus();
newVOC_Play(8);
}else if(k=='B'){
Sys_Stat=JBX;
LCD_ShowStatus();
newVOC_Play(10);
}else if(k=='D'){
Sys_Stat=LSJ;
LCD_ShowStatus();
newVOC_Play(12);
}else{ // 'C':
Sys_Stat=LSC;
LCD_ShowStatus();
newVOC_Play(14);
}
}
}else{ // Main Menu working mode
switch(k){
case 'C': // ESC
Menu_stat=0;
LCD_clrscr();
Sys_Stat=SB;
LCD_ShowStatus();
b_20ms2=0;
return;
case '1': // Add user
Menu_stat=2;
Menu_adduser();
break;
case '2': // Change time
Menu_stat=3;
Menu_settime();
break;
case '3': // Serial setup
Menu_stat=4;
Menu_serial();
break;
case '4': // Delete user
Menu_stat=5;
Menu_deluser();
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -