矩阵键盘扫描_无延时
时间:10-02
整理:3721RD
点击:
/*******************************************************************************
* 功能:矩阵键盘扫描
*
*
* 特点:无延时
*******************************************************************************/
#include "stc89xx.h"
#include "config.h"
#include "MyType.h"
#include "keyArray.h"
#define keyArray_port P2
volatile unsigned char keyArray_value;
void key_timer0_init(void)
{
TMOD&=0xF0;
TMOD|=0x01;
TH0=(65536-Fclk/1000/12*5+15)/256; //定时间隔为5ms,加15是为了修正重装所花费时间
TL0=(65536-Fclk/1000/12*5+15)%256;
ET0=1;
TR0=1;
EA=1;
}
/********************************************************************
函数功能:在定时器0中断里获取按键
入口参数:无。
返 回:无。
备 注:22.1184M晶体约5ms中断一次。
********************************************************************/
void Timer0Isr(void) interrupt 1
{
static unsigned char i;
static unsigned char keyArray_timer;
TH0=(65536-Fclk/1000/12*5+15)/256; //定时间隔为5ms,加15是为了修正重装所花费时间
TL0=(65536-Fclk/1000/12*5+15)%256;
keyArray_timer++; //防抖动时间
if(i==4) i=0;
keyArray_port=( 0xfe << i );
if(keyArray_timer==2)
{ i++;
keyArray_timer=0;
switch(keyArray_port)
{
case 0xee:keyArray_value=KEYV1_PUSHED;break;
case 0xde:keyArray_value=KEYV2_PUSHED;break;
case 0xbe:keyArray_value=KEYV3_PUSHED;break;
case 0x7e:keyArray_value=KEYV4_PUSHED;break;
case 0xed:keyArray_value=KEYV5_PUSHED;break;
case 0xdd:keyArray_value=KEYV6_PUSHED;break;
case 0xbd:keyArray_value=KEYV7_PUSHED;break;
case 0x7d:keyArray_value=KEYV8_PUSHED;break;
case 0xeb:keyArray_value=KEYV9_PUSHED;break;
case 0xdb:keyArray_value=KEYV10_PUSHED;break;
case 0xbb:keyArray_value=KEYV11_PUSHED;break;
case 0x7b:keyArray_value=KEYV12_PUSHED;break;
case 0xe7:keyArray_value=KEYV13_PUSHED;break;
case 0xd7:keyArray_value=KEYV14_PUSHED;break;
case 0xb7:keyArray_value=KEYV15_PUSHED;break;
case 0x77:keyArray_value=KEYV16_PUSHED;break;
default: keyArray_value=KEYV0_PUSHED;break;
}
}
}