
矩阵键盘逻辑讲解想象一个4行4列的网格网格16个交点每个交点放一个按键。横向的线叫行线4根纵向的线叫列线4根 按键就架在行线和列线交叉点按下按键 把这根行线和列线接通。只用 448根IO口就能做16个按键。如果用独立按键16个按键要16根IO省IO。核心思路一行一行挨个试逐行扫描行线、列线默认全部是高电平。一句话单独拉低一行看看哪根列线被拉低了就能找到是哪个按键先把所有行全部拉高只把第0行拉低剩下三行保持高。现在如果这一行上某个按键被按住 → 这根按键连通行和列 → 对应的那根列线就会跟着变低。四根列全是高代表这一行没有按键按下换下一行。如果发现某一列变低说明【当前这一行 这个列】交叉点的按键按下了。延时10ms消抖机械按键按下去瞬间会抖几下防止误判再确认一次电平。然后等着手松开再返回按键编号。处理完把这一行恢复高电平继续扫描下一行4行全部扫一遍算一轮。举个例子 第2行、第1列的按键按下程序拉低第2行读到第1列变成低电平 → 判断第2行第1列按键按下。和独立按键对比独立按键一根IO管一个按键直接读这根线高低就行。 矩阵键盘线共用不能直接读要“逐行测试”才能定位按键位置。消抖就是你刚才学的两种逻辑套在矩阵键盘上按键金属弹片按下瞬间会快速抖动电平忽高忽低单片机会误以为按了很多次。检测到电平变化 → 延时等10ms再判断延时消抖确认按键按下后可以while循环卡住等到松手之后再执行功能考试简单口诀拉一行读列线 列变低找到键 延时等去抖动 查行列算键号。简单理解多键冲突如果一次性把两行都拉低同时按两个不同行的按键程序分不清到底是哪一行就乱码。所以一次只能拉低一行。键号怎么算最简单键号 行号 × 每行按键数量 列号 4×4键盘每行4个键键号 行号×4 列号比如行1列21×426就是6号按键。