STM32F1x系列——按键输入实验

发布者:EnchantedDreams最新更新时间:2019-09-24 来源: eefocus关键字:STM32F1x系列  按键输入  时钟 手机看文章 扫描二维码
随时随地手机看文章

今天学习了STM32F1x系列的按键输入实验,具体上分为三个步骤:


(1)使能按键对应IO口时钟,调用函数:RCC_APB2PeriphClockCmd()


(2)初始化IO模式:上拉/下拉输入。调用函数:GPIO_Init()


(3)扫描IO口电平(库函数/寄存器/位操作)


      主要说一下其中的按键扫描,思路图如下:



(1)按键扫描(支持连续按)的一般思路代码:



u8 KEY_Scan(void)

{

if(KEY按下)

{

delay_ms(10) ;   //延时10-20ms   用来去抖

if(KEY确实按下)

{

return  KEY_Value  ;

}

return 无效值 ;

}

}


(2)按键扫描(不支持连续按)的一般思路代码:(就是说按键按下了,没有松开只能算按了一次)

   在这里会用到c语言里的关键字:static


    a.   static声明的局部变量,存储在静态存储区


    b.   它在函数调用结束之后,不会被释放,它的值会一直保留下来


    c.    所以可以说static声明的局部变量,具有记忆功能



u8 KEY_Scan(void)

{

static u8 key_up = 1 ;

if(key_up&&KEY按下)

{

dealy_ms(10) ; //延时,防抖

key_up = 0 ; //标记这次key已经按下

if(KEY确实按下)

{

return  KEY_Value  ;

}

}

else if(KEY没有按下)

{

return 没有按下 ;

}

 

}


(3)按键扫描(两种模式合二为一)的一般思路:


u8 KEY_Scan(u8 mode)

{

static u8 key_up = 1 ;

if(mode == 1)

{

key_up = 1 ;   //支持连续按

}

if(key_up&&KEY按下)

{

dealy_ms(10) ; //延时,防抖

key_up = 0 ; //标记这次key已经按下

if(KEY确实按下)

{

return  KEY_Value  ;

}

}

else if(KEY没有按下)

{

return 没有按下 ;

}

 

}

对函数传入的参数进行判断,就可以将两种模式合二为一,放入一个函数中去处理。


关键字:STM32F1x系列  按键输入  时钟 引用地址:STM32F1x系列——按键输入实验

上一篇:STM32F1x系列——跑马灯实验-库函数
下一篇:STM32F1x系列——串口通信

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

