微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 矩阵键盘扫描_无延时

矩阵键盘扫描_无延时

时间: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;
                }
        }        
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top