天津工业大学2015届毕业论文
第四章
4.1编程语言选择
系统软件设计
C语言是在国际上应用最广泛的编程语言之一,它既可以直接对计算机产生控制作用,又涵盖了编程语言的大部分优点,其结构丰富多变,运用起来更加便捷,语言句式简便,程序构造清楚,可用于多种编程平台适应性更强。
4.2程序设计流程4.2.1温湿度测量模块
与温湿度测量电路设计相对应来设计软件模块,将DHT11传感器感应到的实测值,通过微处理器进行A/D转换成数字信号显示在数码管上。以这个数值和预设值相比较,若设定值在10~24摄氏度之间时不报警,若在此范围外,则红色二极管亮起,报警电路启动。如果下次监测得到的实测值在此范围内,则二极管报警电路停止工作[25]。
微处理器发出启动信号,DHT11从低耗能模式开启到高速运转模式,主控制器完成启动信号后,温湿度传感器发出40bit的数据,同时开启采集电路,当数据采集结束后,会自动调整回到低耗能模式。微处理器和温湿度传感器交互中:总线保持在高电压位置,主控制器会将电压降低以此等候温湿度传感器的回响。如4-1所示。
开始初始化延时采集温度值读取温度值数值转换传送数码管N温湿度超出预设值Y报警程序结束图4-1温湿度软件设计流程图
20
天津工业大学2015届毕业论文
温湿度监测模块部分程序:#include
sbitLHJ_A=P2^0;//管脚定义74HC138(3-8)译码器输入控制信号线sbitLHJ_B=P2^1;sbitLHJ_C=P2^2;
/********************///宏定义,定义数码管显示第几位
#defineSMG_1LHJ_C=0;LHJ_B=0;LHJ_A=0//译码器的输入脚,全0选择第一位数码管。#defineSMG_2LHJ_C=0;LHJ_B=0;LHJ_A=1//译码器的输入脚,001选择第二位数码管。#defineSMG_3LHJ_C=0;LHJ_B=1;LHJ_A=0//同上类推#defineSMG_4LHJ_C=0;LHJ_B=1;LHJ_A=1#defineSMG_5LHJ_C=1;LHJ_B=0;LHJ_A=0#defineSMG_6LHJ_C=1;LHJ_B=0;LHJ_A=1#defineSMG_7LHJ_C=1;LHJ_B=1;LHJ_A=0#defineSMG_8LHJ_C=1;LHJ_B=1;LHJ_A=1unsignedcharledTable_P[]=
{0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x40,0x3e,0x00};unsignedcharledTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};unsignedcharshiZ,shiX,wenZ,wenX,check;unsignedchartr_shiZ,tr_shiX,tr_wenZ,tr_wenX;unsignedcharflag;unsignedintn=20,m;voiddelay_1ms(unsignedinti)
{unsignedintj=88;or(;i>0;i--){while(j>0)j--;}}voiddelay_10us()
{unsignedchari;i--;i--;i--;i--;i--;i--;}
/******************************************//************初始化及采集程序**************//******************************************/voidread_init()
{DHT=0;//主机使DHT11低电平并延时至少18msdelay_1ms(21);
21
天津工业大学2015届毕业论文
DHT=1;//主机置DHT11高电平20~40us,并等待从机相应delay_10us();delay_10us();delay_10us();delay_10us();DHT=1;if(!DHT)//从机发出相应信号
{flag=2;while((!DHT)&&flag++);flag=2;while(DHT&&flag++);//开始采集数据tr_shiZ=read_data();//采集湿度整数部分tr_shiX=read_data();//采集湿度小数部分tr_wenZ=read_data();//采集温度整数部分tr_wenX=read_data();//采集温度小数部分check=read_data();//采集校验位DHT=1;}}
/******************************************//*************温湿度读取函数***************//******************************************/charread_data()
{unsignedchari,num,temp;num=0;for(i=0;i<8;i++){flag=2;while((!DHT)&&flag++);delay_10us();delay_10us();delay_10us();if(DHT==1){temp=1;flag=2;while(DHT&&flag++);}else
temp=0;num<<=1;num|=temp;}return(num);}voidmain()
{unsignedchartemp;EA=1;ET0=1;PX0=1;PT0=0;TMOD=0x01;TR0=1;EX0=1;IT0=0;while(1){
read_init();
temp=tr_shiZ+tr_shiX+tr_wenZ+tr_wenX;if(check==temp)
{shiZ=tr_shiZ;shiX=tr_shiX;wenZ=tr_wenZ;wenX=tr_wenX;}}}voiddisplay()interrupt1
{TH0=(65536-50000)/256;TL0=(65536-50000)%6;for(m=3;m>0;m--){if(wenZ>24||wenZ<10)led1=1;if(wenZ<24&&wenZ>10)led1=0;
22
天津工业大学2015届毕业论文
SMG_1;P0=ledTable[wenX];delay_1ms(50);SMG_2;P0=ledTable[wenX/10];delay_1ms(50);SMG_3;P0=ledTable_P[wenZ];delay_1ms(50);SMG_4;P0=ledTable[wenZ/10];delay_1ms(50);SMG_5;P0=ledTable[shiX];delay_1ms(50);SMG_6;P0=ledTable[shiX/10];delay_1ms(50);SMG_7;P0=ledTable_P[shiZ];delay_1ms(50);SMG_8;P0=ledTable[shiZ/10];delay_1ms(50);}}
4.2.2燃气监测模块
如果燃气浓度超过预设好的值的时候,微处理器AT89S52通过CHO引脚将数字量转变成模拟量,触发声光警戒系统,并且阀门切断、排气扇自动开启,直到燃气浓度低于设定的值,蜂鸣器停止工作,LED指示灯依旧一直保持开启的状态。如4-2所示。
开始程序初始化气体浓度采集A/D转换采集数据>设定值Y报警程序N延时程序关闭蜂鸣器结束图4-2燃气模块程序流程
23
天津工业大学2015届毕业论文
4.2.3甲醛监测模块
该装置在检测甲醛气体时,通过ADC8032气体感应传感器将感应到的电信号通过专用器件转变成电压信号,经过微处理器AT89S52的DI引脚将电压信号转为数字信号(即模拟信号改成数字信号)。当测量数值超过设定值时,二极管发出报警。如4-3所示。
开始程序初始化气体浓度采集A/D转换采集数据>设定值Y报警程序N延时程序关闭蜂鸣器结束图4-3甲醛检测模块软件流程图
甲醛浓度采集主程序如下所示:/*----------------------------初始化AD
----------------------------*/voidInitADC()
{P1ASF=0x01;//P1^0作为模拟功能AD口
24