;独立按键电路配置灵活,程序编写简单,但是每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。
当按键较多时,可以采用矩阵键盘。
;
上电后,数码管无显示。
按下0-9之间任意一个按键,数码管显示该键的键值。;知识讲授;知识讲授;知识讲授;知识讲授;知识讲授;知识讲授;知识讲授;知识讲授;动手实践;
按键设置在行和列的交点上,行线、列线分别连接到按键开关的两端。;知识讲授;知识讲授;知识讲授;知识讲授;知识讲授;第一步:P1.0-P1.3输出为0(4行),P1.4-P1.7做输入(4列)。
第二步:读取P1.4-P1.7的数据并保存。
第三步:将第二步中保存的数据从P1.4-P1.7输出,此时P1.0-P1.3做输入。
第四步:读取P1的数据,若无按键按下,此时读取的数据为Oxff,若有按键按下,P1.0-P1.3中必定有一个为0(对应着被按下按键的行),P1.4-P1.7中必定有一个为0(对应着被按下按键的列)。
第五步:依据按键数组查找被按下的按键号。
举例说明:
假设0号按键被按下,P1.0-P1.3输出为0(4行),P1.4-P1.7做输入(4列),0号按键按下后,第一列对应的
引脚P1.4输入为0,此时得到的P1.4-P1.7数据为0111,将0111数据从P1.4-P1.7输出,此时P1.0-P1.3做输入,由于0号按键被按下,所以P1.0输入为0,则此时P1对应的数据为OXEE(0111_0111),也就是第一行与第一列交叉处的按键被按下了。其他按键同理,不同的按键对应着不同的P1值。;读键流程图;在最右侧数码管显示矩阵键盘的当前按键值。上一次按键值依次左移。;主函数:
定时器中断的初始化设置
键处理
定时器中断函数:
调用读键函数readkey()
调用数码管显示函数smgdis()
读键函数:
;展示