这回我们讲解的是按键模块,上一章我们讲的是LED灯模块,这次我们是基于上一次LED模块的基础上再增加的,这次的内容是关于按键控制LED灯的,
首先我们先讲一下,按键的原理,下面这个就是按键的原理图,大家看左边,四个按键连在一条线上,然后接地,这个意思就是说,按键按下才会导通,且按下后接地,输出低电平,意思就是说,S2 =0,则按键按下,S3= 0,则S3按键按下,S4=0,则S4按键按下,S5=0,则S5按下
大家看右边这张图,这张图便是控制按键的IO口连接图,我们只需要控制对应的IO口输出低电平即可控制按键
接下来我们讲解的是按键读取函数
功能:用于读取按键按下的值,并且返回对应的数值,不同的数值对应不同的按键,以下是操作上述4个按键的读取按键函数的代码
unsigned char temp;//这个变量是按键读取函数的存放返回值的变量
unsigned char Key_Read()
{
if(P3_4 == 0) temp = 1; //如果P3_4按下,则返回数值1
if(P3_5 == 0) temp = 2; //如果P3_5按下,则返回数值2
if(P3_6 == 0) temp = 3; //如果P3_6按下,则返回数值3
if(P3_7 == 0) temp = 4; //如果P3_7按下,则返回数值4
return temp;//返回出变量的值
}
接下来记住3行死代码,不需要理解啥原理,记死就行,在使用的时候直接把这几行代码原封不动的丢到代码中去
unsigned char Key_Val,Key_Down,Key_Up,Key_Old;//这四个变量依次是读取存放按键返回值的变量,按下起作用,
Key_Val = Key_Read();//读取按键值,把读取到的值放到Key_Val变量中
Key_Down = Key_Val & (Key_Old ^ Key_Val);//检测下降沿
Key_Up = ~Key_Val & (Key_Old ^ Key_Val);//检测上升沿
Key_Old = Key_Val;//扫描辅助变量
关于按键我们小结一下:分为3步走,第一步写按键读取函数,第二步设置变量,第三步编写三行死代码。这就完成了对按键的检测,消抖的操作,完成了按键模块的封装
接下来给大家演示一段代码,功能:按键控制LED灯的亮灭
switch(Key_Down)
{
case 1: P1_0 = 1; break;//按键1按下,LED1亮
case 2: P1_1 = 1; break;//按键2按下,LED2亮
case 3: P1_0 = 0; break;//按键3按下,LED1灭
case 4: P1_1 = 0; break;//按键4按下,LED2灭
}
这里的思路就是,我们采用按键按下发挥作用,用switch case 语句,完成对灯的点亮和熄灭
比如 当按键返回值为1时,则P1_0输出高电平,点亮LED灯,再跳出循环。剩下的三句,以此类推,同样的道理。