|
发表于 2023-11-13 21:27:25
|
显示全部楼层
第七集学习打卡
本次学习的中心围绕按键
1、按键的原理
(1)按键通常为两个引脚
按照如图按键结构,通过检测p3.2的电平来判断按键状态。
按键SW17松开,电路处于断开,VCC电压全部分到P3.2,检测高电平,断开
按键SW17按下,电路连通,VCC电压分流,检测低电平,导通
所以,获取按键状态,只需要获得对应引脚的电平,如P32为引脚p3.2对应的按键,0为低电平表示按下,1为高电平表示松开
#define KEY P32
(2)机械开关
根据机械开关抖动的特性,获取机械开关状态时,需要进行消抖
if (KEY==0){
Delay_ms(10);---->消抖核心,观察10ms后是否仍是按下状态
if(KEY==0)
{
执行功能
}
}
2、按键功能应用
(1)按键按下LED点亮,松开熄灭
if(KEY==0){
Delay_ms(10);
if(KEY==0){
P67=0;//灯组第七个点亮
}else{
P67=1;//灯组第七个熄灭
}
}
(2)按键按下LED熄灭,松开点亮
if(KEY==0){
Delay_ms(10);
if(KEY==0){
P67=1;//灯组第七个熄灭
}else{
P67=0;//灯组第七个点亮
}
}
(3)按下按键一次,LED状态改变一次
if(KEY==0){
Delay_ms(10);
if(KEY==0){
while(KEY==0);//防止状态频繁切换,按下一次只做一次操作
p67=!p67;//电平翻转,状态也翻转
}
(4)按键按下一次,LED向左走一次
int LED_Data=0xFE;//1111 1110
if(KEY==0){
delay_ms(10);
if(KEY==0){
LED_Data=((LED_Data<<1)+1);//使置零位向左移一位,并用1补位
if(LED_Data==0xFF)//1111 1111代表灯光已经移到最左,需要移到最右
LED_Data=0xFE;
P6=LED_Data//P6代表整个灯组的信号状态,0位点亮,1位熄灭
while(KEY==0);
}
3、针对上面的向左移动灯光的情况,也可以使用数组,将灯光的可能状态对应二进制按顺序存入数组,使用时根据下标调用
即int *LED[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
。。。
num=0;
f(KEY==0){
delay_ms(10);
if(KEY==0){
num++;
if(num==7)//1111 1111代表灯光已经移到最左,需要移到最右
num=0;
P6=LED[num]//P6代表整个灯组的信号状态,0位点亮,1位熄灭
while(KEY==0);
}
}
总结
第七节课:
按键的工作原理,消抖是关键
按键的应用场景
代码的实现过程和数组的使用
|
|