基于STC89C52的GY-906智能温度计
时间:2023-09-04 02:07:01
实物效果
设计系统硬件
根据本设计的基本要求,硬件系统电路可分为数据采集模块、数据分析模块、人机交互三个模块OLED显示界面模块。由数据采集模块组成GY-906-BCC、MLX90614由内部状态机控制物体温度和环境温度的测量和计算,温度后处理,结果通过PWM或是SMBus模式输出。完成人机间信息交换的驱动显示模块。
如图2-1所示,硬件电路设计:
图2?1 系统硬件结构图
- 利用红外温度测量传感器收集人体温度变化产生的电压信号;
- 输出电压信号通常较小,需要通过前端信号处理电路线性放大;
- 经过SigmaDelta调制器转换为单一比特流,并反馈DSP后续处理。信号可编程(使用)EEPROM实现)FIR和IIR低通滤波器可以进一步降低输入信号的带宽,从而达到所需的噪声特性和刷新率。
- 测量所得Ta和To重新调整为PWM所需的输出分辨率和数据存在PWM状态;
- 然后显示单片机读取的数据OLED从而显示被测温度的度数。
系统软件设计
主程序说明:
- 初始化:初始化硬件,系统上电后等待所有模块完成自检,初始化各标志。
- 数据交互:模块自检后,传感器开始获得温度,单片机主动向传感器索要温度,刷新时间为10ms获取一次。
- 温度处理:当单片机向温度传感器索要温度时,保存EEPROM在里面,并分析温度。当温度超过37摄氏度时,系统将停止刷新并触发报警。需要按钮清除报警,系统将恢复刷新。
系统显示部分流程图
显示说明:
- 初始化:系统上电后,显示屏将显示(系统正在初始化参数,请稍等)ms,初始化完成后,将温度打印到屏幕上,完成温度获取。
- 温度刷新参数:当温度达到37摄氏度以上时,将打印在屏幕上(温度过高)。此时,屏幕将不再刷新,需要按钮清除以刷新参数。
主程序
int main() { unsigned int temp; static int temp_bmp; unsigned char key_temp=0; static char flag=1; beep=0; OLED_Init(); OLED_Clear(); SCL=1;SDA=1;_nop_(); _nop_();_nop_();_nop_(); SCL=0; delay(1000); SCL=1; while(1) { key_temp=key_init(); OLED_ShowCHinese(0,0,0); OLED_ShowCHinese(15,0,1); OLED_ShowCHinese(30,0,2); OLED_ShowCHinese(45,0,3); OLED_ShowCHinese(60,0,4); OLED_ShowCHinese(75,0,5); OLED_ShowCHinese(90,0,6); OLED_ShowCHinese(105,0,7); OLED_ShowCHinese(45,2,8); OLED_ShowCHinese(60,2,9); temp=memread(); //获得温度 display(temp); ///温度报警 if((a<38)&&(flag==1)) { OLED_ShowString(0,5,"Temp="); OLED_ShowString(70,5,"."); OLED_ShowNum(40,5,a,3,16); OLED_ShowNum(65,5,b,3,16); OLED_ShowCHinese(90,5,15); } else if(a>=38) { flag=0; beep=1; } if(key_temp) { switch(key_temp) { case PRES_KEY:beep = 0;flag=1.//消除报警,刷新显示 } } } }