空气质量检测仪C程序_第1页
空气质量检测仪C程序_第2页
空气质量检测仪C程序_第3页
空气质量检测仪C程序_第4页
空气质量检测仪C程序_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、空气质量检测仪C程序 程序代码#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define Data P0 /数据端口/*1602管脚定义*/sbit RS=P26;sbit RW=P25;sbit E=P27;/*AD管脚定义*/sbit STA=P30;sbit OE=P31;sbit EOC=P32;sbit CLK=P33;/*按键管脚定义*/sbit key_U=P20;sbit key_D=P21;

2、sbit key_L=P22;sbit key_R=P23;sbit key_S=P24;/*报警用管脚*/sbit beep=P34;sbit led1=P35;sbit led2=P36;unsigned char num=0;/记录设定键按下次数unsigned char k_flag=0;/记录设置键按下次数(用于调用)unsigned char wei=0;/光标位置unsigned char c_num=0;/记录切换键按下次数unsigned char c_flag=0;/记录切换键按下次数(用于调用)unsigned char voc_ad;/AD读取数据unsigned ch

3、ar flag;/DHT11函数用到/*/sbit DHT=P37;uchar WEN1="wen:16.00-28.00" /温度第一行数据uchar WEN2=" 00.00 " /温度第二行数据uchar SHI1="shi:30.00-70.00" /湿度第一行数据uchar SHI2=" 00.00 " /湿度第二行数据uchar VOC1="voc:0.00-2.70 " /湿度第一行数据uchar VO

4、C2=" 0.00 " /湿度第二行数据unsigned char shiZ,shiX,wenZ,wenX,check;unsigned char tr_shiZ,tr_shiX,tr_wenZ,tr_wenX;/*延时*/void delay_1ms(uint x)uchar i;while(x-)for(i=0;i<120;i+);void delay_10us()unsigned char i;i-;i-;i-;i-;i-;i-;void DelayUs(unsigned char us)/-延时函数unsigned char uscnt

5、;uscnt=us>>1; /*12MHz频率*/while(-uscnt);/*1602显示*/*写命令*/void lcd_write_com(uchar c) delay_1ms(5);/操作前短暂延时,保证信号稳定E=0;RS=0;RW=0;_nop_();E=1;Data=c;E=0;/*写数据*/void lcd_write_dat(uchar c) delay_1ms(5); /操作前短暂延时,保证信号稳定E=0;RS=1;RW=0;_nop_();E=1;Data=c;E=0;RS=0;/*LCD初始化*/void lcd_init() delay_

6、1ms(15);lcd_write_com(0x38); /display modelcd_write_com(0x38); /display modelcd_write_com(0x38); /display modelcd_write_com(0x06); /显示光标移动位置lcd_write_com(0x0c); /显示开及光标设置lcd_write_com(0x01); /显示清屏/*显示单个字符*/void ShowChar(uchar pos,uchar c) unsigned char p;if (pos>=0x10)p=pos+0xb0; /是第二行则命令代码高4