STM32F4_ RCC系统时钟配置及描述
Ⅰ、概述 对于系统时钟应该都知道它的作用,就是驱动整个芯片工作的心脏,如果没有了它,就等于人没有了心跳。 对于使用开发板学习的朋友来说,RCC系统时钟这一块知识估计没怎么去配置过,原因在于开发板提供的晶振基本都是官方标准的时钟频率,使用官方的标准库,这样系统时钟就是默认的配置,也就是默认的频率。但对于自己设计开发板,或者想要改变系统时钟频率(如:降低功耗就需要降频)的朋友来说,配置系统时钟就有必要了。 关于时钟这一块对定时器(TIM、RTC、WDG等)相关的外设也比较重要,因为要求精准,就需要时钟频率精准。 Ⅱ、关于时钟 1.时钟分类 STM32芯片(所有型号)的时钟包含4类: HSE(High Speed Exter
[单片机]
STM32F4_ RCC系统<font color='red'>时钟</font>配置及描述
STM32 RTC时钟晶振 调电RTC计数器不走的问题
在初始化配置的情况下,RTC 日历时间我们默认设置一个时间点,此时备份区设置一个默认参数,表示已经设置过,后期只需要更新读取RTC- CNT 即可,如果出现断电计数器不走的情况,在生产上遇到,晶振贴片没有贴好,导致出厂默认读取的外部高速晶振HSE,这样后期不去掉纽扣电池点的话,默认都是外部高速晶振,这样外币32.768kHZ的晶振实际是没有用的,借此希望给大家一点提示。
[单片机]
STM32 RTC<font color='red'>时钟</font>晶振 调电RTC计数器不走的问题
时钟控制命令
LKCONCMD (0xC6) – 时钟控制命令 位 名称 复位 R/W 描述 7 OSC32K 1 R/W 32 kHz 时钟振荡器选择。 设置该位只能发起一个时钟源改变。 CLKCONSTA.OSC32K 反映当前的设置。当要改变该位必须选择 16 MHz RCOSC 作为系统时钟。 0 : 32 kHz XOSC 1 : 32 kHz RCOSC 6 OSC 1 R/W 系统 时钟 源 选择 。设置该位只能发起一个时钟源改变。 CLKCONSTA.OSC 反映当前的设置。 0 : 32 MHz XOSC 1 : 16 MHz RCOSC 5:3 TICKSPD 001 R/W 定时器标记输出设置。 不能高于通过
[单片机]
单片机stm32时钟频率和配置方法详解
  单片机stm32时钟频率   STM32F103内部8M的内部震荡,经过倍频后最高可以达到72M。目前TI的M3系列芯片最高频率可以达到80M。   在stm32固件库3.0中对时钟频率的选择进行了大大的简化,原先的一大堆操作都在后台进行。系统给出的函数为SystemInit()。但在调用前还需要进行一些宏定义的设置,具体的设置在system_stm32f10x.c文件中。   文件开头就有一个这样的定义:   //#define SYSCLK_FREQ_HSE HSE_Value   //#define SYSCLK_FREQ_20MHz 20000000   //#define SYSCLK_FREQ_36MHz
[单片机]
单片机stm32<font color='red'>时钟</font>频率和配置方法详解
Microchip发布2.3版TimeProvider® 4100主时钟授时和同步系统
Microchip发布2.3版TimeProvider® 4100主时钟授时和同步系统,保护关键基础设施网络 Microchip全新主时钟产品功能进一步增强,提高了部署的灵活性、安全性和可扩展性 包括5G移动、公用事业、有线电视、交通、国防和数据中心等在内的基础设施通信网络需要从全球定位系统(GPS)或其他全球卫星系统获取并维持精确授时信号。当全球导航卫星系统(GNSS)信号不可用时,这些网络需要提供冗余的备份系统。为满足这一要求,Microchip (美国微芯科技公司)今日推出采用业界最新 IEEE® 1588 v2.1安全标准的2.3版TimeProvider® 4100精确授时主时钟产品,在保护授时系统的同时还
[网络通信]
Microchip发布2.3版TimeProvider® 4100主<font color='red'>时钟</font>授时和同步系统
单片机_LCD12864显示自己制作的图片(时钟为例)
显示屏上显示自己想要的背景图,然后再在背景图上增加相应的功能,应用ps可以很方便的修改图片为自己想要的。 准备软件: phtotshop cs3 自用的一款,小巧非专业实用的ps软件,下载地址如下, 链接:https://pan.baidu.com/s/1R2ydl_TXEP7pWUv8VFlMbA 提取码:a1rz 字模提取软件 链接:https://pan.baidu.com/s/1aHq8Noin0VTgdnHIhhSGfQ 提取码:uiqg 1.用ps(Photoshop)新建一个 注意宽度和高度要和12864的一样,选择位图,为一位。 2,为了方便调整图片,我们选择图像模式为灰度,(
[单片机]
单片机_LCD12864显示自己制作的图片(<font color='red'>时钟</font>为例)
MSP432E401Y-时钟输出PWM
关于时钟的PWM配置以及相关寄存器翻译在上篇文章中已经写过了,不做更多的描述。有问题移步MSP432E401Y-用定时器中断控制LED闪烁_丢萌的博客-CSDN博客。 MSP432E401Y自带的PWM口的输出会在下一篇详细翻译以及介绍。 关于定时器输出PWM的定义方式其实和中断差不多,具体的寄存器操作大同小异。这次参考了官方库修改系统频率(120兆HZ)然后用于生成2KHZ的PWM波,占空比为66% 具体代码如下 /* DriverLib Includes */ #include ti/devices/msp432e4/driverlib/driverlib.h /* Standard Includes */
[单片机]
STM32 定时器时钟配置技巧
众所周知 STM32 的时钟配置比较复杂,而定时器的时钟配置更是 ‘奇葩‘。 如下图(截图自STM32F4编程手册)APB的预分频器分频系数如果不为1,则定时器的时钟就倍频了反而。 配置技巧 下面以STM32F4为例, 这里配置定时器8的计数频率为 10Khz,从时钟树中可知TIM8挂在APB2总线 获取当前 APB2(PLCK2) 的时钟频率 获取 APB2 预分频器的分频值 根据上述参数判断,如果分频值不为1,则定时器时钟 x2 .Prescaler = xxx 这是一个推荐的写法 int hw_timer_init(TIM_HandleTypeDef *htim) { uint32_t FLatency, t8
[单片机]
STM32 定时器<font color='red'>时钟</font>配置技巧
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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