接线:
光敏传感器上的AO不接。
接好线后上电,可以看到光敏传感器上亮了两个灯,如果只亮一个,可以尝试加大环境光照或者拿螺丝刀拧上面的蓝色方块。用手遮住前面的电阻只亮一个灯。
代码:
复制粘贴3-4的工程文件,改名为“3-5 光敏传感器控制蜂鸣器”,打开keil,在“Hardware”文件夹里新建“Buzzer.c”、“Buzzer.h”、“LightSensor.c”、“LightSensor.h”四个文件,并输入如下代码:
Buzzer.c:
#include "stm32f10x.h"// Device headervoid 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_ResetBits(GPIOB,GPIO_Pin_12);}void Buzzer_ON(void){GPIO_ResetBits(GPIOB,GPIO_Pin_12);}void Buzzer_OFF(void){GPIO_SetBits(GPIOB,GPIO_Pin_12);}void Buzzer_Turn(void){if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12) == 0){GPIO_SetBits(GPIOB,GPIO_Pin_12);}else{GPIO_ResetBits(GPIOB,GPIO_Pin_12);}}
Buzzer.h:
#ifndef __BUZZER_H#define __BUZZER_Hvoid Buzzer_Init(void);void Buzzer_ON(void);void Buzzer_OFF(void);void Buzzer_Turn(void);#endif
LightSensor.c:
#include "stm32f10x.h"// Device headervoid 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);}
LightSensor.h:
#ifndef __LIGHTSENSOR_H#define __LIGHTSENSOR_Hvoid LightSensor_Init(void);uint8_t LightSensor_Get(void);#endif
main.c:
#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();}}}
编译运行成功后,即可通过遮住光敏电阻来控制蜂鸣器。