课程摘要
这节课围绕矩阵键盘展开。16个按键若用独立按键接法会占用过多I/O口,因此采用行列交叉的矩阵连接;矩阵键盘与独立按键本体相同,区别只在连线方式。识别按键有行扫描、列扫描、行列扫描三类方法,只需掌握一种,本次重点讲行扫描。行扫描先把P1口全置1,即P1=0xFF,再单独把一列置0,读取P1.7至P1.4判断哪行为0,并用key_number记录编号;逐列重复即可覆盖16个按键。扫描函数返回unsigned char,使用局部变量,四组判断后return按键值,主函数判断返回值等于1或16再执行操作。演示时模拟软件刷新慢,需要多按或延长停留,代码发到QQ群。结论是难点在连线与按键对应关系,代码结构并不复杂。
要点
- 16个按键若用独立按键接法会占用过多I/O口,因此采用矩阵键盘。
- 矩阵键盘与独立按键的按键本身相同,唯一区别是连线方式:行连一行、列连一列。
- 识别按键有行扫描、列扫描、行列扫描三种方法,初学者掌握一种即可。
- 行扫描先令P1=0xFF,再逐列单独置0,读P1.7至P1.4判断按键。
- 每列扫描后恢复P1=0xFF,重复单列置0和读取,覆盖16个按键并赋key_number。
- 扫描函数返回类型用unsigned char,参数可写void或省略,内部定义key_number。
- max函数示例比较a、b、c后return最大值,返回值可当变量使用。
- 局部变量只在定义它的括号内有效,括号外使用会直接报错。
- 主函数判断扫描函数返回值等于1或16,执行对应操作;代码已发QQ群。
- 演示中模拟软件刷新慢,需要多按或延长停留,否则容易看似无反应。
涉及知识点
- 矩阵键盘:用行列交叉连接减少I/O口占用的按键输入方式。
- 独立按键:每个按键单独接一个I/O口的连接方式。
- 行扫描:逐列置0并读行线电平,判断矩阵按键位置。
- 列扫描:逐列扫描判断按键,原理与行扫描相同。
- 行列扫描:逐行逐列组合判断按键的方法,了解即可。
- P1=0xFF:把P1口八位全部置1,作为扫描初始状态。
- P1.7/P1.6/P1.5/P1.4:扫描时读取的行线,用于判断哪一行按下。
- key_number:保存当前扫描到的按键编号的局部变量。
- unsigned char:C语言函数返回类型,用于返回按键编号。
- return:结束函数并返回max值或key_number。
- max:示例函数,比较a、b、c并返回最大值。
- 局部变量:只在定义它的括号内有效的变量。