Static申明的局部变量,存储在静态存储区。
它在函数调用结束之后,不会被释放。它的值会一直保留下来。
所以可以说static申明的局部变量,具有记忆功能。
按键扫描(支持连续按)的一般思路
u8 KEY_Scan(void)
{
if(KEY按下)
{
delay_ms(10);//延时10-20ms,防抖。
if(KEY确实按下)
{
return KEY_Value;
}
return;// 无效值
}
}
按键扫描(不支持连续按)的一般思路
u8 KEY_Scan(void)
{
static u8 key_up=1;
if(key_up && KEY)//按下
{
delay_ms(10);//延时,防抖
key_up=0;//标记这次key已经按下
if(KEY)//确实按下
{
return KEY_VALUE;
}
}else if(KEY没有按下) key_up=1;
return ;//没有按下
}
按键扫描(两种模式合二为一)的一般思路
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;
if(mode==1) key_up=1;//支持连续按
if(key_up && KEY按下)
{
delay_ms(10);//延时,防抖
key_up=0;//标记这次key已经按下
if(KEY确实按下)
{
return KEY_VALUE;
}
}else if(KEY没有按下) key_up=1;
return 没有按下
}
关键字:STM32 按键输入 static
引用地址:
STM32——按键输入之static
推荐阅读最新更新时间:2024-03-16 15:43
stm32中断嵌套实例分析
STM32中断嵌套方法 STM32中断嵌套方法先说明: 所有中断要放在同一个组里, 因为只有组确定了, 4位描述占先式优先级和副优先级的位数才可以确定。 NVIC——Nested Vectored Interrupt Controller(嵌套中断向量控制器) STM32有43个channel的settable的中断源:AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4bits。这4个bits用于分配pre-emption优先级和sub优先级,在STM32的固件库中定义如下: NVIC_PriorityGroup_0 ((u32)0x
[单片机]
stm32之 GPIO_Remap_SWJ_Disable之后无法使用swd下载 程序解决方法
说明:库文件版本:3.5.0 软件环境:iar for arm 在系统复位的时候默认是开启JTAG与swd的,在点击下载后的2秒内按下复位键即可将程序下载进stm32 注意:在程序里边加入GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); 来彻底解除限制,或用写寄存器的方式,SWG_CFG 写入000
[单片机]
STM32开发板基础教程(十) - RTC初探
STM32的RTC实际是一个独立的定时器。 下面将介绍如何使用RTC。 我们将头一次牵扯到振源的问题。 首先介绍一下STM32使用的各种振源。 有三种 HSE: 外置晶振 HSI: 内置RC振荡 LSE: 外置RTC振荡(32768居多) APB1 和 APB2 是经过PLL以后的振荡源。 STM32启动,首先使用的HSI振荡,在确认HSE振荡可用的情况下,才可以转而使用HSE, 当HSE出现问题,STM32可自动切换回HSI振荡,维持工作。 LSE振荡则是专门供RTC使用。 LSE晶振需要特别注意。 STM32非常奇怪,要求使用 6p负载的晶振, 市面买到的时钟晶振,绝大多是是12.5pF的 算是一个不小的bug, 大家
[单片机]
STM32 F1 TIM4 4通道PWM同时输出
void TIM4_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); //
[单片机]
6步教你在STM32程序中添加 printf函数
简介:6步教你在STM32程序中添加 printf函数 前提是你有一个完整的keil工程 比如ADC的 调试的时候很多时候用到串口 这里教你怎么样使用Printf 函数 在程序中添加Printf 1, #include stdio.h 2, /* Private functions ---------------------------------------------------------*/ 下添加 void USART_Configuration(void); #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker
[单片机]
STM32 HAL固件库编程的文件构架
对于我这种以前只接触过51和AVR单片机编程的小菜来说,现在开始学习STM32的编程,对于函数的功能以及C语言的语法都还好理解,难的是它提供的那一套硬件抽象层(HAL)驱动是怎么和其他的东东搭配在一起组成一个又一个的工程。 首先上两张从ST官方提供的HAL固件库文档截图 从这两张图的话,能对它的构架看出个一二,下面稍稍具体一点分析 HAL固件库编程,它的文件组织大致分三个部分 - HAL驱动 - CMSIS驱动 - 用户编写程序 而假如你使用的是ST官网的开发板,那么你还有一套现成的驱动可供使用,板级支持包(BSP),那么正好向我一样,但是,我不太喜欢使用这个东西,能自己写还是自己写的好。
[单片机]
STM32定时器之定时时间
STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。 时钟源问题: 名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在 APB1总线上。其中TIM1&TIM8称为高级控制定时器(advanced control timer).他们所在的APB2总线也比APB1总线要好。APB2可以工作在72MHz下,而APB1最大是36MHz。 定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。 下面以定时器2~7的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作
[单片机]
STM32之TIM1高级定时器
定时器应用之PWM输出 1.1 TIM1_CH1N 与 TIM1_CH1 的区别 在刚准备使用定时器的时候,我看了下原理图,发现对于定时器1,它的每一个输出通道都是成对的,即TIM1_CH1N与TIM1_CH1两个一组,通过网络查询后,明白了芯片这样设计的原因。 TIM1是一个完整的电机控制用定时器外设,TIM1_CH1和TIM1_CH1N,用于驱动上下两个功率管。如果Deadtime为0,则 TIM1_CH1N是TIM1_CH1的反相,如果Deadtime不为0,则在TIM1_CH1N上插入了Deadtime,防止上下功率管同时导通。 另外的两类管脚定义: TIM1_ETR是外部触发输入管脚; TIM1_BKIN是故障信
[单片机]