成为点灯大师的日志二——STM32之光敏传感器控制LED

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();
		}
	}
}

以上就是日志二全部内容。

如有问题,欢迎在评论区讨论,后续将继续更新其他模块的代码。໒( = ᴥ =)ʋ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值