蓝桥杯电子类单片机组模块——独立按键(一般作用)

首先呢,大家都知道:历年的蓝桥杯单片机组都会考到按键模块;对于省赛来说,考独立按键的概率远远高于矩阵键盘,所以必须将独立按键的用法吃透来(当然,同时准备矩阵键盘也是比较保险的做法)

现在来给大家介绍独立按键基本的使用方法——状态机
(有人也喜欢用三行代码的方法。当然这都无所谓,萝卜白菜各有所爱,只要别用主时序给按键消抖就行!)

1、要使用独立按键,那么开发板上的J5跳帽必须接到BTN(独立按键)。

2、独立按键相关原理图如下
在这里插入图片描述
跳帽使得pin2和pin3相连接,这使得按键的一端一直为低电平。
因此,我们可以通过单片机给按键的另一端为高电平;当按键按下的时候,对应I/O口的会检测到低电平。
同时,我们应该用状态机进行按键状态的判断,结合定时器中断的使用对按键进行定时扫描。

3、如下,附上独立按键状态机代码块。

#include "STC15F2K60S2.h"

#define u8 unsigned char 
#define KEY_STATE0 0 //判断按键是否按下
#define KEY_STATE1 1 //按键按下标志
#define KEY_STATE2 2 //判断按键是否松开

void Timer0Init(void)		//配置定时器0,1ms中断
{
	AUXR |= 0x80;		
	TMOD &= 0xF0;		
	TL0 = 0xCD;		
	TH0 = 0xD4;		
	TF0 = 0;		
	TR0 = 1;		
	ET0=1;
	EA=1;
}

unsigned char key_scan()//按键检测函数
{
		static char KEY_STATE=KEY_STATE0;
		u8 KEY=0;
		u8 key_value=0;
	
		P30=1;P31=1;P32=1;P33=1;
		if(P30==0) KEY=7;
		if(P31==0) KEY=6;
		if(P32==0) KEY=5;
		if(P33==0) KEY=4;
		if((P30==1)&&(P31==1)&&(P32==1)&&(P33==1))  KEY=0;
	 
	  switch(KEY_STATE) //判断按键状态
		{
				case KEY_STATE0: 
				if(KEY!=0)
				{
				KEY_STATE=KEY_STATE1;  //成功获得键值,进入下一状态
				}
				break;
				
				case KEY_STATE1:  
				switch(KEY)
				{
				case 4: key_value=4;  break;
				case 5: key_value=5;  break;
				case 6: key_value=6;  break;
				case 7: key_value=7;  break;
				}
				KEY_STATE=KEY_STATE2;//自动转为下一状态

				break;
				case KEY_STATE2: 
				if(KEY==0)
				{
				KEY_STATE=KEY_STATE0;//按键弹开,重新回到最初状态
				}


				break;
		}
		return key_value;
	}

bit key_flag; //按键读取标志位
u8 key_val;  // 按键返回值

void main()
{
	P0=~0X00;P2=0X80;P2=0X00; //关闭led外设
	P2=0XA0;P0=0X00;P2=0X00;  //关闭蜂鸣器以及寄存器外设
	Timer0Init();
			while(1)
			{
				if(key_flag)
				{
					key_flag=0; //按键读取标志位置0
					key_val=key_scan();//读取键值
					switch(key_val)
					{
				case 4:  break; //任务1
				case 5:  break; //任务2
				case 6:  break; //任务3
				case 7:  break; //任务4
					}
				}

			}
}

void Timer0()	interrupt 1	//定时器0中断
{
		static int key_count=0;
		key_count++;
		if(key_count==10)//十毫秒检测一次按键状态
		{
			key_count=0;
			key_flag=1;
		}
}

4、这只是独立按键最基本的操作,关于按键的按下与松开以及长按与短按等内容以后会提到。

祝大家在蓝桥杯比赛中获得优异的成绩!
——南昌大学 电子183刘昊

发布了3 篇原创文章 · 获赞 3 · 访问量 84

猜你喜欢

转载自blog.csdn.net/qq_44629819/article/details/104486419