当前位置:   article > 正文

4、江科大stm32视频学习笔记——GPIO输入:按键控制LED灯、光敏传感器控制蜂鸣器_基于gpio端口按键控制led灯

基于gpio端口按键控制led灯

目录

1、寄存器输入输出函数

2、按下按键:低电平

3、主要代码

(1)获取按键的值(按键接在B1和B11,led灯接在A1和A2)

(2)调用按键中的函数

4、全部代码:

一、按键控制灯

(1)key.c

(2)key.h

(3)led

(4)led.h

(5)主函数

二、光敏传感器控制蜂鸣器

(6)Buzzer.c

(7)Buzzer.h

(8)LightSensor.c

(9)LightSensor.h


1、寄存器输入输出函数

//读取输入数据寄存器某一个端口的输入值,参数用来指定某一个端口,返回值是uint8_t类型,用来代表高低电平(读取按键的值)

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

//读取整个输入数据寄存器,参数用来指定外设,uint16_t是一个16位的数据,每一位代表一个端口值
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

//读取输出寄存器
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

//读取输出寄存器
uint16_

t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

 ReadInput:读取GPIO口

ReadOutput:输出模式下输出的值/电平

2、按下按键:低电平

按键采取上拉输入模式,按下就接地,故按下的时候是低电平

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入

上拉输入:可读取引脚电平,内部连接上拉电阻,悬空时默认高电平

3、主要代码

(1)获取按键的值(按键接在B1和B11,led灯接在A1和A2)

  1. uint8_t Key_GetNum(void)
  2. {
  3. uint8_t KeyNum = 0;
  4. if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)
  5. {
  6. Delay_ms(20);//消掉按下抖动
  7. while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0);
  8. Delay_ms(20);//消掉松手抖动
  9. KeyNum = 1;
  10. }
  11. if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0)
  12. {
  13. Delay_ms(20);
  14. while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
  15. Delay_ms(20);
  16. KeyNum = 2;
  17. }
  18. return KeyNum;
  19. }

(2)调用按键中的函数

  1. while (1)
  2. {
  3. KeyNum = Key_GetNum();
  4. if (KeyNum == 1)
  5. {
  6. LED1_Turn();
  7. }
  8. if (KeyNum == 2)
  9. {
  10. LED2_Turn();
  11. }
  12. }

4、全部代码:

一、按键控制灯

(1)key.c

  1. #include "stm32f10x.h" // Device header
  2. #include "Delay.h"
  3. void Key_Init(void)
  4. {
  5. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  6. GPIO_InitTypeDef GPIO_InitStructure;
  7. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  8. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;
  9. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  10. GPIO_Init(GPIOB, &GPIO_InitStructure);
  11. }
  12. uint8_t Key_GetNum(void)
  13. {
  14. uint8_t KeyNum = 0;
  15. if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)
  16. {
  17. Delay_ms(20);//消掉按下抖动
  18. while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0);
  19. Delay_ms(20);//消掉松手抖动
  20. KeyNum = 1;
  21. }
  22. if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0)
  23. {
  24. Delay_ms(20);
  25. while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
  26. Delay_ms(20);
  27. KeyNum = 2;
  28. }
  29. return KeyNum;
  30. }

(2)key.h

  1. #ifndef __KEY_H
  2. #define __KEY_H
  3. void Key_Init(void);
  4. uint8_t Key_GetNum(void);
  5. #endif

