文档详情

经典的矩阵键盘扫描程序.doc

发布:2017-06-11约1.19万字共18页下载文档
文本预览下载声明
经典的矩阵键盘扫描程序 查找哪个按键被按下的方法为:一个一个地查找。 ??????? 先第一行输出0,检查列线是否非全高; ??????? 否则第二行输出0,检查列线是否非全高; ??????? 否则第三行输出0,检查列线是否非全高; ??????? 如果某行输出0时,查到列线非全高,则该行有按键按下; ??????? 根据第几行线输出0与第几列线读入为0,即可判断在具体什么位置的按键按下。 下面是具体程序: void Check_Key(void) { ??? unsigned char row,col,tmp1,tmp2; ??? tmp1 = 0x10;????? ??????//tmp1用来设置P1口的输出,取反后使P1.4~P1.7中有一个为0 ??? for(row=0;row4;row++)???// 行检测 ?{ ??????? P1 = 0x0f;?????? ?????// 先将p1.4~P1.7置高 ??????? P1 =~tmp1;?????? ?????// 使P1.4~p1.7中有一个为0 ??????? tmp1*=2;?????? ??????// tmp1左移一位 ??????? if ((P1 0x0f) 0x0f)????// 检测P1.0~P1.3中是否有一位为0,只要有,则说明此行有键按下,进入列检测 ??{?? ???tmp2 = 0x01;?????// tmp2用于检测出哪一列为0 ???for(col =0;col4;col++)???// 列检测 ???{?? ????if((P1 tmp2)==0x00)??// 该列如果为低电平则可以判定为该列 ????{? ?????key_val =key_Map[ row*4 +col ];?// 获取键值,识别按键;key_Map为按键的定义表 ?????return;?????// 退出循环 ????} ???tmp2*=2;??????// tmp2左移一位 ??????????? } ??????? } ??? } }???? //结束 ??????? 这是一种比较经典的矩阵键盘识别方法,实现起来较为简单,程序短小精炼。 4*4矩阵键盘扫描程序/* 设置行线为输入线,列线为输出线 */ uchar KeyScan();? ? ? ? //按键扫描子程序 void delay10ms();? ? ? ? //延时程序 uchar key_free();? ? ? ? //等待按键释放程序 void key_deal();? ? ? ? //键处理程序 //主程序 void main() { ? ? ? ? while(1) ? ? ? ? { ? ? ? ? KeyScan(); ? ? ? ? key_free(); ? ? ? ? key_deal(); ? ? ? ? } } //按键扫描子程序 uchar KyeScan() { unsigned char key,temp; P1=0xF0; if(P10xF0!=0xF0) { ? ? ? ? delay10ms();? ? ? ? //延时去抖动 ? ? ? ? if(P10xF0!=0xF0) ? ? ? ? { ? ? ? ? P1=0xFE;? ? ? ? //扫描第一列 ? ? ? ? temp=P1; ? ? ? ? temp=temp0xF0; ? ? ? ? if(temp!=0xF0)? ? ? ? //如果本列有键按下 ? ? ? ? { ? ? ? ? ? ? ? ? switch(temp) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? case 0xE0:? ? ? ? //第一行有键按下 ? ? ? ? ? ? ? ? key=;break; ? ? ? ? ? ? ? ? case 0xD0:? ? ? ? //第二行有键按下 ? ? ? ? ? ? ? ? key=4;break; ? ? ? ? ? ? ? ? case 0xB0:? ? ? ? //第三行有键按下 ? ? ? ? ? ? ? ? key=8;break; ? ? ? ? ? ? ? ? case 0x70:? ? ? ? //第四行有键按下 ? ? ? ? ? ? ? ? key=12;break; ? ? ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? P1=0xFD;? ? ? ? //扫描第二列 ? ? ? ? temp=P1; ? ? ? ? temp=0xF0; ? ? ? ? if(temp!=0xF0) ? ? ? ? { ? ? ? ? ? ? ? ? switch(temp) ? ? ? ? ? ?
显示全部
相似文档