(实验三)单片机,STM32F4学习笔记,代码讲解【按键输入】【正点原子】【原创】

(实验三)单片机,STM32F4学习笔记,代码讲解【按键输入】【正点原子】【原创】,第1张

文章目录
  • 实验现象
  • 主程序
  • 按键驱动程序
  • 代码讲解


实验现象

本实验,通过开发板上载有的4个按钮(KEY_UP、KEY0、KEY1和KEY2),来控制板
上的2个LED(DS0和DS1)和蜂鸣器,其中WK_UP控制蜂鸣器,按一次叫,再按一次
停;KEY2控制DS0,按一次亮,再按一次灭;KEY1控制DS1,效果同KEY2;KEY0则
同时控制DS0和DS1,按一次,他们的状态就翻转一次。


主程序
int main(void)
{ 
 
	u8 key;           //保存键值
	delay_init(168);  //初始化延时函数
	LED_Init();				//初始化LED端口 
	BEEP_Init();      //初始化蜂鸣器端口
	KEY_Init();       //初始化与按键连接的硬件接口
	LED0=0;				  	//先点亮红灯
	while(1)
	{
		key=KEY_Scan(0);		//得到键值
		if(key)
		{						   
			switch(key)
			{				 
				case WKUP_PRES:	//控制蜂鸣器
					BEEP=!BEEP;
					break;
				case KEY0_PRES:	//控制LED0翻转
					LED0=!LED0;
					break;
				case KEY1_PRES:	//控制LED1翻转	 
					LED1=!LED1;
					break;
				case KEY2_PRES:	//同时控制LED0,LED1翻转 
					LED0=!LED0;
					LED1=!LED1;
					break;
			}
		}else delay_ms(10); //暂时不知道这里延时10ms意义何在?****
	}
}
按键驱动程序
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//0,没有任何按键按下
//1,KEY0按下
//2,KEY1按下
//3,KEY2按下 
//4,WKUP按下 WK_UP
//注意此函数有响应优先级,KEY0>KEY1>KEY2>WK_UP!!
u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按键按松开标志
	if(mode)key_up=1;  //支持连按		  
	if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
	{
		delay_ms(10);//去抖动 
		key_up=0;
		if(KEY0==0)return 1;
		else if(KEY1==0)return 2;
		else if(KEY2==0)return 3;
		else if(WK_UP==1)return 4;
	}else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1; 	    
 	return 0;// 无按键按下
}
代码讲解

//不支持连续按=按下按键不松开,只起作用一次=if和else if两个函数只进入一次
//支持连续按=按下按键不松开,一直起作用=if和else两个函数一直进入
//比如不支持连续按时mode=0,按键key0按下不松时,先进入if判断按键,然后return1跳出scan函数
//第二次再进入scan函数时,进入else if判断但是进不去,于是return0返回,至此第三次再进入scan两个if 和else
if都进不去 //这就有点像按键输入处理时,加上while(!key);判断机制一样,不过正点这种方便移植,不知道算法上来说哪个更好?

//比如支持连续按时mode=1,按键key0按下不松开时,key_up首先=1,于是先进入if判断,然后return1跳出scan
//第二次再进入scan函数时,key_up还是1,于是再次进入if不再进入else if,也就是按键一直在起作用
//应该说不支持连续按,满足大部分场合,而支持连续按一般人不用这种判断机制,正点的这种方便移植和选择,挺好的
//这里更正一下,支持连续按时,可以利用定时器功能,实现一个按键多种功能,这种机制也很重要

//洋桃电子当中的那种长按与短按判断机制,仅仅利用延时程序判断,那个我还没有研究,等研究之后放到此文件夹中
//还有就是while判断按键是否按下机制,很简单加上while(!key)判断机制;,刘洋和郭天祥里面都有,不用多介绍

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/564003.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-03
下一篇 2022-04-03

发表评论

登录后才能评论

评论列表(0条)

保存