赞
踩
一、对矩阵键盘有一定的了解
二、了解矩阵键盘中“扫描”概念
三、相应代码
1.main.c
- #include <REGX52.H>
- #include "Delay.h" //包含Delay头文件
- #include "LCD1602.h" //包含LCD1602头文件
- #include "MatrixKey.h" //包含矩阵键盘头文件
-
- unsigned char KeyNum;
-
- void main()
- {
- LCD_Init(); //LCD初始化
- LCD_ShowString(1,1,"MatrixKey:"); //LCD显示字符串
- while(1)
- {
- KeyNum=MatrixKey(); //获取矩阵键盘键码
- if(KeyNum) //如果有按键按下
- {
- LCD_ShowNum(2,1,KeyNum,2); //LCD显示键码 第二行第一列显示任意数字,长度为2
- }
- }
- }

2.MatrixKey.c
- #include <REGX52.H>
- #include "Delay.h"
-
- /**
- * @brief 矩阵键盘读取按键键码
- * @param 无
- * @retval KeyNumber 按下按键的键码值
- 如果按键按下不放,程序会停留在此函数,松手的一瞬间,返回按键键码,没有按键按下时,返回0
- */
- unsigned char MatrixKey()
- {
- unsigned char KeyNumber=0;
- //下面四行一组是分别扫描每一列的每一行 16个数字就有16组
- P1=0xFF;
- P1_3=0;
- if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}//和前面消抖代码一样
- if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}
- if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}
- if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}
-
- P1=0xFF;
- P1_2=0;
- if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}
- if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}
- if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}
- if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}
-
- P1=0xFF;
- P1_1=0;
- if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}
- if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}
- if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}
- if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}
-
- P1=0xFF;
- P1_0=0;
- if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}
- if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}
- if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}
- if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}
-
- return KeyNumber;
- }

3.MatrixKey.h
- #ifndef __MatrixKey_H
- #define __MatrixKey_H
-
- unsigned char MatrixKey();//引用已经编写好的MatrixKey.c中的代码
-
-
- #endif
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。