单片机矩阵键盘
- 格式:ppt
- 大小:2.33 MB
- 文档页数:14


51单片机矩阵键盘原理
51单片机矩阵键盘原理
矩阵键盘是一种常用的输入设备,可以通过少量的I/O口控制多个按键。51单片机作为嵌入式系统中常用的控制器,也可以通过控制矩阵键盘来实现输入功能。
1. 矩阵键盘的结构
矩阵键盘由多个按键组成,每个按键都有一个引脚与其他按键共用,形成了一个按键矩阵。例如,4x4的矩阵键盘有16个按键,其中每行和每列各有4个引脚。
2. 矩阵键盘的工作原理
当用户按下某一个按键时,该按键所在行和列之间会形成一个电路通路。这时,51单片机可以通过扫描所有行和列的电路状态来检测到用户所按下的具体按键。
具体实现过程如下:
(1)将每一行引脚设置为输出状态,并将其输出高电平;
(2)将每一列引脚设置为输入状态,并开启上拉电阻;
(3)逐一扫描每一行引脚,当发现某一行被拉低时,则表示该行对应的某一个按键被按下;
(4)记录下该行号,并将该行引脚设置为输入状态,其余行引脚设置为输出状态;
(5)逐一扫描每一列引脚,当发现某一列被拉低时,则表示该列对应的是刚才所记录下的行号及其对应的按键;
(6)通过行号和列号确定具体按键,并进行相应的处理。
3. 代码实现
下面是一个简单的51单片机矩阵键盘扫描程序:
```c
#include //头文件
sbit row1 = P1^0; //定义引脚 sbit row2 = P1^1;
sbit row3 = P1^2;
sbit row4 = P1^3;
sbit col1 = P1^4;
sbit col2 = P1^5;
sbit col3 = P1^6;
sbit col4 = P1^7;
unsigned char keyscan(void) //函数定义
{
unsigned char keyvalue; //定义变量
while(1) //循环扫描
{
row1=0;row2=row3=row4=1; //设置行状态
实验五 矩阵键盘实验
一、实验内容
1、编写程序,做到在键盘上每按一个数字键(0-F)用发光二极管将该代码显示出来。按其它键退出。
2、加法设计计算器,实验板上有12个按键,编写程序,实现一位整数加法运算功能。可定义“A”键为“+”键,“B”键为“=”键。
二、实验目的
1、 学习独立式按键的查询识别方法。
2、 非编码矩阵键盘的行反转法识别方法。
三、实验说明
1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。
2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。
3、识别键的闭合,通常采用行扫描法和行反转法。行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。
行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。
由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。
行反转法识别按键的过程是:首先,将4个行线作为输出,将其全部置0,4个列线作为输入,将其全部置1,也就是向P1口写入0xF0;假如此时没有人按键,从P1口读出的值应仍为0xF0;假如此时1、4、7、0四个键中有一个键被按下,则P1.6被拉低,从P1口读出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚才从P1口读出的数的低四位置1后再写入P1口,即将0xBF写入P1口,使P1.6为低,其余均为高,若此时被按下的键是“4”,则P1.1被拉低,从P1口读出的值为0xBE;这样,当只有一个键被按下时,每一个键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被按下了。
/*风清云扬*/
# include <>
#define uchar unsigned char
#define uint unsigned int
void delay(uint i)
{
uchar x,j;
for(j=0;j
for(x=0;x<=148;x++);
}
unsigned char key_scan()
{
uchar temp0,temp1;
uchar num=0;
P1=0X0F;
temp0=P1;
if(temp0!=0X0F)
{
delay(10);
if(temp0!=0X0F)
{
P1=0XF0;
temp1=P1;
if(temp0==0x0e)
{
switch (temp1)
{ case 0xe0: num=4;break;
case 0xd0: num=3;break;
case 0xb0: num=2;break;
case 0x70: num=1;break;
default:num=0;break;
}
}
else if(temp0==0x0d)
{
switch (temp1)
{
case 0xe0: num=8;break;
case 0xd0: num=7;break;
case 0xb0: num=6;break;
case 0x70: num=5;break;
default:num=0;break;
}
}
else if(temp0==0x0b)
{
switch (temp1)
{
case 0xe0: num=12;break;
case 0xd0: num=11;break;
一、实验目的
1.掌握4×4矩阵式键盘程序识别原理
2.掌握4×4矩阵式键盘按键的设计方法
二、设计原理
(1)如图14.2所示,用单片机的并行口P3连接4×4矩阵键盘,并以单片机
的P3.0-P3.3各管脚作输入线,以单片机的P3.4-P3.7各管脚作输出线,在数码
管上显示每个按键 “0-F”的序号
(2)键盘中对应按键的序号排列如图14.1所示
三、参考电路
740)this.width=740" border=undefined>
图14.2 4×4矩阵式键盘识别电路原理图
740)this.width=740" border=undefined>
图14.1 4×4键盘0-F显示
740)this.width=740" border=undefined>
图14.3 4×4矩阵式键盘识别程序流程图
四、电路硬件说明
(1)在“单片机系统”区域中,把单片机的P3.0-P3.7端口通过8联拨动拨码
开关JP3连接到“4×4行列式键盘”区域中的M1-M4,N1-N4端口上
(2)在“单片机系统”区域中,把单片机的P0.0-P0.7端口连接到“静态数码显
示模块”区域中的任何一个a-h端口上;要求:P0.0对应着a,P0.1对应着b,……,
P0.7对应着h
五、程序设计内容
(1)4×4矩阵键盘识别处理
(2)每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编
码矩阵的行线和列线分别通过两并行接口和CPU通信键盘的一端(列线)通过
电阻接VCC,而接地是通过程序输出数字“0”实现的键盘处理程序的任务是:确定
有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时
的抖动两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输
入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,
查出该键的功能
六、程序流程图(如图14.3所示)