STM32按键控制开关灯

发布者:BlissfulSunrise最新更新时间:2018-07-21 来源: eefocus关键字:STM32  按键控制  开关灯 手机看文章 扫描二维码
随时随地手机看文章

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  按键控制  开关灯 引用地址:STM32按键控制开关灯

上一篇:STM32实战1:按键点亮LED小灯
下一篇:ARM裸机程序开发——按键控制LED灯

推荐阅读最新更新时间:2024-03-16 16:09

什么是stm32看门狗?独立看门狗和窗口看门狗工作原理解析
stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。 独立看门狗是限制喂狗时间在0-x内,x由你的相关寄存器决定。喂狗的时间不能过晚。 窗口看门狗,所以称之为窗口就是因为其喂狗时间是一个有上下限的范围内,你可以通过设定相关寄存器,设定其上限时间和下限时间。喂狗的时间不能过早也不能过晚。 窗口看门狗的 上窗口就是配置寄存器WWDG- CFR里设定的W ; 下窗口是固定的0x40; 当窗口看门狗的计数器在上窗口值之外,或是低于下窗口值都会产生复位。 图2 && 上窗口的值可以只有设定,7位二进制数最大只可以设定为127(0x7F),最小又必须大于下窗口的0x40,所以其取值范
[单片机]
什么是<font color='red'>stm32</font>看门狗?独立看门狗和窗口看门狗工作原理解析
STM32的精准延迟
这里主要是使用Systick 时钟 来实现精准延迟,它本质也是一个 定时器 ,使用时只需复制粘贴使用,这里是使用72M的 STM32 F103ZET6,不同型号需要自行修改对应参数。 #include stm32f10x.h static uint8_t D_us=0; //微妙系数 static uint16_t D_ms=0; //毫秒系数 void Delay_Init(void) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); D_us = SystemCoreClock/8000000; D_ms = (uint16
[单片机]
STM32单片机-操作访问内部Flash
目录: 1、STM32 FLASH操作流程 2、Flash基本知识点 3、OK,上干货,上代码 ------------------------------------------------------------------------------------------------- STM32中存储区分为:随机存取存储器RAM和只读存储器ROM。 其中: RAM为常说的内存,比如手机的2G内存4G内存等,就是程序跑起来的时候所占用的存储空间,特点是掉电数据丢失。 ROM为常说的硬盘,比如手机的64G和128G等,可以简单的理解为硬盘的存储空间,特点是掉电数据不丢失,所以又叫“非易失性存储器件”。 ROM又包含:
[单片机]
<font color='red'>STM32</font>单片机-操作访问内部Flash
STM32 APB1和APB2挂接端口
SYSCLK 系统时钟,最大72MHzHCLK :AHB总线时钟,由系统时钟SYSCLK 分频得到,一般不分频,等于系统时钟经过总线桥AHB-- APB. 通过设置分频,可由HCLK得到 PCLK1与PCLK2时钟不过PCLK2时钟最高可达72MHz. PCLK1对应APB1外设最大36MHz。 PCLK2对应APB2外设最大72MHz。 APB2负责AD,I/O,高级TIM,串口1。 APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB1Periph_USART2,ENABLE); RCC_AP
[单片机]
如何理解STM32系统时钟和分频
  首先来手册里的一段话。   三种不同的时钟源可被用来驱动系统时钟 (SYSCLK)   · HSI振荡器时钟   · HSE振荡器时钟   · PLL时钟   一般用的是PLL时钟,后面有证据。   我们可以通过库函数获取各时钟值   void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)   在我的系统里,把时钟值打印信息如下:   SYSCLK:0x44aa200 //72000000, 72MHz   HCLK:0x44aa200 //72000000, 72MHz   PCLK1:0x2255100 //36000000, 36MHz   PCLK2:0x44aa20
[单片机]
如何理解<font color='red'>STM32</font>系统时钟和分频
stm32学习之三
1、GPIO之LED灯的点亮程序: GPIO的功能是多样的,驱动LED灯,获得按键的输入信息 。 对于驱动LED灯,按照上面就需要对GPIO进行配置。 基本知识掌握: 2013年4月24日: 下午: stm32学习的原因: 1、从内核上:一般人开始学习的时候,都是从arm7开始的,但是自从stm32开发板出现后,就发现了人们更多的在 使用了stm32了。 2、从用途上:stm32微控制器在工业控制上、消费电子、手持设备、汽车电子、安防监控等众多领域得到广泛的 应用,而且其高性价比,适合手工DIY的优点。 arm7与stm32的比较: Cortext-32的速度比arm7块三分之一,功耗低四分之一,并且能够实
[单片机]
stm32 死区 刹车 pwm
这是电机控制方面的,让桥臂上的上面两个管子或下面两个同时给高电平即为刹车。 不让同边导通 为死区。 ======================================================================== 死区,简单解释: 通常,大功率电机、变频器等,末端都是由大功率管、IGBT等元件组成的H桥或3相桥。 每个桥的上半桥和下半桥是是绝对不能同时导通的,但高速的PWM驱动信号在达到功率元件的控制极时,往往会由于各种各样的原因产生延迟的效果,造成某个半桥元件在应该关断时没有关断,造成功率元件烧毁。 死区就是在上半桥关断后,延迟一段时间再打开下半桥或在下半桥关断后,延迟一段时间再打开上半桥
[单片机]
<font color='red'>stm32</font> 死区 刹车 pwm
基于STM32平台实现SVPWM调制
SVPWM SVPWM是空间矢量脉宽调制(Space Vector Pulse Width Modulation)的简称,通常由三相逆变器的六个功率开关管组成,经过特定的时序和换相所所产生的脉冲宽度调制波,最终输出的波形可能会十分接近理想的正弦波形。具体如下图所示;左侧为复平面,即空间矢量,右侧为时域的正弦波形。 关于SVPWM原理的文章非常多,这里可以推荐一下网上一个非常不错的教程《SVPWM的原理及法则推导和控制算法详解第五修改版》,本文将如何实现SVPWM进行简单的介绍。 IQMATH TI的片子很香,控制方面,TI无疑是做的最好的方案之一,相对来说资料也非常齐全;另外TI针对没有浮点运算器的定点DSP推出了IQMATH
[单片机]
基于<font color='red'>STM32</font>平台实现SVPWM调制
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved