1、接线图展示
注:图片来自江科大,下图中的蜂鸣器在本日志中不需要接入
2、原理说明
利用电压比较器将电压二值化,随着光线变暗,光敏电阻阻值增大,分得电压增大,超过定值电阻电压则输出1,反之输出0。
3、代码实现
LightSensor.h
#ifndef __LIGHT_SENSOR_H
#define __LIGHT_SENSOR_H
void LightSensor_Init(void); //光敏传感器初始化函数
uint8_t LightSensor_Get(void); //有返回值函数,返回输入寄存器状态
#endif
LightSensor.h
#include "stm32f10x.h" // Device header
void LightSenSor_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitG;
GPIO_InitG.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitG.GPIO_Pin=GPIO_Pin_13;
GPIO_InitG.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitG);
} //初始化为上拉输入
uint8_t Light_GetNum(void)
{
return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13); //返回寄存器状态
}
LED.h
#ifndef __LED_H
#define __LED_H
void LED_Init(void);
void LEN_ON(void);
void LED_OFF(void);
#endif
LED.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
void LED_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitA;
GPIO_InitA.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitA.GPIO_Pin=GPIO_Pin_0;
GPIO_InitA.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitA);
GPIO_SetBits(GPIOA,GPIO_Pin_0);
}
void LED_ON(void)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
}
void LED_OFF(void)
{
GPIO_SetBits(GPIOA,GPIO_Pin_0);
}
main.c
#include "stm32f10x.h" // Device header
#include "LED.h"
#include "LightSenSor.h"
int main(void)
{
LED_Init();
LightSenSor_Init();
while(1)
{
if(Light_GetNum()==1) //如果光敏传感器检测到光线变暗,则开灯
{
LED_ON();
}
else
{
LED_OFF();
}
}
}
以上就是日志二全部内容。
如有问题,欢迎在评论区讨论,后续将继续更新其他模块的代码。໒( = ᴥ =)ʋ