蓝桥杯——独立键盘

一、原理部分

在这里插入图片描述
我们这里使用独立按键,所以J5跳线帽连接2和3。此时S7-S4为独立按键,按键左侧连在一起接地,右侧则分别对应P30-P33。当按键按下时,导线联通,按键对应的IO口则会被拉低为低电平,所以我们只需要检测哪一个IO口为低电平,即可知道哪一个按键按下了。
在这里插入图片描述
机械按键在按下的时候存在抖动现象,我们这里采用延时消抖,即按键按下时,判断一次对应IO是否为低电平,延时一段时间后再次判断是否为低电平,如果还是低电平则说明按键确实是按下了。松开按键时,对应的IO口会变成高电平,以此来进行松手检测。
独立键盘还有其他的扫描方式如三行代码。三行代码搞定独立按键

二、代码部分

实验平台:CT107D
实验芯片:stc15f2k60s2
实验现象:S7打开继电器,S6关闭继电器
代码如下

#include "stc15f2k60s2.h"
#include "intrins.h"
sbit relay = P0^4;		 //位定义继电器
sbit buzz = P0^6;		//位定义蜂鸣器
sbit key_1 = P3^0;		//位定义按键S7
sbit key_2 = P3^1;		//位定义按键S6

void Delay5ms()		//定义5ms延时函数
{
	unsigned char i, j;

	i = 54;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}

void close_buzz()	//蜂鸣器上电默认高电平,所以关闭蜂鸣器
{
	 P2=0xa0;
	 buzz = 0;
	 P2=0x00;
}

void main()
{	  
	close_buzz();

	 if(key_1 == 0)	   //判断按键按下
	 {
	 	Delay5ms();	   //延时5ms消除抖动
		if(key_1 == 0) //确定按键按下,执行按键功能
		{
			P2=0xa0;
			relay = 1;
			P2=0x00;
		}
		while(!key_1); //松手检测
	 }

	  if(key_2 == 0)
	 {
	 	Delay5ms();
		if(key_2 == 0)
		{
			P2=0xa0;
			relay = 0;
			P2=0x00;
		}
		while(!key_2);
	 }
}

发布了9 篇原创文章 · 获赞 11 · 访问量 1349

猜你喜欢

转载自blog.csdn.net/FuckerGod/article/details/103998685