目录
首先据我个人理解,矩阵键盘其实和独立按键具有相似之处,独立按键把按键的公共端接在了GND上,另一端接在了IO口上,而矩阵键盘则是把一行的四个单独拿出去就是和独立按键差不多了

2:矩阵键盘的好处及其工作模式
矩阵键盘的好处:在键盘中按键的数量比较多的时候,为了减少IO口的占用,通常采用按键排列,就像矩阵键盘这种形式,采用逐行扫描或者住逐列扫描就可以读取按键的状态
注意:在单片机中具有一个问题,就是按行扫描的话P15口会一会儿高电平一会儿低电平(P15口会连在五线四相步进电机上然后BZ连接在蜂鸣器上,因为我们这个蜂鸣器是无源蜂鸣器,所以在进行逐行扫描的时候,蜂鸣器会发出声音 )
3:矩阵键盘扫描方式的答疑
所以一般采用逐列扫描,那么怎么进行逐列扫描呢
首先我们要选取其中的一列,假如把P13赋值为0就相当于选中了第一列,如果要按下S1,那么我们就要进行if(P17==0)的话就是选中了第一行第一列,也就是S1,以此类推,就可以对矩阵键盘进行逐列扫描。
扫描的大致思路就是上面的,那么我们就可以自己写代码了,以下我会将完整的代码写上,并按照自己的思路进行理解
4:代码展示及其解释
main.c
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"
unsigned char KeyNum;
void main()
{
LCD_Init();
LCD_ShowString(1,1,"Helloworld");
while(1)
{
KeyNum=MatrixKey();
if(KeyNum)
{
LCD_ShowNum(2,1,KeyNum,2);
}
}
}
在这里我们要用到单片机里面的那个显示屏,通过显示屏进行显示,LCD_Init()是对函数进行初始化,LCD_ShowString这个函数是用来在显示屏上进行显示
Delay.c
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
Delay.h
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay(unsigned int xms);
#endif
LCD1602.c
#include <REGX52.H>
//引脚配置:
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7;
#define LCD_DataPort P0
//函数定义:
/**
* @brief LCD1602延时函数,12MHz调用可延时1ms
* @param 无
* @retval 无
*/
void LCD_Delay()
{
unsigned char i, j;
i = 2;
j = 239;
do
{
while (--j);
} while (--i)

最低0.47元/天 解锁文章
1657

被折叠的 条评论
为什么被折叠?



