STM32按键控制开关灯
出处:eefocus 发布于:2018-07-21 13:58:41
1.按键操作的原理
1.在stm32f103rc中,存在三个按键(不包括复位),分别为key0(PC5),key1(PA15),wkup(PA0),按下key0和key1时对应的io口输出低电平,按下wkup对应io口输出高电平
2.所以可以采用库函数读取io口的电平,从而用不同的情况来控制灯的开闭
GPIO_ReadInputDataBit(GPIOX,GPIO_PIN_a)读取相应接口电平
#define KEY0 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)
#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)
#define WK_UP GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define KEY0_PRES 1 //KEY0
#define KEY1_PRES 2 //KEY1
#define WKUP_PRES 3 //wkup
3.实现按键的初始化和扫描功能
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
//防止串口复用
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//上拉
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//3?ê??ˉPC5
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
4.实现按键扫描
1.建立static变量,从而实现短按按钮功能
2.短按按钮:首先扫描上的电平,如果为关闭状态(说明没按),然后再进行下操作
3.长按按钮:重新创建一个变量,实现长按按钮功能(函数中途不存在间断)
4.注意消抖
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;
}
5.主函数部分
//reset , wk_up(PA0),KEY0(PC5),KEY1(PA15)
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "LED.H"
void LED_init(void);
void key_init();
int main(void)
{
u8 t;
delay_init();
LED_Init();
KEY_Init();
GPIO_SetBits(GPIOA,GPIO_Pin_8);//??óúPA8ê?3???μ???
GPIO_SetBits(GPIOD,GPIO_Pin_2);//??óúPD2ê?3???μ???
while(1)
{
t=KEY_Scan(0);
switch(t)
{
case KEY0_PRES:
GPIO_ResetBits(GPIOA,GPIO_Pin_8);//low
break;
case KEY1_PRES:
GPIO_ResetBits(GPIOD,GPIO_Pin_2);//low
break;
case WKUP_PRES:
GPIO_ResetBits(GPIOA,GPIO_Pin_8);//low
GPIO_ResetBits(GPIOD,GPIO_Pin_2);//low
break;
default:
delay_ms(10);
}
}
}
上一篇:开关电源EMI各频点超标解决方案
下一篇:开关电源的关键元件·OC光耦合器
版权与免责声明
凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
- 如何将晶体管用作开关2024/4/28 17:35:05
- 什么是微动开关_微动开关有什么用_微动开关使用方法2024/4/26 17:38:11
- 接近开关原理及选型2024/4/8 17:26:30
- 了解电磁推进中的固态开关2024/4/7 17:09:26
- MOS开关设计2024/1/23 16:49:36