00. 目錄
01. 按鍵控制LED接線圖
02. 按鍵控制LED程序示例
led.h
#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 /*__LED_H__*/
led.c
#include "led.h"
#include "stm32f10x.h" // Device header
//LED初始化
void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//使能時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//A1 A2
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
//設(shè)置為高電平
GPIO_SetBits(GPIOA, GPIO_Pin_1);
GPIO_SetBits(GPIOA, GPIO_Pin_2);
}
//LED1亮
void led1_on(void)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
}
//LED1滅
void led1_off(void)
{
GPIO_SetBits(GPIOA, GPIO_Pin_1);
}
//LED翻轉(zhuǎn)
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);
}
}
//LED2亮
void led2_on(void)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_2);
}
//LED2滅
void led2_off(void)
{
GPIO_SetBits(GPIOA, GPIO_Pin_2);
}
//LED2翻轉(zhuǎn)
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);
}
}
key.h
#ifndef __KEY_H__
#define __KEY_H__
#include "stm32f10x.h" // Device header
void key_init(void);
uint8_t key_scan(void);
#endif /*__KEY_H_*/
key.c
#include "key.h"
#include "delay.h"
//按鍵初始化
void key_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//使能時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//B1 B11
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //對于輸入用途不大
GPIO_Init(GPIOB, &GPIO_InitStruct);
}
//按鍵掃描
uint8_t key_scan(void)
{
uint8_t ret = 0;
if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)
{
delay_ms(10);
//等待按鍵抬起
while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0);
delay_ms(10);
ret = 1;
}
if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0)
{
delay_ms(10);
//等待按鍵抬起
while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
delay_ms(10);
ret = 2;
}
return ret;
}
main.c
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "key.h"
int main(void)
{
led_init();
key_init();
while(1)
{
if (key_scan() == 1)
{
led1_turn();
}
if (key_scan() == 2)
{
led2_turn();
}
}
return 0;
}
03. 光敏傳感器控制Buzzer接線圖
04. 有源蜂鳴器原理圖
電路圖:
實(shí)物圖:
05. 光敏傳感器控制Buzzer示例
buzzer.h
#ifndef __BUZZER_H__
#define __BUZZER_H__
#include "stm32f10x.h"
//蜂鳴器初始化 B12
void buzzer_init(void);
//on
void buzzer_on(void);
//off
void buzzer_off(void);
#endif
buzzere.c
#include "buzzer.h"
//蜂鳴器初始化 B12
void buzzer_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//使能時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//B12
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
//設(shè)置為高電平
GPIO_SetBits(GPIOB, GPIO_Pin_12);
}
//on
void buzzer_on(void)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
}
//off
void buzzer_off(void)
{
//設(shè)置為高電平
GPIO_SetBits(GPIOB, GPIO_Pin_12);
}
lightsensor.h
#ifndef __LIGHT_SENSOR_H__
#define __LIGHT_SENSOR_H__
#include "stm32f10x.h"
void lightsensor_init(void);
uint8_t lightsensor_get(void);
#endif /*__LIGHT_SENSOR_H__*/
lightsensor.cpp
#include "lightsensor.h"
//B13
void lightsensor_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//使能時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//B1 B11
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //對于輸入用途不大
GPIO_Init(GPIOB, &GPIO_InitStruct);
}
uint8_t lightsensor_get(void)
{
return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);
}
main.c
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "key.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();
}
}
return 0;
}
06. 程序示例下載
04-Key控制LED.rar
05-光敏傳感器控制蜂鳴器.rar文章來源:http://www.zghlxwxcb.cn/news/detail-856566.html
07. 附錄
參考: 【STM32】江科大STM32學(xué)習(xí)筆記匯總文章來源地址http://www.zghlxwxcb.cn/news/detail-856566.html
到了這里,關(guān)于【STM32】STM32學(xué)習(xí)筆記-按鍵控制LED 光敏傳感器控制蜂鳴器(08)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!