|
STM32F103RCT6+光敏传感器监测光照强度可以用串口助手接收
我用的是四针脚光敏传感器
不同型号的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之间//
- }
复制代码 全部资料51hei下载地址:
STM32+光敏传感器.7z
(186.17 KB, 下载次数: 217)
|
评分
-
查看全部评分
|