📄 key.h
字号:
/*
*********************************************************************************************************
* MPT 1327
* Trunking radio system
*
* (c) Copyright 2002-2005, Hu Jia Xi 胡家熙
* All Rights Reserved
*
* M16C620 Specific code
* Singal Chip Model
*
* File : key.C
* By : Hu Jia Xi
*********************************************************************************************************
*/
#ifndef __KEY_H__
#define __KEY_H__
#include "os.h"
#include "mcu.h"
#include "sfr62.h"
#include "..\lcd\lcd.h"
#ifdef KEY_GLOBALS
#define KEY_EXT
#else
#define KEY_EXT extern
#endif
#define STATUS_KEY_IDLE 0
#define STATUS_KEY_SCAN 1
#define STATUS_KEY_DOWN 2
#define STATUS_KEY_UP 3
#define KEY_BUF_LENGTH 10
#define KEY_FIX_TIME 5
#define KEY_TWITTER_NUM 3
#define KEY_GROUP_NUM 3
#define KEY_MULTI_NUM 20
#define KEY_MMULTI_NUM 10
#define KEY_POWERMULTI_NUM 30
#define KSTATUS_ANALYZE_NUM 4
#define KSTATUS_NORMAL_MULTI 0x07e0
#define KSTATUS_EDIT_MULTI 0x07e0
#define KSTATUS_DIAL_MULTI 0x07e0
#define KSTATUS_VOICE_MULTI 0x07e0
#define KSTATUS_NORMAL_MMULTI 0//0x07e0
#define KSTATUS_EDIT_MMULTI 0//x07e0
#define KSTATUS_DIAL_MMULTI 0//x07e0
#define KSTATUS_VOICE_MMULTI 0//x07e0
#define KSTATUS_NORMAL_GROUP 0//x07e0
#define KSTATUS_EDIT_GROUP 0//x07e0
#define KSTATUS_DIAL_GROUP 0//x07e0
#define KSTATUS_VOICE_GROUP 0//x07e0
#define KCODE_1 0x1
#define KCODE_2 0x2
#define KCODE_3 0x3
#define KCODE_4 0x4
#define KCODE_5 0x5
#define KCODE_6 0x6
#define KCODE_7 0x7
#define KCODE_8 0x8
#define KCODE_9 0x9
#define KCODE_0 0xa
#define KCODE_NUMBER 0xb
#define KCODE_ASTERISK 0xc
#define KCODE_CLR 0xd
#define KCODE_OK 0xe
#define KCODE_POWER 0x10
#define KCODE_ALARM 0x11
#define KCODE_FUNC 0x12
#define KCODE_ONHOOK 0x13
#define KCODE_DOWN 0x14
#define KCODE_UP 0x15
#define KCODE_MULTI_SYMBOL 0x20
KEY_EXT const INT16U key_code_table[5][16];
KEY_EXT const INT16U key_analyze_table[3][KSTATUS_ANALYZE_NUM];
KEY_EXT INT8U key_tmp[2][KEYSCAN_LINE],key_code_buf[KEY_BUF_LENGTH],key_code[2];
KEY_EXT INT16U key_code_tmp[2];
KEY_EXT INT8U key_buf_start,key_buf_end,key_buf_num;
KEY_EXT INT8U timer_key_counter;
/*0x0为无效
K7 K6 K5 K4
D0 # 0 * power
D1 9 8 7 onhook
D2 6 5 4 up
D3 3 2 1 down
D4 clr func ok
14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
alarm power up down onhook func clr ok * # digit
键分类定义:数字,ok,clr,func,power,onhook,up,down,*,#
所以键编码为:12比特构成,低4位为数字编码,第4比特表示数字编码是否有效
idle-----scan1-------------down------------------------up--------idle
5ms*n 超出有效时间时解释按键 100ms
*/
typedef struct{
INT16U digit: 4;
INT16U dflag: 1;
INT16U number: 1;
INT16U asterisk: 1;
INT16U ok: 1;
INT16U clr: 1;
INT16U func: 1;
INT16U onhook: 1;
INT16U down: 1;
INT16U up: 1;
INT16U power: 1;
INT16U alarm: 1;
INT16U : 1;
}SKEY_CODE;
typedef union{
INT16U code;
SKEY_CODE scode;
}UKEY_CODE;
KEY_EXT UKEY_CODE ucode;
typedef struct{
INT16U status: 2; //定时器工作状态
INT16U end: 1; //表示本次按键是否解释处理完成过
INT16U fix: 1;
INT16U group: 1;
INT16U multi: 1;
INT16U mmulti: 1;
INT16U groupvalid: 1;
INT16U multiover: 1;
INT16U lcdstatus: 3;
INT16U edit: 1;
INT16U : 3;
}KEY_SYMBOL;
KEY_EXT KEY_SYMBOL key_symbol;
extern SLCD slcd;
#pragma INTERRUPT /E int_key //int13
#pragma INTERRUPT /E int_timer_key
KEY_EXT void chang_timer_key_counter(INT16U counter);
KEY_EXT void enable_timer_key(INT8U int_level);
KEY_EXT void disable_timer_key(void);
KEY_EXT void enable_key(INT8U int_level);
KEY_EXT void disable_key(void);
KEY_EXT void init_key(void);
KEY_EXT INT16U key_scan(INT8U type);
KEY_EXT INT16U encode_key(INT8U type);
KEY_EXT INT16U key_valid(void);
KEY_EXT void analyze_key(void);
KEY_EXT void save_keycode(void);
KEY_EXT INT16U get_keycode(INT8U type);
KEY_EXT INT16U get_key_validcode(INT8U type);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -