STM32F103学习(二)按键

STM32F103学习(二)按键
按键与小灯的不同的,要根据类型设置成上拉输入和下拉输入,K1,K2,K3与32的接口要设置成上拉输入,KEY_UP设置成下拉输入。K1设置成上拉,按键没按下时,IO口为高电平,按下为低电平,上拉电阻会分担绝大部分电压,所以肯定IO口接收到的为低电平。

按键控制蜂鸣器或者小灯最好在初始化时,就将他们关闭,省的在烧录程序后,会出选乱象。

我学到的是一个控制按键的方法,参考下方程序:
第一种是长时间按键,只会反应一次,mode=0。
第二种是长时间按键,每个扫描周期都会反应,mode=1。
static使得变量的值会保留。
static u8 key_up=1;这行代码只会执行一次然后不再执行,key_up的值会在函数执行完后保存这个值,然后下次在执行时会用到保留的值。

u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按键按松开标志
	if(mode==1)
		key_up=1;  //支持连按		  
	if(key_up&&(KEY1==0||KEY2==0||KEY3==0||WK_UP==1))
	{
		delaytime(60000);//去抖动 
		key_up=0;
		if(KEY1==0)return KEY1_PRES;
		else if(KEY2==0)return KEY2_PRES;
		else if(KEY3==0)return KEY3_PRES;
		else if(WK_UP==1)return WKUP_PRES;
	}
	else if(KEY1==1&&KEY2==1&&KEY3==1&&WK_UP==0)
		key_up=1; 	    
 	return 0;// 无按键按下或者一直按住的时候,除了第一次返回0

可以进行位操作,对单一的IO口进行操作,比如按键控制小灯翻转。

#define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出 
#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入 

#define LED0 PBout(5)// PB5
#define LED1 PEout(5)// PE5	

LED0=!LED0;
LED1=!LED1;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值