
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三连!!!