程序说明:
(1)定义矩阵键盘管脚。
(2)将扫描时用到的管脚四种输出电平状态定义成一个数组。
(3)按键扫描程序。
(4)定义两个临时变量key,i。
(5)让键盘管脚的高四位输出高电平,第四位为低电平,为扫描按键准备。
(6)如果此时管脚状态电平发生变化。
(7)将之前定义的数组中的值赋予管脚,开始逐次扫描。
(8)延时一段时间,去抖。
(9)输出扫描按键的电平。
(10)再延时一段时间。
(11)如果此时按键管脚电平依旧不是输出的默认电平,表示有键按下。
(12)延时一段时间,让电平稳定。
(13)读取当前按键管脚电平,即键值。
(14)等待按键抬起,死循环,如果按键一直按下则一直等待。
(15)返回键值。
四、调试要点与实验现象
接好硬件,通过冷启动方式将程序所生成的。hex文件下载到单片机运行后,打开串口调试助手软件,设置好波特率9600,复位单片机,然后按下板上的4×4按键中的任意一个,并注意观串口调试助手上的显示。(见图3),可以观察到在接收窗口有按键的数据显示。
图3 按键通过串口调试助手显示界面
此外,在本文所附的实验程序中,其中与串口通信中调用了发送字符函数与发送字符串函数。在没有仿真器和遇到需要显示一些提示信息的时候,可以采用串口打印的方式,这样不仅直观方便而且不增加其他成本。
五、总结
本文介绍了单片机外接键盘的工作原理并给出了实例,通过该文,我们可以知道一个完善的键盘控制程序应具备以下功能:
(1) 检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。
(2) 有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。
(3) 准确输出按键值(或键号),以满足按键功能要求。对于矩阵键盘而言,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。
此外,按键的扫描方式有多种,本文中所述的是程序扫描方式,另外常见的还有定时扫描方式和中断扫描方式,这些方式均可以在本学习板上实现,因此希望读者结合前几讲的知识,自行进行程序的编写与调试。下讲将讲述单片机动态驱动数码管原理与实例,敬请期待。
单片机中的键盘控制是电子系统中常见的输入设备接口,主要分为编码键盘和非编码键盘。编码键盘由硬件编码器识别闭合键并产生键编码,而非编码键盘则依赖于软件编程来识别按键,其中非编码键盘在单片机应用中更为常见,包括独立键盘和行列式(矩阵式)键盘。
在单片机中,键盘的处理通常涉及消除按键抖动的问题。由于物理接触的抖动,按键按下和释放时,触点会产生不稳定信号。为了得到稳定的按键状态,需要在检测到按键变化后加入适当的延时,以确保读取到的是稳定状态。这一过程称为去抖动处理,通常通过软件延时函数实现。
对于矩阵键盘,行线和列线的配合使用是识别按键位置的关键。例如,首先将行线设置为输出高电平,列线设置为输入,然后逐一检测列线的电平变化。如果有按键按下,对应的列线将被拉低,通过判断行线和列线的低电平组合,就能确定哪个按键被按下。在程序设计中,这通常涉及一个循环扫描的过程,以及临时变量key和i来记录和处理按键状态。
在实际应用中,单片机通过串口通信可以将按键信息实时传输到PC端的串口调试助手,以便观察和调试。串口通信中常用到的函数有发送字符函数和发送字符串函数,这些功能在没有仿真器的情况下提供了一种直观且低成本的显示手段。
一个完整的键盘控制程序应该具备以下功能:
1. 检测按键是否按下,同时通过硬件或软件去抖动。
2. 确保每次只处理一个按键,不论按键持续时间多长,系统仅执行一次相应功能。
3. 准确输出按键值,满足系统需求。对于矩阵键盘,需正确处理行线和列线信号。
此外,键盘扫描方式有程序扫描、定时扫描和中断扫描等,每种方式都有其适用场景,可以根据具体需求选择。例如,程序扫描适合低功耗和简单系统,定时扫描适合实时性要求较高,而中断扫描则能在按键按下时快速响应。
通过本文的介绍,我们可以了解到单片机键盘控制的基本原理和实现方法,为进一步学习单片机动态驱动数码管或其他输入输出设备奠定了基础。在实际项目中,可以根据不同的应用场景选择合适的键盘类型和扫描方式,以实现高效且稳定的用户交互。