⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.h

📁 通讯误码仪测试软件
💻 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 + -