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);
//³õʼ»¯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Êä³ö¸ßµçƽ
GPIO_SetBits(GPIOD,GPIO_Pin_2);//¶ÔÓÚPD2Êä³ö¸ßµçƽ
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);
}
}
}
上一篇:STM32实战1:按键点亮LED小灯
下一篇:ARM裸机程序开发——按键控制LED灯
推荐阅读最新更新时间:2024-03-16 16:09
设计资源 培训 开发板 精华推荐
- 有奖直播|瑞萨电子 RA 系列产品开发工具之 FSP4.0.0 新特性介绍
- 有奖评测:100套东芝最小光继电器TLP3547的评估板免费申请中!
- 阅读Microchip多种连接接口SAM单片机精彩专题,参与活动赢好礼
- 有奖直播|高速总线PCIe5.0技术发展与测试分享
- EE团--TI 原装DK-LM3S9B96开发板 348元(包邮)!
- 月度原创精选评选2018年6月(总第5期)
- 【TI有奖直播】新一代低功耗蓝牙微控制器CC2640R2,开发和应用案例解析
- 最后一周:免费获取Pasternack《RF产品选型指南》2018 印刷版!
- 有奖直播|TI 芯技术助力电机开发
- 逛村田在线云展厅,了解通信、移动、工业+环境、健康四大领域的应用干货!