STM32+光敏传感器+串口接收光照强度源程序 制作成功
[复制链接]
用的是四针脚光敏传感器
不同型号的STM32 ADC通道的选择也不一样
我使用的是STM32F103RCT6单片机 选择了ADC2 通道6 对应的是PA6引脚。
希望对大家有帮助
下面是部分STM32单片机代码
主函数
#include "stm32f10x.h"
#include "beep.h"
#include "delay.h"
#include "lcd.h"
#include "usart.h"
#include "adc.h"
#include "lsens.h"
#include "stdio.h"
int main(void)
{
u8 ADCX;
u8 t=0,i;
char LSEN[20];
USART1_init();
BEEP_Init();
LCD_Init();
Lsens_Init();
LCD_BLK = 0;
for(i=3;i>0;i--)
{
LCD_DrawFont_Num32(50,80,RED,YELLOW,i);
delay_ms(1000);
}
LCD_Clear(GREEN);
LCD_DrawFont_GBK16(25,0,BLUE,GREEN, "运行中...");
LCD_DrawFont_GBK16(5,60,BLACK,GREEN, "光照:");
LCD_DrawFont_GBK16(70,60,BLACK,GREEN, "CD");
while(1)
{
if(t%10==0)
{
ADCX=Lsens_Get_Val();
sprintf(LSEN,"%d",ADCX); //将光敏电阻值转换为字符格式
printf("光强: %d CD\r\n ",ADCX);
}
if(ADCX<40) //报警阈值
{
if(ADCX<40)
{
LCD_DrawFont_GBK16(50,60,RED,GREEN,LSEN);
}
GPIO_SetBits(BEEP_PORT,BEEP_PIN);
delay_ms(10);
GPIO_ResetBits(BEEP_PORT,BEEP_PIN);
}
else
{
LCD_DrawFont_GBK16(50,60,BLACK,GREEN,LSEN);
}
delay_ms(100);
t++;
}
}
串口
<blockquote>void USART1_init(void)
光敏传感器:
//初始化光敏传感器函数,即对GPIO,PA6初始化参数配置//
void Lsens_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE); //使能GPIOA时钟
//配置GPIOA参数,引脚6,模拟输入//
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOF, &GPIO_InitStructure);
Adc2_Init();
}
//读取Light Sens的值,范围0-100,0最暗;100最亮//
u8 Lsens_Get_Val(void)
{
u32 temp_val=0;
u8 t;
for(t=0;t<LSENS_READ_TIMES;t++) //LSENS_READ_TIMES在lsens.h文件中设好,默认10//
{
temp_val+=Get_Adc2(LSENS_ADC_CHX); //读取ADC值,LSENS_ADC_CHX在lsens.h文件中设好,默认ADC_Channel_6,即0x06//
delay_ms(5);
}
temp_val/=LSENS_READ_TIMES; //计算平均值//
if(temp_val>4000)temp_val=4000; //当计算后的值大于4000时,强制转换为4000//
return (u8)(100-(temp_val/40)); //将temp_val值归一化到0-100之间//
}
全部资料下载地址:
STM32 光敏传感器.7z
(186.17 KB, 下载次数: 46)
|