Stm32按键输入控制LED灯
2014-10-22 19:41
429 查看
说明:GPIOA,GPIO_Pin_0对应key1;GPIOA,GPIO_Pin_1对应key2;GPIOA,GPIO_Pin_2对应LED1;GPIOA,GPIO_Pin_3对应LED2
#include "stm32f10x.h" #include "stm32f10x_rcc.h" #include "stm32f10x_gpio.h" #include "system_stm32f10x.h" /* 控制小灯: 0 灭 1 亮 */ #define ON 1 #define OFF 0 #define KEY_ON 0 #define KEY_OFF 1 void RCC_Configuration(void); void GPIO_Configuration(void); void SetLed(uint8_t set); void delay_ms(u16 time); uint8_t KeyScan(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin_x); int main() { SystemInit(); RCC_Configuration(); GPIO_Configuration(); SetLed(ON); while (1) { if (KeyScan(GPIOA,GPIO_Pin_0) == KEY_ON) { /* LED1反转 读取GPIOA 0端口位的值并用1减去之后再写入此位即LED1的控制位 */ GPIO_WriteBit(GPIOA,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2))); } if (KeyScan(GPIOA,GPIO_Pin_1) == KEY_ON) { /* LED2反转 读取GPIOA 0端口位的值并用1减去之后再写入此位即LED2的控制位 */ GPIO_WriteBit(GPIOA, GPIO_Pin_3,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_3))); } } } void RCC_Configuration(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /* 配置按键的引脚为上拉 */ //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*输入模式不需要配置端口的输出速率GPIO_Speed*/ GPIO_Init(GPIOA, &GPIO_InitStructure); } void SetLed(uint8_t set) { if(set==ON){ GPIO_SetBits(GPIOA,GPIO_Pin_2);//LED1 GPIO_SetBits(GPIOA,GPIO_Pin_3);//LED2 } if(set==OFF){ GPIO_ResetBits(GPIOA,GPIO_Pin_2); GPIO_ResetBits(GPIOA,GPIO_Pin_3); } } /** * @brief : 按键按下检测 * @param : 端口 : GPIOx 端口位 : GPIO_Pin_x * @retval : 按键的状态 : 按下 弹起 */ uint8_t KeyScan( GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin_x ) { /* 检测是否有按键按下 */ if ( GPIO_ReadInputDataBit( GPIOx, GPIO_Pin_x ) == KEY_ON ) { /* 延时消抖 延时大约5ms */ delay_ms(5); if ( GPIO_ReadInputDataBit( GPIOx, GPIO_Pin_x ) == KEY_ON ) { while ( GPIO_ReadInputDataBit( GPIOx, GPIO_Pin_x ) == KEY_ON ); /* 等待按键释放 */ return KEY_ON; } else { return KEY_OFF; } } return KEY_OFF; } void delay_ms(u16 time) { u16 i=0; while(time--) { i=12000; while(i--); } }
相关文章推荐
- STM32按键控制LED(不用固件库)
- STM32_按键控制LED之轮询
- stm32 按键(中断)控制LED的亮灭,按一次亮,再按一次灭;
- linux输入子系统(input subsystem)之按键输入和LED控制
- 3.STM32中对EXTI_PE5_Config()函数的理解(自定义)之中断控制按键LED
- 基于STM32的按键控制闪烁LED
- 树莓派 Learning 003 — GPIO 002 输入模式 — 按键控制LED
- 基于STM32CT117E竞赛板(STM32f103RB)按键控制LED流水灯
- [置顶] ARM开发(4)基于STM32的矩阵键盘按键控制TM1629A LED显示
- 2.STM32中对Key_GPIO_Config()函数的理解(自定义)之轮询控制按键LED
- STM32_外部中断之按键控制点亮LED灯
- 2013-11-17 实验之裸板按键控制Led灯
- STM32F072 Nucleo笔记2-利用STM32CuBeMX创建工程并用按键控制LED的亮灭
- 使用input输入子系统实现对tiny6410LED灯的控制
- C语言按键控制led灯和蜂鸣器
- 基于FPGA的按键控制LED的循环左移一位
- STM32 按键输入
- 用查询方式,用按键控制led灯亮灭
- 按键控制显示LED亮度
- S3C6410 按键控制LED应用程序 ---源代码