利用STM32的Systick中断实现按键消抖
2014-03-23 17:19
309 查看
在系统初始化的时候对systick进行初始化
在按键初始化中加入按键扫描函数
void SysTickConfig(void) { /* Set SysTick Timer for 100us interrupts */ if (SysTick_Config(SystemCoreClock / 10000)) { /* Capture error */ while (1); } /* Configure the SysTick handler priority */ NVIC_SetPriority(SysTick_IRQn, 0x0); }在stm32f4xx_it.c中加入
void SysTick_Handler(void) { Key_Scan(); }
在按键初始化中加入按键扫描函数
void Key_Scan(void) { /*检测是否有按键按下 */ if( (GPIOG->IDR&(1UL<<5))!=(1UL<<5) ) { kcount++; //有键按下,计数kcount加1 if(kcount>=32) //1MS中断一次,kcount大于等于32,即按键已按下32ms { if(label==0) //判断有没有重按键,1为有,0为没有 { keys1=1; //设置按键标志 kcount=0; label=1; //设置重按键标志 } else kcount=0; } else keys1=0; } else //无按键按下 { kcount=0; //清零kcount keys1=0; //清除按键标志 label=0; //清除重按键标志 } }按键IO口初始化 PA0 PG4 PG5 三个IO口
void KeyInit(void) { /* Enable clock and init GPIO inputs */ RCC->AHB1ENR |= (1UL << 0) | (1UL << 6) ; GPIOA->MODER &= ~(3UL << 2* 0); GPIOG->MODER &= ~(3UL << 2* 4); GPIOG->MODER &= ~(3UL << 2* 5); }UL是指32位无符号整形数据 ,因此GPIOG->MODER &= ~(3UL << 2* 0);是指让PG5口作为输入;
uint8_t kcount; uint8_t label; extern uint8_t keys1;最后忘了要定义这几个变量,否则编译通不过。
相关文章推荐
- linux下使用mysql的小问题
- 安装VirtualBox
- 获取输入框中选中文本相对于页面的偏移
- 正则表达式基础
- java基础_10_泛型
- TWaver HTML5学习笔记 —— 动态设置网元样式
- 将Eclipse项目自动部署到Tomcat的webapps目录下
- android手势操作滑动效果触摸屏事件处理
- oracle vm virtualbox按照Ubuntu
- C#之 基本.NET 框架类
- course 4 分治
- 面试笔记2
- C语言深度解剖读书笔记
- C语言枚举类型
- Cocos2d-x学习笔记(三) 内存管理
- CentOS–root密码忘记的解决办法
- 网络编程
- 命令提示符在哪里
- Python中dict详解
- vc6下unicode支持