7、位为0xcelse p=pos+0x80; /是第二行则命令代码高4位为0x8lcd_write_com(p);/写命令lcd_write_dat(c); /写数据/*显示字符串*/void ShowSt ring (uchar line,char *ptr) unsigned char l,*p;p=ptr;l=line<<4;while(*p)!='0')ShowChar(l+,*(p);p+;/*温度显示函数*/void WENdisp(void) ShowString(0,WEN1);_nop_(); ShowString(1

8、,WEN2); /*湿度显示函数*/void SHIdisp(void) ShowString(0,SHI1);_nop_();ShowString(1,SHI2);/*VOC调用的显示函数*/void VOCdisp(void) ShowString(0,VOC1);_nop_(); ShowString(1,VOC2); /*报警用函数*/void Beep(unsigned char i,j)/i用于确定亮灯方式,j用于确定蜂鸣器是否报警unsigned char m;led1=led2=1;for(m=0; m<250; m+)switch(i)case 0:break;

9、case 1:led1=led2=0;break;/低电平点亮case 2:led1=0;break;case 3:led2=0;break;beep = j;delay_1ms(2);led1=led2=1;beep = 0;delay_1ms(2);void voc_warning()unsigned char voc_t;unsigned char voc_h;voc_t=('0'+VOC26)*10+('0'+VOC28);voc_h=('0'+VOC19)*10+('0&a

10、mp;#39;+VOC111);if(voc_t>voc_h)Beep(1,1);else Beep(0,0);void wen_warning()unsigned char wen_t;unsigned char wen_h;unsigned char wen_l;wen_t=('0'+WEN26)*10+('0'+WEN27);wen_l=('0'+WEN14)*10+('0'+WEN15);wen_h=('0'+WE

11、N110)*10+('0'+WEN111);if(wen_t>wen_h|wen_t<wen_l)Beep(2,1);else Beep(0,0);void shi_warning()unsigned char shi_t;unsigned char shi_h;unsigned char shi_l;shi_t=('0'+SHI26)*10+('0'+SHI27);shi_l=('0'+SHI14)*10+('0&

12、#39;+SHI15);shi_h=('0'+SHI110)*10+('0'+SHI111);if(shi_t>shi_h|shi_t<shi_l)Beep(3,1);else Beep(0,0);/*按键*/*进入设定功能*/unsigned char key_set(void)if(key_S=0)delay_1ms(10);if(key_S=0)while(!key_S);num+;k_flag=num%4;else k_flag=num%4;else k_flag=num%4;return k_

13、flag;/*调整数据*/unsigned char key_adddec(unsigned char dat)if(key_U=0)delay_1ms(10);if(key_U=0)while(!key_U);if(dat<'9')dat+;elsedat='9'if(key_D=0)delay_1ms(10);if(key_D=0)while(!key_D);if(dat>'0')dat-;elsedat='0'return dat;/

14、* *左右移位*/unsigned char key_LR()if(key_L=0)delay_1ms(10);if(key_L=0)while(!key_L);if(wei=0)wei=3;else wei-;if(key_R=0)delay_1ms(10);if(key_R=0)while(!key_R);if(wei=3)wei=0;else wei+;return wei;/*主函数调用的按键函数*/void set_updn_dat(void)while(key_set()unsigned j=key_LR(); if(key_set()=1) switch(j>0)c

15、ase 1:j=2;break;case 0:j=0;break;VOCdisp();VOC1j+9=key_adddec(VOC1j+9);lcd_write_com(0x80+j+9);lcd_write_dat(VOC1j+9); else if(key_set()=2)switch(j)case 2:j=6;break;case 3:j=7;break;WENdisp();WEN1j+4=key_adddec(WEN1j+4);lcd_write_com(0x80+j+4);lcd_write_dat(WEN1j+4);else if(key_set()=3)switch(j)case

16、 2:j=6;break;case 3:j=7;break;SHIdisp();SHI1j+4=key_adddec(SHI1j+4);lcd_write_com(0x80+j+4);lcd_write_dat(SHI1j+4);/*手动自动切换功能*/unsigned char key_change(void)if(key_U=0)delay_1ms(10);if(key_U=0)while(!key_U);c_num+;c_flag=c_num%4;else c_flag=c_num%4;else c_flag=c_num%4;return c_flag;/*传感器函数*/*DHT测试*/

17、*温湿度读取函数*/char DHTread_data()unsigned char i,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+);elsetemp=0;num<<=1;num|=temp; return(num);/*初始化及采集程序*/void DHTre

18、ad_init()DHT=0; /主机使DHT11低电平并延时至少18msdelay_1ms(21);DHT=1; /主机置DHT11高电平2040us,并等待从机相应delay_10us();delay_10us();delay_10us();DHT=1;if(!DHT) /从机发出相应信号flag=2;while(!DHT)&&flag+); flag=2;while(DHT&&flag+);/开始采集数据tr_shiZ=DHTread_data();/采集湿度整数部分tr_shiX=DHTread_data();/采集湿度小

19、数部分tr_wenZ=DHTread_data();/采集温度整数部分tr_wenX=DHTread_data();/采集温度小数部分check=DHTread_data();/采集校验位DHT=1; /*显示测试结果*/void DHT11()unsigned char temp; DHTread_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;WEN26='0'+wenZ/10;WEN27

20、='0'+wenZ%10;WEN29='0'+wenX/10;WEN210='0'+wenX%10;SHI26='0'+shiZ/10;SHI27='0'+shiZ%10;SHI29='0'+shiX/10;SHI210='0'+shiX%10;/*气体浓度检测*/*系统初始化*/ void init() TMOD = 0x01; /设定定时器T0工作方式 TH0=(65536-2)%256; TL0=(65536-2)/256;ET0=1; /允许T0中断EA=1; /开总中断 TR0=1; /启动定时器T0 /*T0中断服务程序*/ void t0(void) interrupt 1 /using 1 TH0=(65536-2)%256; TL0=(65536-2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论