📄 key.c
字号:
#include "reg52.h"
#include "absacc.h"
/********************************************/
/* 外部端口硬件地址 */
/********************************************/
#define COLUMN1 P14
#define COLUMN2 P13
#define COLUMN3 P12
#define COLUMN4 P11
#define COLUMN5 P10
#define BELL P15
#define ARRAY1 P00
#define ARRAY2 P01
#define ARRAY4 P02
#define ARRAY3 P03
/*
以上宏定义描述了矩阵键盘行列线的硬件地址,键盘位置与行列线对应关系如下:
COLUMN1 COLUMN2 COLUMN3 COLUMN4 COLUMN5
ARRAY1 KEY1 KEY2 KEY3 KEY4 KEY5
ARRAY2 KEY6 KEY7 KEY8 KEY9 KEY10
ARRAY3 KEY11 KEY12 KEY13 KEY14 KEY15
ARRAY4 KEY16 KEY17 KEY18 KEY19 KEY20
*/
#define KEYINST0 P04
#define KEYINST1 P05
#define KEYINST2 P06
#define KEYINST3 P07
/* 以上宏定义描述了主CPU给键盘单片机的命令线的硬件地址 */
#define KEYCODE P2
#define KEYCODE0 P20
#define KEYCODE1 P21
#define KEYCODE2 P22
#define KEYCODE3 P23
#define KEYCODE4 P24
#define KEYCODE5 P25
#define KEYCODE6 P26
#define KEYCODE7 P27
/*以上宏定义描述了键盘单片机给主CPU的键码线的硬件地址*/
#define KEYSTB P17/*外设数据准备好信号线硬件地址,键盘单片机给主CPU*/
#define KEYIBF P35/*输入数据满信号,主CPU给键盘单片机*/
/********************************************/
/* 常量定义 */
/********************************************/
/* 计时器常量 */
//#define TL0_DATA 0x78
//#define TH0_DATA 0xec/*0xec78: 0.01秒中断一次*/
//#define TL1_DATA 0xb0
//#define TH1_DATA 0x3c/*0x3cb0: 0.1秒中断一次*/
#define TL0_DATA 0x00
#define TH0_DATA 0xdc/*0xdc00: 0.01秒中断一次 11.0592M*/
#define TL1_DATA 0x00
#define TH1_DATA 0x00/*0x00: 0.07秒中断一次 11.0592M*/
#define DELAYTIME 3/*按键复用时两次按键按下之间时间间隔的最大值*/
/********************************************/
/* 全局变量 */
/********************************************/
bit bArray1;/*bArray1标志键盘行线1状态*/
bit bArray2;/*bArray2标志键盘行线2状态*/
bit bArray3;/*bArray3标志键盘行线3状态*/
bit bArray4;/*bArray4标志键盘行线4状态*/
unsigned char idata ucKeyMultiUse;/*ucKeyMultiUse标志键盘是否复用,0否,1是*/
unsigned char idata ucKeyDown;/*ucKeyDown标志是否有键按下,0否,1是*/
unsigned char idata ucKeyUp;/*ucKeyUp标志按键是否曾松开,0否,1是*/
unsigned char idata ucKeyDelay;/*ucKeyDelay标志是否已延迟10毫秒,0否,1是*/
unsigned char idata ucKeyCode;/*ucKeyCode标志键码*/
unsigned char idata ucKeyDownTime;/*ucKeyDownTime标志按键按下次数*/
unsigned char idata ucDelayTime;/*ucDelayTime标志两次按键按下之间的时间间隔*/
unsigned char idata ucCountDelayTime;
/*ucCountDelayTime标志是否对ucDelayTime计时,0否,1是*/
unsigned char idata ucKeyNo;
/*ucKeyNo在键盘不复用时标志何键被按下,复用时标志上次何键被按下*/
unsigned char idata ucKeyNoNew;/*ucKeyNoNew标志在键盘复用时最近一次何键被按下*/
unsigned char idata ucBell;/*ucBell标志蜂鸣器状态,0不响,1要响,2在响*/
/********************************************/
/* 子函数 */
/********************************************/
/************* whether_key_down() 检查是否有键按下
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -