天津工业大学本科毕业论文
4.4.1 ADC采集光敏传感器lsens的信号值
为保障读取的信息的准确,这里我们又建立了一个函数Get_Adc_Average。该函数的作用就是多次读取ADC的值,然后取平均值反馈回函数。
我们这里对于光敏信号的采集采用了连续读取10次ADC1通道1信号值,取平均值,然后将值赋给lsens。
具体程序如下: //获得ADC值 //ch:通道值 0~3 u16 Get_Adc(u8 ch) {
//设置指定ADC的规则组通道,一个序列,采样时间 }
//获取ADC平均值
u16 Get_Adc_Average(u8 ch,u8 times) { }
21
ADC_RegularChannelConfig(ADC1, ch, 1, DC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期 ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC )); //等待转换结束
return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果
u32 temp_val=0; u8 t;
for(t=0;treturn temp_val/times;
temp_val+=Get_Adc(ch); delay_ms(5);
天津工业大学本科毕业论文
4.4.2 ADC采集热释电红外传感器infrared信号值
这里我们建立了Get_Infrared函数。为减少误操作发生率,该函数作用是多次读取ADC1通道2信号值,若达到设置值则为达标,规定次数之内达标次数超过90%则视为有人,反之则为无人。
我们这里对于热释电红外传感器信号采集,规定次数为60次,若有人则将infrared赋值为1,反之赋值为0。
因为多次读取ADC获取值并计算判断的耗时较长,然而又不能耽误KEY键值的获取判断,所以在Get_Infrared函数获取人体活动红外信号的过程中加入了KEY键值的判断。
具体主要程序如下: u8 Get_Infrared(u8 time) {
u8 t=0; u8 x=0; u8 y=0; vu8 key=0; u16 infrare; }
22
while((t