51单片机4×4矩阵按键扫描方法.docVIP

  • 2
  • 0
  • 约1.76千字
  • 约 5页
  • 2019-06-25 发布于河北
  • 举报
51单片机4×4矩阵按键扫描方法

/*****4×4按键扫描******/ /*** 编程要点 1.首先检测是否有按键按下 2.若有按键按下,即进行行检测,列检测 3.行检测:高4位设为0,低4位为1,进行检测 0x0f 4.列检测:低4位设为0,高4位为1,进行检测 0xf0 5.检测按键是否松开 6.送至LED显示,前四个代表第几行 后四个代表第几列 P0 为 led灯口 P2 为 按键接口 ****/// #includereg51.h #define uchar unsigned char #define key P2 //P2口定义,便于调用 #define led P0 //P0口定义,便于调用 unsigned char line_num,row_num;//行列定义 led_arry[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数组定义,便于显示 //******检测是否有按键按下*****// uchar Check_Button() { key=0x0f; //高四位为0 if(key==0x0f) //若无变化,证明无按键按下 return 0; //返回0 else //否则 return 1; //返回1 } //********行检测********// uchar Line[]={0x0e,0x0d,0x0b,0x07}; //那个按键按下,检测出的状态则对应数组中的第几个数 void Check_Line() { uchar i; key=0x0f; //高四位为0 for(i=0;i4;i++) { if(key==Line[i]) { line_num=i; //取出检测值 break; //结束行检测 } } } //********列检测*********// uchar Row[]={0xe0,0xd0,0xb0,0x70};//那个按键按下,检测出的状态则对应数组中的第几个数 void Check_Row() { uchar j; key=0xf0; //低4位置0 for(j=0;j4;j++) { if(key==Row[j]) { row_num=j; //取出检测值 break; //结束行检测 } } } /*******按键松开检测*********/ uchar Check_Release() { key=0xf0; //低四位为0 if(key==0xf0) //若无变化,证明按键松开 return 0; //返回0 else //否则,按键未松开 return 1; //返回1 } //*********主函数*********// int main() { key=0xff; //按键初始化 led=0xff; //关闭LED灯 while(1) { while(!Check_Button()); //若无按键按下,则等待,若有继续下一步 Check_Line(); //行检测 Check_Row(); //列检测 while(Check_Release()); //检测按键是否松开 led=led_arry[line_num]led_arry[row_num+4]; //送至led显示 /* eg:如果是第三行第二列按键按下 则第3个、第6(2列+4)个LED灯亮 如下图所示(Proteus仿真电路图) */ } }

文档评论(0)

1亿VIP精品文档

相关文档