📄 一个典型的线翻转法按键程序.txt
字号:
[原创]一个典型的线翻转法按键程序
处理器是Mega16 编译器是Codevision 1。24。4a
十六各按键,标准矩阵键盘
void KeyScan(){
unsigned char lowKey;
unsigned char highKey;
static unsigned char keyActCount=0 ; //按键闭合时间计数
if (gKeyScan == TRUE){ //是否允许扫描键盘,
lowKey = PINA;
if((lowKey &= 0x87) != 0x87){ //判断键盘行线是否都为高电平
//如果行线中有低电平的,说明有键闭合
DDRA=0x87;
PORTA =0x78; //翻转行列线电平方向
delay_ms(1);
highKey = PINA;
if ((highKey &0x78) !=0x78){ //判断列线电平状态,如果有低电平的进入译码过程
switch (lowKey) {
case 0x83:
GetKeyValue(KEY_1,KEY_2,KEY_3,KEY_YES,YES_KEY);
break;
case 0x85:
GetKeyValue(KEY_4,KEY_5,KEY_6,KEY_NO,NO_KEY);
break;
case 0x86:
GetKeyValue(KEY_7,KEY_8,KEY_9,KEY_UP,DOWN_KEY);
break;
case 0x07:
GetKeyValue(KEY_X,KEY_0,KEY_J,KEY_DOWN,UP_KEY);
break;
default:break;
}
if (++keyActCount > MAX_KEY_COUNT) { //连续长时间按键 进入第二功能
keyActCount=0;
gKeyValue = preKeyValue;
if (keyToneStatus == TRUE) keyTone = TRUE;
if ((gKeyValue >='1' ) &&(gKeyValue<='5')) {
gKeyValue -='0'; //连续按住1-5号键时为快捷键
gKeyAttr = FAST_KEY;
}
}
}
DDRA=0x78; //恢复行列线初始状态 列线输出低电平,行线做输入
PORTA = 0x87;
gKeyScan =FALSE;
}
//没有键闭合
else{
if (preKeyValue != 0){ //在按键打开后,按键才生效
gKeyValue = preKeyValue;
keyActCount=0;
preKeyValue = 0x00;
}
}
}
}
void GetKeyValue(unsigned char col0Value,
unsigned char col1Value,
unsigned char col2Value,
unsigned char col3Value,
unsigned char col3Attr
){
gKeyAttr = NUM_KEY;
if (KEY_COL0 ==0) {preKeyValue = col0Value; }
else if (KEY_COL1 ==0) {preKeyValue = col1Value; }
else if (KEY_COL2 ==0) {preKeyValue = col2Value; }
else if (KEY_COL3 ==0) {preKeyValue = col3Value; gKeyAttr = col3Attr;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -