蓝桥杯 单片机 独立按键 的使用

独立按键 使用

独立按键原理

独立按键在电路中相当于一个开关,当按键按下时,电路闭合,松手时按键自动抬起,电路断开。
独立按键一端连接单片机I/O口,一端接地。
单片机I/O顾名思义,就是既能输入也能输出,直白来讲,就是能输出高低电平,也能读取高低电平。
当按键按下时,相当于单片机I/O直接接地,读取出来的电平就是低电平。

独立按键使用代码

独立按键在闭合和断开时会产生抖动现象,需要进行消抖。
图为按键闭合和断开时产生的抖动图

if(P30==0) //当检测到按键按下时,不直接执行需要的程序,先进行10ms的等待(消抖)
{
DelayMs(10); //延时10ms,消除抖动
if(P30 == 0) //当10ms后,再次检测仍然按下时执行下面代码
{
//执行代码;
}
while(!P30); //松手检测,当按键未松开时,P30=0,即!P30=1;在whlie循环中等待,当松开手时,!P30=0,跳出等待
}
独立按键是蓝桥杯中最为简单的模块之一,但是却是蓝桥杯中,最为不可或缺的一部分。独立按键是人机接口之一,比赛中对按键考核及逻辑思路的考察很多,希望同学们在学习过程中多多思考,将独立按键的使用尽可能穿插到各个模块之中。

独立按键控制其他部分

例如:独立按键控制led灯。
led灯,我们之前已经了解过了,但是led灯的使用远远不止流水灯那么简单,还可以用作指示信号或者警示信号。
下面我们就独立按键和led灯综合使用分析一下

初步问题:

当某个按键按下时,有对应的led灯亮,作为指示信号
代码如下:

unsigned char flag;

void main()
{

此处省略初始化;
while(1)
{
	if(flag==0) P0=0xff;		//led灯全灭
	if(flag==1) P0=0xfd;	//led0灯亮
	if(flag==2) P0=0xfb;    //led1灯亮
	
	if(P30==0)                       //当检测到按键S7(对应P30口)按下时
	{
		DelayMs(10);   			//延时10ms,消除抖动
		if(P30==0)					
		{
			filag=1;				//在这里设置标志位,在主循环中通过检测标志位实现功能
		}								//在这里直接实现功能也行,即P0=0xfd,就不需要定义flag变量以及在主循环中检测标志位了
	while(!P30);		//松手检测
	}
	
	if(P31==0)                       //当检测到按键S6(对应P31口)按下时
	{
		DelayMs(10);   			//延时10ms,消除抖动
		if(P31==0)					
		{
			filag=2;
		}
		while(!P31);
	}

	if(P32==0)                       //当检测到按键S5(对应P32口)按下时
	{
		DelayMs(10);   			//延时10ms,消除抖动
		if(P32==0)					
		{
			filag=0;
		}
		while(!P32);
	}
}		

}

实际问题

利用独立按键和led灯模拟温度警示器。当温度过高时,会烧断电器中的保护电阻,用独立按键按下模拟电路断路,用led灯亮警示电路断开。

void main()
{
此处省略初始化;
while(1)
{
if(P30==0) //当温度过高时用按键按下模拟,检测到按键S7(对应P30口)按下时
{
DelayMs(10); //延时10ms,消除抖动
if(P30 == 0)
{
P0=0xfe; //用led灯做警示灯,此时led0亮
}
while(!P30); //松手检测
}
}
}

通过简单的功能就能实现实际生活中的问题, 大家多多思考,多多摸索,希望通过参加蓝桥杯带动大家探索生活的兴趣,提高大家的动手能力。
——————————————————————————————————————
本文纯原创,如有侵权请联系删除,如有错误,敬请批评指正,谢谢大家。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值