3.2.矩阵键盘控制|蓝桥杯单片机备赛
在天上飞的TTTTT
2022年01月15日 12:41
收录于文集
共14篇

0.本节任务

       了解矩阵键盘的连接原理、扫描方式,设计相应程序实现功能(16个按键让数码管显示0~15)。

1.原理图

       与上一节类似,但是矩阵键盘用到了8个IO口,4x4就能实现十六个按键的控制,比单独的按键更能节省IO口。这里需要将J5端1,2脚连接。

需要控制的引脚

2.工作原理

       矩阵键盘按键的识别有行扫描和线反转两种方法,这里介绍行扫描法。

       我们可以把原理图上P30~P33脚看作四行,P44,P42,P35,P34看作四列。IO口通过上拉电阻接到电源,因此默认状态下,IO口为高电平。我们可以利用四列作为输入端,四行作为输出端,当没有按键按下时,四列输入都为高电平如果让一行输出端输出低电平,当按键按下时,对应的那一列就会被拉低,只要识别到低电平就可以知道按下了哪个按键。

      具体做法:

  • 逐行输出低电平,检测每一列是否为高电平;

  • 如果检测到四列均为高电平,则这一行没有按键按下;

  • 如果检测到有一列是低电平,则这一行有按键按下,通过这一行和这一列就可以确定是哪一个按键按下;

  • 由于单片机运行速度很快,我们只要重复执行扫描,就可以在按下按键瞬间检测到。

举个例子,假设S10按键被按下

开始扫描,第一行输出0,检测到四列全是高电平,第一行没有按键按下

紧接着第二行输出0,由于S10按下导通,第二列被拉低,检测到P42为低电平,则可以确定第二列第二行的按键被按下,然后执行相应功能

3.程序设计

要让数码管从0输出到F,我们需要一个段码:

然后开始写扫描按键的函数:

先写出第一行和扫描第一列的函数

DisplaySMG( );这个函数在前面数码管的章节曾讲到,这里不再赘述,它可以把输入的参数(0~17)显示到数码管上

快速copy下来,改动一些变量即可

接着在copy出扫描第二行、第三行、第四行的代码:

第二行

第三行

第四行

在main函数中调用这个函数

烧入后运行:

4.反思与总结

       这节课主要学习了矩阵键盘的行扫描法,具体还是比较简单的,写代码也没有遇到什么大的问题。看了看蓝桥杯官方的指导书,代码写得非常简洁,位操作的代码很多也很巧妙,对芯片寄存器的理解也更深。(但是我真不想看芯片指导书)


       下一节就应该讲中断了!这算是单片机一个很重要的部分了!bollboll三连!!!