(3)led

  1. #include "stm32f10x.h" // Device header
  2. void LED_Init(void)
  3. {
  4. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  5. GPIO_InitTypeDef GPIO_InitStructure;
  6. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  7. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
  8. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  9. GPIO_Init(GPIOA, &GPIO_InitStructure);
  10. GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2);
  11. }
  12. void LED1_ON(void)
  13. {
  14. GPIO_ResetBits(GPIOA, GPIO_Pin_1);
  15. }
  16. void LED1_OFF(void)
  17. {
  18. GPIO_SetBits(GPIOA, GPIO_Pin_1);
  19. }
  20. void LED1_Turn(void)
  21. {
  22. if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1) == 0)
  23. {
  24. GPIO_SetBits(GPIOA, GPIO_Pin_1);
  25. }
  26. else
  27. {
  28. GPIO_ResetBits(GPIOA, GPIO_Pin_1);
  29. }
  30. }
  31. void LED2_ON(void)
  32. {
  33. GPIO_ResetBits(GPIOA, GPIO_Pin_2);
  34. }
  35. void LED2_OFF(void)
  36. {
  37. GPIO_SetBits(GPIOA, GPIO_Pin_2);
  38. }
  39. void LED2_Turn(void)
  40. {
  41. if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_2) == 0)
  42. {
  43. GPIO_SetBits(GPIOA, GPIO_Pin_2);
  44. }
  45. else
  46. {
  47. GPIO_ResetBits(GPIOA, GPIO_Pin_2);
  48. }
  49. }

(4)led.h

  1. #ifndef __LED_H
  2. #define __LED_H
  3. void LED_Init(void);
  4. void LED1_ON(void);
  5. void LED1_OFF(void);
  6. void LED1_Turn(void);
  7. void LED2_ON(void);
  8. void LED2_OFF(void);
  9. void LED2_Turn(void);
  10. #endif

(5)主函数

  1. #include "stm32f10x.h" // Device header
  2. #include "Delay.h"
  3. #include "LED.h"
  4. #include "Key.h"
  5. uint8_t KeyNum;
  6. int main(void)
  7. {
  8. LED_Init();
  9. Key_Init();
  10. while (1)
  11. {
  12. KeyNum = Key_GetNum();
  13. if (KeyNum == 1)
  14. {
  15. LED1_Turn();
  16. }
  17. if (KeyNum == 2)
  18. {
  19. LED2_Turn();
  20. }
  21. }
  22. }

二、光敏传感器控制蜂鸣器

(6)Buzzer.c

  1. #include "stm32f10x.h" // Device header
  2. void Buzzer_Init(void)
  3. {
  4. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  5. GPIO_InitTypeDef GPIO_InitStructure;
  6. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  7. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  8. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  9. GPIO_Init(GPIOB, &GPIO_InitStructure);
  10. GPIO_SetBits(GPIOB, GPIO_Pin_12);
  11. }
  12. void Buzzer_ON(void)
  13. {
  14. GPIO_ResetBits(GPIOB, GPIO_Pin_12);
  15. }
  16. void Buzzer_OFF(void)
  17. {
  18. GPIO_SetBits(GPIOB, GPIO_Pin_12);
  19. }

(7)Buzzer.h

  1. #ifndef __BUZZER_H
  2. #define __BUZZER_H
  3. void Buzzer_Init(void);
  4. void Buzzer_ON(void);
  5. void Buzzer_OFF(void);
  6. void Buzzer_Turn(void);
  7. #endif

(8)LightSensor.c

  1. #include "stm32f10x.h" // Device header
  2. void LightSensor_Init(void)
  3. {
  4. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  5. GPIO_InitTypeDef GPIO_InitStructure;
  6. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉模式
  7. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  8. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  9. GPIO_Init(GPIOB, &GPIO_InitStructure);
  10. }
  11. uint8_t LightSensor_Get(void)
  12. {
  13. return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);
  14. }

(9)LightSensor.h

  1. #ifndef __LIGHT_SENSOR_H
  2. #define __LIGHT_SENSOR_H
  3. void LightSensor_Init(void);
  4. uint8_t LightSensor_Get(void);
  5. #endif

(10)主函数

  1. #include "stm32f10x.h" // Device header
  2. #include "Delay.h"
  3. #include "Buzzer.h"
  4. #include "LightSensor.h"
  5. int main(void)
  6. {
  7. Buzzer_Init();
  8. LightSensor_Init();
  9. while (1)
  10. {
  11. if (LightSensor_Get() == 1)
  12. {
  13. Buzzer_ON();
  14. }
  15. else
  16. {
  17. Buzzer_OFF();
  18. }
  19. }
  20. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/545223
推荐阅读
相关标签
  

闽ICP备14008679号