学习stm32第二天(基于mini版)

学习目标:

实现按键操控LED灯


学习内容:

上一次我学习了如何对IO口进行配置了解IO口配置需要的各种参数。

今天就正式进入对按键的学习

对于按键在mini版上有三个

可以看到key0和key1都是低电平有效,wk_up是高电平有效所以在程序里面配置io口时要对key0和key1的GPIO的模设置为上拉输入而wk_up就要设置为下拉输入

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

现在就要设置按键处理函数了

//KEY0_PRES,KEY0按下

//KEY1_PRES,KEY1按下

//WKUP_PRES,WK_UP按下 


u8 KEY_Scan(u8 mode)
	{
		static u8 key_up=1;
		if(mode)key_up=1;
		if(key_up&&(KEY0==0||KEY1==0||WK_UP==1)) 
		{
			delay_ms(10);
			key_up=0;
			if(KEY0==0)return KEY0_PRES;
			else if(KEY1==0)return KEY1_PRES;
			else if(WK_UP==1)return WKUP_PRES;
		}else if(KEY0==1||KEY1==1||WK_UP==0)key_up=1;
		return 0;
		
	}
	

这样就可以对按键进行控制了

#include "sys.h"
#include "led.h"
#include "delay.h"
#include "key.h"
int main(void)
{
	u8 t;
	u8 i=0;
	delay_init();
	LED_Init();	
	KEY_Init();
	LED0=0;
while(1)
  {    
    t=KEY_Scan(0);
	 switch(t)
	 {
		 case KEY0_PRES:
			  LED0=!LED0;
		      break;
		 case KEY1_PRES:
			  for(i=0;i<50;i++)
				 {
				if(i%2==1){
			      LED0=!LED0;
                 delay_ms(100);
				}
				else if(i%2==0){
			 	  LED1=!LED1;
                 delay_ms(100);
				}
			 }	
		      break;
		 case WKUP_PRES:
			  LED0=!LED0;
			  LED1=!LED1;
		      break;
		 default:
			 delay_ms(10);	 
	 }  
  }
}

对于key1我对他设置了一下取出奇偶当i为奇数时LED0翻转当i为偶数时LED翻转

总结

对于今天的学习:按键就是对io口进行一些操作加深了我对IO口的了解程度

祝前程似锦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值