文章目录
前言本文介绍一下蓝桥杯单片机按键考点,以总结的角度去讲解,对底层代码不做过多介绍,对底层有疑问可以看底层代码讲解文章或b站up柳离风视频。
一、按键底层代码二、按键触发方式(近几年S4、S5、S8、S9考频很高,就以这四个按键为例)1.按下生效、松手生效2.短按、长按生效3.双按键4.双击5.组合按键(根据排列组合,大概有二十一种组合方式,一定要灵活使用)
三、按键功能1.状态切换2.参数调整3.多界面(等一会更新)4.切换选中单元5.键盘输入(等一会更新)6.按键禁用7.任意按键生效8.记录无效按键
总结
前言
本文介绍一下蓝桥杯单片机按键考点,以总结的角度去讲解,对底层代码不做过多介绍,对底层有疑问可以看底层代码讲解文章或b站up柳离风视频。
提示:以下是本篇文章正文内容,下面案例可供参考
一、按键底层代码
按键底层一共有两种,独立按键和矩阵键盘。(这里按键消抖使用定时器任务调度来实现)
bit key_up = 1;
//独立按键
uchar key_scan1()
{
if(key_up == 1 && (P30 == 0 || P31 == 0 || P32 == 0 || P33 == 0))
{
key_up = 0;
if(P30 == 0) return 1;
else if(P31 == 0) return 2;
else if(P32 == 0) return 3;
else if(P33 == 0) return 4;
}
else if(P30 == 1 && P31 == 1 && P32 == 1 && P33 == 1)
key_up = 1;
return 0;
}
//矩阵键盘
uchar key_scan2()
{
uchar key;
P44 = P42 = P35 = P34 = 1;
P30 = P31 = P32 = P33 = 0;
if(key_up == 1 &&(P44 == 0 || P42 == 0 || P35 == 0 || P34 == 0))
{
if(P44 == 0) key = 1;
else if(P42 == 0) key = 2;
else if(P35 == 0) key = 3;
else if(P34 == 0) key = 4;
else return 0;
P44 = P42 = P35 = P34 = 0;
P30 = P31 = P32 = P33 = 1;
key_up = 0;
if(P30 == 0) key = key;
else if(P31 == 0) key = key + 4;
else if(P32 == 0) key = key + 8;
else if(P33 == 0) key = key + 12;
return key;
}
else if(P44 == 1 && P42 == 1 && P35 == 1 && P34 == 1)
key_up = 1;
//如果题目考到第一二行按键并且使用串口收发,在这行需要加一句P30 = 1;P31 = 1;让通信时序恢复
return 0;
}
//矩阵键盘如果题目没有用到全部按键一定要删除多余的引脚,否则会干扰别的功能,例如P34引脚和NE555模块互相干扰。
//比如题目用到S4、S5、S8、S9,你会发现P30、P31、P34、P35未使用,可以删除
uchar key_scan2()
{
uchar key;
P44 = P42 = 1;
P32 = P33 = 0;
if(key_up == 1 &&(P44 == 0 || P42 == 0 ))
{
if(P44 == 0) key = 1;
else if(P42 == 0) key = 2;
else return 0;
P44 = P42 = 0;
P32 = P33 = 1;
key_up = 0;
if(P32 == 0) key = key ;
else if(P33 == 0) key = key + 2;
return key;
}
else if(P44 == 1 && P42 == 1)
key_up = 1;
return 0;
}
//主函数中的按键处理任务
void key_task()
{
uchar key;
if(key_dly |