赞
踩
目录
(1)获取按键的值(按键接在B1和B11,led灯接在A1和A2)
//读取输入数据寄存器某一个端口的输入值,参数用来指定某一个端口,返回值是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:输出模式下输出的值/电平
按键采取上拉输入模式,按下就接地,故按下的时候是低电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
上拉输入:可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
- uint8_t Key_GetNum(void)
- {
- uint8_t KeyNum = 0;
- if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)
- {
- Delay_ms(20);//消掉按下抖动
- while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0);
- Delay_ms(20);//消掉松手抖动
- KeyNum = 1;
- }
- if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0)
- {
- Delay_ms(20);
- while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
- Delay_ms(20);
- KeyNum = 2;
- }
-
- return KeyNum;
- }
- while (1)
- {
- KeyNum = Key_GetNum();
- if (KeyNum == 1)
- {
- LED1_Turn();
- }
- if (KeyNum == 2)
- {
- LED2_Turn();
- }
- }
- #include "stm32f10x.h" // Device header
- #include "Delay.h"
-
- void Key_Init(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
-
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
-
- uint8_t Key_GetNum(void)
- {
- uint8_t KeyNum = 0;
- if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)
- {
- Delay_ms(20);//消掉按下抖动
- while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0);
- Delay_ms(20);//消掉松手抖动
- KeyNum = 1;
- }
- if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0)
- {
- Delay_ms(20);
- while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
- Delay_ms(20);
- KeyNum = 2;
- }
-
- return KeyNum;
- }
- #ifndef __KEY_H
- #define __KEY_H
-
- void Key_Init(void);
- uint8_t Key_GetNum(void);
-
- #endif
- #include "stm32f10x.h" // Device header
-
- void LED_Init(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
-
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2);
- }
-
- void LED1_ON(void)
- {
- GPIO_ResetBits(GPIOA, GPIO_Pin_1);
- }
-
- void LED1_OFF(void)
- {
- GPIO_SetBits(GPIOA, GPIO_Pin_1);
- }
-
- void LED1_Turn(void)
- {
- if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1) == 0)
- {
- GPIO_SetBits(GPIOA, GPIO_Pin_1);
- }
- else
- {
- GPIO_ResetBits(GPIOA, GPIO_Pin_1);
- }
- }
-
- void LED2_ON(void)
- {
- GPIO_ResetBits(GPIOA, GPIO_Pin_2);
- }
-
- void LED2_OFF(void)
- {
- GPIO_SetBits(GPIOA, GPIO_Pin_2);
- }
-
- void LED2_Turn(void)
- {
- if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_2) == 0)
- {
- GPIO_SetBits(GPIOA, GPIO_Pin_2);
- }
- else
- {
- GPIO_ResetBits(GPIOA, GPIO_Pin_2);
- }
- }
- #ifndef __LED_H
- #define __LED_H
-
- void LED_Init(void);
- void LED1_ON(void);
- void LED1_OFF(void);
- void LED1_Turn(void);
- void LED2_ON(void);
- void LED2_OFF(void);
- void LED2_Turn(void);
-
- #endif
- #include "stm32f10x.h" // Device header
- #include "Delay.h"
- #include "LED.h"
- #include "Key.h"
-
- uint8_t KeyNum;
-
- int main(void)
- {
- LED_Init();
- Key_Init();
-
- while (1)
- {
- KeyNum = Key_GetNum();
- if (KeyNum == 1)
- {
- LED1_Turn();
- }
- if (KeyNum == 2)
- {
- LED2_Turn();
- }
- }
- }
- #include "stm32f10x.h" // Device header
-
- void Buzzer_Init(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
-
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- GPIO_SetBits(GPIOB, GPIO_Pin_12);
- }
-
- void Buzzer_ON(void)
- {
- GPIO_ResetBits(GPIOB, GPIO_Pin_12);
- }
-
- void Buzzer_OFF(void)
- {
- GPIO_SetBits(GPIOB, GPIO_Pin_12);
- }
- #ifndef __BUZZER_H
- #define __BUZZER_H
-
- void Buzzer_Init(void);
- void Buzzer_ON(void);
- void Buzzer_OFF(void);
- void Buzzer_Turn(void);
-
- #endif
- #include "stm32f10x.h" // Device header
-
- void LightSensor_Init(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
-
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉模式
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
-
- uint8_t LightSensor_Get(void)
- {
- return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);
- }
- #ifndef __LIGHT_SENSOR_H
- #define __LIGHT_SENSOR_H
-
- void LightSensor_Init(void);
- uint8_t LightSensor_Get(void);
-
- #endif
(10)主函数
- #include "stm32f10x.h" // Device header
- #include "Delay.h"
- #include "Buzzer.h"
- #include "LightSensor.h"
-
- int main(void)
- {
- Buzzer_Init();
- LightSensor_Init();
-
- while (1)
- {
- if (LightSensor_Get() == 1)
- {
- Buzzer_ON();
- }
- else
- {
- Buzzer_OFF();
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。