匿名
未登录
登录
丢石头百科
搜索
查看“Arduino实验四:矩阵键盘实验”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
Arduino实验四:矩阵键盘实验
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 模块介绍 == === 模块说明 === 矩阵键盘作为单片机的外接设备,当所需的按键数量较多时,为减少I/O口的占用,提高单片机的利用率,通常会将按键排成矩阵形式。即在矩阵键盘中,每条水平线与垂直线之间是通过一个按键连接的,这样单片机的一个8位端口就可以控制4*4=16个矩阵式按键,相较于直接用端口控制按键的方法多出一倍。而且当线路越多时,区别就越明显。 === 扫描原理 === 矩阵键盘的结构相较于独立键盘复杂一些,单片机对其进行的识别也会复杂一些。矩阵键盘的扫描方式有两种:行列扫描法和逐行/逐列扫描法。行列扫描法也称为线反法,适用于矩阵键盘受单片机连续的I/O口控制的情况;逐行/逐列扫描法适用于矩阵键盘被接入了单片机的任意I/O口的情况。在实际单片机应用中更为常用的是行列扫描法。 下面以4*4矩阵键盘为例,其中四条行线(第一行开始)接入单片机的P1.0-P1.3,四条列线(第一列开始)接入P1.4-P1.7。 *'''行列扫描法''' **使P1口的高四位输出高电平,低四位输出低电平,此时列线被拉高,行线被拉低。假设有按键按下,则某一列的电平将会被拉低,此时读取P1口高四位(四个列)的电平,若读取到的值不全为高电平,说明有按键按下,可通过读取到的值判断是第几列。再使P1口的高四位输出低电平,低四位输出高电平,读取P1口低四位(四个行)的电平,此时读取到的值不再全为高电平,可通过读取到的值判断是第几行。将两次读取的结果组合起来就可以得到当前按键的键值,从而确定按下按键的位置。 *'''逐行/逐列扫描法''' **逐行/逐列扫描法本质和行列扫描法类似,即给某一行/某一列输出低电平,其余七个全部为高电平,此时读取电平变化,若由低电平则说明有按键键按下,可根据读取的键值判断按键按下的位置。 **具体操作如下:将第一行置为低电平,其余三行和四列置为高电平。读取列线的数据,若列线不全为高电平表示第一行有按键按下,可根据读取的数据判断是第一行的哪一列按键按下;若列线全为高电平,则将第二行置为低电平,其余三行和四列置为高电平,读取列线的数据,判断是否有按键按下。重复上述动作,并以此类推。 == 实验说明 == === 实验现象 === *串口输出按下按键的键值 === 电路连接 === *[[File:Arduino实验四:矩阵键盘实验_接线1.png|500px]] === 主要程序 === <pre> for (int i = 0; i < 4; i++) { digitalWrite(C[i], LOW); } if (!digitalRead(R[0]) || !digitalRead(R[1]) || !digitalRead(R[2])|| !digitalRead(R[3])) { delay(10); if (!digitalRead(R[0]) || !digitalRead(R[1]) || !digitalRead(R[2])|| !digitalRead(R[3])) { digitalWrite(C[0], LOW);//扫描第一列 digitalWrite(C[1], HIGH); digitalWrite(C[2], HIGH); digitalWrite(C[3], HIGH); for (int j = 0; j < 4; j++) { if (!digitalRead(R[j])) { Serial.print("S"); Serial.print(j * 4 + 1);//在串口监视器中输出键盘编号 Serial.println(" has been pressed"); while (!digitalRead(R[j])); Serial.println("The button has been loosened"); } } .................... </pre> === 注意事项 === *需将按键连接引脚配置为输入上拉模式,这样该引脚在没有外接信号输入的情况可下保持高电位,则写为:pinMode(9, INPUT_PULLUP); *若单纯写为:pinMode(9, INPUT),则该引脚的状态会不稳定。出现0和1无规律变化,从而影响程序判断。 === 相关下载 === *[[:File:Arduino实验四:矩阵键盘实验.zip|Arduino实验四:矩阵键盘实验]]
返回至
Arduino实验四:矩阵键盘实验
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志