基于51单片机的温湿度测量仪课程设计代码

合集下载

基于51单片机的温湿度检测器设计

基于51单片机的温湿度检测器设计

基于51单片机的温湿度检测器设计苏州信息职业技术学院通信与信息工程系 杜豫平【摘要】温湿度的测量在仓库管理、生产制造、气象观测、科学研究以及生活中被广泛应用,本文给出了一种基于MCS-51单片机的温湿度检测器的设计方法。

设计不但能实现通过LCD1602实现温湿度显示,还能通过RS-485总线进行远程数据通信。

【关键词】单片机;温湿度;RS-485总线Temperature and humidity detector design based on SCMDU Yu-ping(Suzhou College of Information Technology Wujiang 215200,Jiangsu )Abstract :Temperature and humidity measurement was used extensively in warehouse management ,manufacturing ,meteorological observa-tion ,and scientific research ,This paper presents a method of temperature and humidity detector design based on MCS-51 single-chip microcomputer ,The design not only can be achieved through the realization of LCD1602 displaying temperature and humidity ,but also through the RS485 bus to the remote data communication.Key words :SCM ;Temperature and humidity ;RS-485 Bus1.引言在传统的模拟式温湿度传感器设计中,一般需要设计信号调理电路并需要经过复杂的校准和标定过程,受环境影响较大,参数容易发生偏移,因此精度难以保证,且在线性度、重复性、互换性、一致性等方面不如人意。

51 温度 湿度 c语言代码

51 温度  湿度  c语言代码

#ifndef __TOU_H__//如果没有被编译过#define __TOU_H__//那么标记为编译过#include<reg52.h>#include <intrins.h>#include <math.h>#include<string.h>#define uint unsigned int#define uchar unsigned charenum {TEMP,HUMI};sbit DATA = P2^5;//温湿度传感器位定义sbit SCK = P2^4;void s_connectionreset(void);/******** SHT11函数声明********/char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode); void calc_sth10(float *p_humidity ,float *p_temperature);float calc_dewpoint(float h,float t);#endif//结束#ifndef,如果已经编译过就跳过之间的部分uchar code table1[]="00:00:00";uchar code table2[]="00:00:00RH:00.0";sbit shui1=P1^0;sbit shui2=P1^1;sbit shi_s1=P1^2;sbit shi_s2=P1^3;sbit shi_s3=P1^4;sbit led=P1^6;sbit sound=P1^7;sbit lcden=P2^2;sbit lcdrw=P2^1;sbit lcdrs=P2^0;sbit relay=P2^3;sbit s1=P2^7;uchar data disdata[4];uchar num,count,s1num;char shi,fen,miao,shi1,fen1,miao1;uint bian,i,j;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}//SHT11程序(SHT11.c):#define noACK 0 //继续传输数据,用于判断是否结束通讯#define ACK 1 //结束数据传输;//地址命令读/写#define STATUS_REG_W 0x06 //000 0011 0#define STATUS_REG_R 0x07 //000 0011 1#define MEASURE_TEMP 0x03 //000 0001 1#define MEASURE_HUMI 0x05 //000 0010 1#define RESET 0x1e //000 1111 0//写字节程序char s_write_byte(unsigned char value){unsigned char i,error=0;for (i=0x80;i>0;i>>=1) //高位为1,循环右移{if (i&value) DA TA=1; //和要发送的数相与,结果为发送的位else DATA=0;SCK=1;_nop_();_nop_();_nop_(); //延时3usSCK=0;}DA TA=1; //释放数据线SCK=1;error=DATA; //检查应答信号,确认通讯正常_nop_();_nop_();_nop_();SCK=0;DA TA=1;return error; //error=1 通讯错误}//读字节程序char s_read_byte(unsigned char ack){unsigned char i,val=0;DA TA=1; //释放数据线for(i=0x80;i>0;i>>=1) //高位为1,循环右移{SCK=1;if(DATA) val=(val|i); //读一位数据线的值SCK=0;}DA TA=!ack; //如果是校验,读取完后结束通讯;SCK=1;_nop_();_nop_();_nop_(); //延时3usSCK=0;_nop_();_nop_();_nop_();DA TA=1; //释放数据线return val;}//启动传输void s_transstart(void){DA TA=1; SCK=0;_nop_();SCK=1;_nop_();DA TA=0;_nop_();SCK=0;_nop_();_nop_();_nop_();SCK=1;_nop_();DA TA=1;_nop_();SCK=0;}void s_connectionreset(void){unsigned char i;DA TA=1; SCK=0; //准备for(i=0;i<9;i++) //DATA保持高,SCK时钟触发9次,发送启动传输,通迅即复位{SCK=1;SCK=0;}s_transstart(); //启动传输}//温湿度测量char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)// 进行温度或者湿度转换,由参数mode决定转换内容;{unsigned error=0;unsigned int i;s_transstart(); //启动传输switch(mode) //选择发送命令{case TEMP : error+=s_write_byte(MEASURE_TEMP); break; //测量温度case HUMI : error+=s_write_byte(MEASURE_HUMI); break; //测量湿度default : break;}for (i=0;i<65535;i++) if(DA TA==0) break; //等待测量结束if(DATA) error+=1; // 如果长时间数据线没有拉低,说明测量错误*(p_value) =s_read_byte(ACK); //读第一个字节,高字节(MSB)*(p_value+1)=s_read_byte(ACK); //读第二个字节,低字节(LSB)*p_checksum =s_read_byte(noACK); //read CRC校验码return error; // error=1 通讯错误}//温湿度值标度变换及温度补偿void calc_sth10(float *p_humidity ,float *p_temperature){const float C1=-4.0; // 12位湿度精度修正公式const float C2=+0.0405; // 12位湿度精度修正公式const float C3=-0.0000028; // 12位湿度精度修正公式const float T1=0.46; // 14位温度精度5V条件修正公式const float T2=+0.00008; // 14位温度精度5V条件修正公式float rh=*p_humidity; // rh: 12位湿度float t=*p_temperature; // t: 14位温度float rh_lin; // rh_lin: 湿度linear值float rh_true; // rh_true: 湿度ture值float t_C; // t_C : 温度℃t_C=t*0.01 - 40; //补偿温度rh_lin=C3*rh*rh + C2*rh + C1; //相对湿度非线性补偿rh_true=(t_C-33)*(T1+T2*rh)+rh_lin; //相对湿度对于温度依赖性补偿if(rh_true>100)rh_true=100; //湿度最大修正if(rh_true<0.1)rh_true=0.1; //湿度最小修正*p_temperature=t_C; //返回温度结果*p_humidity=rh_true; //返回湿度结果}//从相对温度和湿度计算露点float calc_dewpoint(float h,float t){float logEx,dew_point;logEx=0.66077+7.5*t/(237.3+t)+(log10(h)-2);dew_point = (0.66077-logEx)*237.3/(logEx-8.16077);return dew_point;}typedef union //定义共用同类型{unsigned int i;float f;} value;void write_com(uchar com)//lcd部分{lcdrs=0;lcdrw=0;delay(5);lcden=1;P0=com;delay(5);lcden=0;}void write_data(uchar date){lcdrs=1;lcden=1;delay(5);P0=date;delay(5);lcden=0;}void lcd_init(){lcdrw=0;lcden=0;delay(15);write_com(0x38);delay(5);write_com(0x38);delay(5);write_com(0x38);write_com(0x38);write_com(0x08);write_com(0x01);write_com(0x06);write_com(0x0c);write_com(0x80+1);TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;write_com(0x80+1);for(num=0;num<8;num++){write_data(table1[num]);delay(20);}write_com(0x80+0x40+1);for(num=0;num<16;num++){write_data(table2[num]);delay(20);}}void write_sfm(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_data(0x30+shi);write_data(0x30+ge);}void write_shedingsfm(uchar add1,uchar date1) {uchar shi1,ge1;shi1=date1/10;ge1=date1%10;write_com(0x80+add1);write_data(0x30+shi1);write_data(0x30+ge1);}void keyscan(){if(shi_s1==0){delay(5);if(shi_s1==0){s1num++;while(!shi_s1);}}if(s1num==1){write_com(0x80+0x40+8);write_com(0x0f);}if(s1num==2){write_com(0x80+0x40+5);write_com(0x0f);}if(s1num==3){write_com(0x80+0x40+2);write_com(0x0f);}if(s1num==4){TR0=1;write_com(0x80+8);write_com(0x0f);}if(s1num==5){write_com(0x80+5);write_com(0x0f);}if(s1num==6){write_com(0x80+2);write_com(0x0f);}if(s1num==7){s1num=0;write_com(0x0c);}if(s1num!=0){if(shi_s2==0){delay(5);if(shi_s2==0){while (!shi_s2);if(s1num==1){miao++;if(miao==60){miao=0;}write_sfm(7,miao);write_com(0x80+0x40+8);}if(s1num==2){fen++;if(fen==60){fen=0;}write_sfm(4,fen);write_com(0x80+0x40+5);}if(s1num==3){shi++;if(shi==24){shi=0;}write_sfm(1,shi);write_com(0x80+0x40+2);}if(s1num==4){TR0=1;miao1++;if(miao1==60){miao1=0;}write_shedingsfm(7,miao1);write_com(0x80+8);}if(s1num==5){fen1++;if(fen1==60){fen1=0;}write_shedingsfm(4,fen1);write_com(0x80+5);}if(s1num==6){shi1++;if(shi1==24){shi1=0;}write_shedingsfm(1,shi1);write_com(0x80+2);}}}}if(shi_s3==0){delay(5);if(shi_s3==0){while (!shi_s3);if(s1num==1){miao--;if(miao==-1){miao=59;}write_sfm(7,miao);write_com(0x80+0x40+8);}if(s1num==2){fen--;if(fen==-1){fen=59;}write_sfm(4,fen);write_com(0x80+0x40+5);}if(s1num==3){shi--;if(shi==-1){shi=23;}write_sfm(1,shi);write_com(0x80+0x40+2);}if(s1num==4){TR0=1;miao1--;if(miao1==-1){miao1=59;}write_shedingsfm(7,miao1);write_com(0x80+8);}if(s1num==5){fen1--;if(fen1==-1){fen1=59;}write_shedingsfm(4,fen1);write_com(0x80+5);}if(s1num==6){shi1--;if(shi1==-1){shi1=23;}write_shedingsfm(1,shi1);write_com(0x80+2);}}}}void baojing(){if(shui1==0){led=~led;delay(150);{for(i=0;i<10;i++){sound=0;delay(20);sound=1;delay(20);}}}if(shui2==0)relay=1;}void lcd_dingshi(){keyscan();if(count==20){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}write_sfm(1,shi);}write_sfm(4,fen);}write_sfm(7,miao);}}void main(){unsigned int temp,humi;value humi_val,temp_val; //定义两个共同体,一个用于湿度,一个用于温度float dew_point; //用于记录露点值unsigned char error; //用于检验是否出现错误unsigned char checksum; //CRCuchar n; n=0;relay=1;lcd_init();P3=0;led=0;sound=1;while(1){if(s1==0)//if语句内为关系运算符为=={delay(20);if(s1==0){n++;while(!s1);}}if(n==5)n=0;switch(n)//使用多分支选择语句{case 1:P3=0x10;bian=500; //第一个LED亮break;case 2:P3=0x20;bian=450; //第二个LED亮break;case 3:P3=0x40;bian=550; //第三个LED亮break;case 4:P3=0x80;bian=600; //第四个LED亮break;default:P3=0x00;}lcd_dingshi();if((shi==shi1)&&(fen==fen1)&&(miao==miao1)){relay=0;}baojing();if(miao==10){s_connectionreset(); //启动连接复位error=0; //初始化error=0,即没有错误error+=s_measure((unsigned char*)&temp_val.i,&checksum,TEMP); //温度测量error+=s_measure((unsigned char*)&humi_val.i,&checksum,HUMI); //湿度测量if(error!=0) s_connectionreset(); ////如果发生错误,系统复位humi_val.f=(float)humi_val.i; //转换为浮点数temp_val.f=(float)temp_val.i; //转换为浮点数calc_sth10(&humi_val.f,&temp_val.f); //修正相对湿度及温度dew_point=calc_dewpoint(humi_val.f,temp_val.f); //计算e dew_pointtemp=temp_val.f*10;humi=humi_val.f*10;disdata[0]=humi%1000/100+0x30;disdata[1]=humi%100/10+0x30;disdata[2]=humi%10+0x30;write_com(0x80+0x40+12);write_data(disdata[0]);write_com(0x80+0x40+13);write_data(disdata[1]);write_com(0x80+0x40+14);write_data(0x2e);write_com(0x80+0x40+15);write_data(disdata[2]);miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}write_sfm(1,shi);}write_sfm(4,fen);}write_sfm(7,miao);}if(P3!=0x00){if(bian>humi){relay=0;}else{relay=1;}}if(shui2==0){relay=1;}}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;}。

51单片机做的温湿度测量仪

51单片机做的温湿度测量仪

51单片机做的温湿度测量仪本人去年用51 单片机做的温湿度传感器模块,有实物,有程序,供大家分享。

该1602 液晶的D0~D7 数据口连接单片机的P17~P10 口,所以程序里的指令和数据都是逆向输入的。

程序和电路图下载:51hei/f/温湿度传感器+1602 原理图.rar#include #include #include #define uchar unsigned char #define uint unsigned int #define noACK 0 #define ACK 1#define STATUS_REG_W 0x06#define STATUS_REG_R 0x07#define MEASURE_TEMP 0x03 #define MEASURE_HUMI 0x05 #define RESET 0x1esbit SCK =P1;sbit DATA=P1;sb it led1=P1;sbit rs=P2;//H 数据,L 命令sbit en=P2 ; //高脉冲使能,使能脉宽最小150nssbit rw=P2;ucha r code table_temp[]=“TEMP: “;uchar code table_humi[]=“HUMI: “;uchar code table_c[]=“C “;uchar code table_p[]=“% “;uchar error=0; void delayms(uint z) { uint i,j; for(i=z;i>0;i--) for( j=110;j>0;j--); } //启动时序void transstart() { SCK=1;_nop_(); DATA=0;_nop_(); SCK=0;_nop_();_nop_();_nop_(); SCK=1;_nop_(); DATA=1;_nop_(); SCK=0; } //写入命令子函数uchar write_byte(uchar value) { uchar i; for(i=0x80;i>0;i=i/2) { if(i&value) DATA=1; else DATA=0; SCK=1; _nop_();_nop_();_nop_(); SCK=0; } DATA=1; SCK=1; error=DATA; SCK=0; return error; }tips:感谢大家的阅读,本文由我司收集整编。

基于 MCS-51 单片机温湿度仪系统的设计

基于 MCS-51 单片机温湿度仪系统的设计

东北林业大学单片机原理实验课程设计总结报告机电工程学院设计工程:基于MCS-51单片机温湿度仪系统地设计工程完成人:谢文权、王世伟指导教师:管雪梅副教授学院:理学院专业:物理学2010级物理一班2012年11月25日综合电子课程设计任务书温湿度传感器综合实验摘要本系统用AT89C51、SHT10、键盘、数码管、液晶屏、DS1302等组成,系统包括测量温度、湿度地功能.系统除基本地测温湿度功能外,还具有时间日期设定、显示等功能.在设计中我们应用LJD-SY-5200单片机实验系统做系统仿真.LJD-SY-5200实验系统具有丰富地硬件资源.本设计采用A T89C51单片机控制可编程芯片CH451实现对显示和键盘地控制.温湿度值在液晶屏幕上显示,时间在数码管上显示.本文详细介绍了如何实现用键盘中断测量显示温湿度地功能,并实现键盘输入修改时间、I/O 口等功能.关键词:sht10;测温湿度;时间显示;键盘设定初值;目录1 绪论21.1 引言 (2)1.2 系统方案设计31.3方案论证32系统主要器件选型与依据42.1 LJD-SY-5200单片机实验系统.................................................... (4)2.2 CH451DS1芯片简介 (5)2.3 DS1302芯片简介 (7)2.4 SHT10 芯片简介 (9)3系统地硬件设计103.1系统硬件设计总框图 (10)3.2温湿度测量电路 (11)3.3时间日期显示设计.............. (12)3.4键盘显示模块设计 (12)4 系统地软件设计135 总结13参考文献附录A温湿度传感器综合实验1绪论1.1引言近年来随着科技地飞速发展,单片机地应用正在不断深入,同时带动传统控制检测技术日益更新.在实时检测和自动控制地单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够地,还应根据具体硬件结构软硬件结合,加以完善.SHT10系列产品是一款高集成度地温湿度传感器芯片,提供全标定数字输出.它采用地CMOSens技术,确保产品具有极高地可靠性与卓越地长期稳定性.传感器包括一个电容性聚合体测湿敏感元件、一个用能隙材料制成地测温元件,并在同一芯片上,与14位地A/D 转换器以及串行接口电路实现无缝连接.因此,该产品具有品质卓越、超快响应、抗干扰能力强、极高地性价比等优点.每个传感器芯片都在极为精确地湿度腔室中进行标定,以镜面冷凝式湿度计为参照.校准系数以程序形式储存在OTP内存中,在标定地过程中使用.两线制地串行接口与内部地电压调整,使外围系统集成变得快速而简单.微小地体积、极低地功耗,使其成为各类应用地首选.本系统采用MSC-51系列单片机和可编程串行I/O接口芯片CH451为中心器件来设计温湿度测量,本系统实用性强、操作简单、扩展功能强.1.2 系统方案设计利用控制芯片、测温电路、键盘显示模块、时钟电路、等分别实现:(1)能够通过键盘输入日期和时间地初值;(2)实时显示时、分、秒;(3)测量并显示温湿度(4)通过I/O口显示图1-1为设计方案总体框图图1-1设计方案总体框图系统初始化后,液晶屏幕上显示“单片机实验”等,同时可通过键盘依次输入时、分、秒,输入完成后即在数码管上显示,通过功能键10能在液晶屏上显示温湿度,通过功能键11能显示I/O口流水灯.1.3方案论证(1)测温模块方案:使用SHT10芯片测量温湿度,SHT10系列产品是一款高集成度地温湿度传感器芯片,提供全标定数字输出.它采用地CMOSens技术,确保产品具有极高地可靠性与卓越地长期稳定性.(2)显示模块方案一:使用LCD液晶屏作为时间日期显示,LCD 液晶显示器地构造是在两片平行地玻璃当中放置液态地晶体,两片玻璃中间有许多垂直和水平地细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面.显示清晰,实现功能全.但是开发板P0口同时作用在点阵和液晶上,不能同时用,故该方案舍弃.方案二:使用8为数码管作为显示,通过芯片CH451控制数码管,可实现时间和日期还有当前交通状态显示,缺点是数码管显示数字,显示不灵活多变.但是LCD液晶屏与点阵IO口冲突,故选用方案二数码管作为显示模块.(3) 时钟电路模块方案一:DS1302一种高性能、低功耗、带RAM地实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V.采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节地时钟信号或RAM数据.DS1302内部有一个31×8地用于临时性存放数据地RAM寄存器.方案二:DS12C887实时时钟芯片功能丰富,可以用来直接代替IBM PC上地时钟日历芯片DS12887,同时,它地管脚也和MC146818B、DS12887相兼容.由于DS12C887能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题;DS12C887中自带有锂电池,外部掉电时,其内部时间信息还能够保持10年之久;对于一天内地时间记录,有12小时制和24小时制两种模式.在12小时制模式中,用AM和PM区分上午和下午;时间地表示方法也有两种,一种用二进制数表示,一种是用BCD码表示;DS12C887中带有128字节RAM,其中有11字节RAM用来存储时间信息,4字节RAM用来存储DS12C887地控制信息,称为控制寄存器,113字节通用RAM使用户使用;此外用户还可对DS12C887进行编程以实现多种方波输出,并可对其内部地三路中断通过软件进行屏蔽.由于DS12C887是并行方式,DS1302是串行方式,为了减少IO口占用,故选用DS1302(4) 键盘显示控制模块方案一:HD7279A是一片具有串行接口地,可驱动8位共阴式数码管(或64只独立LED)地智能显示驱动芯片,该芯片同时还可连接多达64键地键盘矩阵,单片即可完成LED显示、键盘接口地全部功能.方案二:CH451 是一个整合了数码管显示驱动和键盘扫描控制以及μP 监控地多功能外围芯片.CH451 内置RC振荡电路,可以动态驱动8位数码管或者64位 LED,具有 BCD 译码、闪烁、移位等功能;同时还可以进行 64 键地键盘扫描;CH451 通过可以级联地串行接口与单片机等交换数据;并且提供上电复位和看门狗等监控功能.相比之下CH451性能更好一点,故选用CH451作为键盘显示控制芯片2系统主要器件选型及依据2.1 LJD-SY-5200单片机实验系统(1) LJD-SY-5200 地基本结构:LJD-SY-5200 实验系统地硬件部分主要由以下电路构成:显示电路(其中显示电路包括液晶显示,数码管显示,发光二极管显示及8X8 三色LED 点阵显示),键盘电路,USB 电路,串口电路,时钟电路,I2C电路,D/A&A/D 转换电路,测温湿度电路,1-WIRE 总线电路,IC 卡电路,语音电路,蜂鸣器&继电器电路,单脉冲发生电路,红外遥感电路等电路有机组合而成.而实验系统地软件部分则是精心编写并测试通过地所有硬件部分驱动程序和大量地综合实验例程.(2) LJD-SY-5200 硬件配置:LJD-SY-5200 实验系统具有丰富地硬件资源,具体地硬件配置如下:液晶显示器采用地是两兆字库12232 汉字液晶屏,汉显液晶屏具有编程简单使用方便等其他液晶屏所不具备地优点;数码管采用地是8 段8 位数码管;键盘是4X4 行列式键盘,键盘与数码管通过专用键盘和数码管接口芯片CH451 与CPU 相连接,使用键盘接口芯片地好处就是可以大大减少编程地工作量,一个复杂地数码管显示位地闪烁移动操作,在此我们只需要一行简单地命令就能轻轻实现.发光二极管部分采用地24 个红黄绿三色地发光二极管,大量地各色发光二级管组合在一起能够变换出五彩缤纷地色彩;点阵部分采用地8X8 三色点阵显示,点阵地驱动电路是两片74HC573 和一片74HC138 及八个8550 三极管和相应地限流电阻,其具体地使用方法详见后续章节地8X8LED 点阵地操作使用说明;USB 电路采用地是内部已经固化了USB 标准通信协议地USB 接口芯片CH372,使用CH372可以在很大程度上简化USB 驱动程序地开发复杂程度,面对USB 驱动程序地开发初学者不再会望而却步,只要在熟悉相关通信协议地基础上即使是初学者也能轻轻松松开发出属于自己地USB 驱动程序.时钟电路采用地是ds1302 实时时钟芯片,针对该芯片我们配置了较多地相关程序,包括通过数码管显示当前时间地RTC,可调节地通过数码管显示当前时间地RTC,可调节地通过数码管可显示当前时间和日期地RTC,通过12232 液晶显示屏显示当前时间和日期地RTC,这些程序在编写顺序上遵循地是循序渐进,由易到难地原则,是真正地针对初学者而为其量身定做地,具有很强地针对性,相信初学者一定会从中受益地;I2C电路采用地当前流行地AT24C02。

基于51单片机的温湿度DHT11采集(word文档良心出品)

基于51单片机的温湿度DHT11采集(word文档良心出品)

一.设计目的温湿度控制系统早己经成为当今社会研究的热门领域之一,同时温湿度也是现今工农业生产生活中必须要首先考虑的崑要因素之一。

因此现今社会生产生活中就迫切需要一种价格便宜、容易操作而且精确度高的温湿度控制系统。

本系统设计就是利用AT89C52单片机对温湿度参最进行•检测进而实现对温湿度参量的控制。

本系统设计通过使用AT89C52单片机、DHT11传感器模块、LCD 1602 液晶显示屏模块以及LED闪烁和蜂鸣器报警模块。

简单的系统设计就可以基本上满足本系统设计的系统设计耍求。

DHTU数字温湿度传感器负责把采集到的温湿度信号传送给AT89C52单片机。

温湿度经过AT89C52单•片机处理,然后AT89C52准确地把温湿度信号发送到LCD1602液晶显示屏模块, 温湿度数据就可以准确地显示到LCD1602液晶屏上面,同时我们可以分别对温度和湿度设置上下限,越限LED闪烁和蜂鸣器报警模块。

二.设计要求和方案选择・LCD1602能够实时、准确的显示AT89C52采样温度值和湿度值,显示设定报警的温度和风扇的状态。

・DHT11采集温度及湿度值,AT89C52能够将DHT11输送过來的采集信息,准确的判断标准值与设定值之间的差异,及吋的启动报警装置(LED闪烁和蜂鸣器)进行报警。

•根据采集温湿度的数据进行判断,控制继电器进行风扇的开闭传感器选择方案•方案一:利用两个传感器分别检测温度和湿度值,温度检测模块选用DS18B20温度传恋器(+-0.5°C)o湿度检测模块选用HS1101电容式湿度传感器(+-5%RH) o这两款传感器都是我们大学实践电子设计中非常常见和常用的传感器。

•方案二:检测温湿度数值选用DHT11传感器作为系统设计的温湿度检测模块。

DHT11传感器能够同时对温度和湿度数值进行检测,而且其精确度能过完全满足本课程设计的精度要求。

湿度、温度测量误差:+-5%> +-2度•经过上述分析,方案一虽然精度更精确。

温湿度检测控制系统 51单片机毕业设计 C语言源码

温湿度检测控制系统 51单片机毕业设计 C语言源码

//程序头函数#include <reg52.h>//显示函数#include "intrins.h"//宏定义#define uint unsigned int#define uchar unsigned char/*------------------------------------------------------------------ Includes 头文件------------------------------------------------------------------*//*------------------------------------------------------------------ Private typedef ------------------------------------------------------------------*/ /*------------------------------------------------------------------ Private macro 宏定----------------------------------------------------------------*//*------------------------------------------------------------------ Private variables 变量------------------------------------------------------------*//*------------------------------------------------------------------ Private function prototypes 函数--------------------------------------------------*/ //宏定义#define uint unsigned int#define uchar unsigned char//管脚声明sbit LED_wendu = P2^5; //温度上限值操作端口,报警灯吸合继电器;sbit LED_wendu_L = P2^4; //温度下限报警灯sbit LED_humi = P2^2; //湿度上限报警灯sbit LED_humi_L = P2^0; //湿度下限报警灯sbit baojing = P3^2; //蜂鸣器接口//按键sbit Key1=P1^1; //设置键sbit Key2=P1^5; //加按键sbit Key3=P1^6; //减按键sbit Key4=P1^2; //退回监控模式键sbit Key5=P1^3; //手空温度上限指示灯sbit Key6=P1^4; //手空温度下限指示灯sbit Key7=P1^7; //手空湿度上限指示灯sbit Key8=P2^1; //手空湿度下限指示灯sbit DHT11=P1^0; //DHT11sbit P_IR_RX = P3^3; //定义红外接收输入端口uchar key_IR; //红外检测signed char w; //温度值全局变量uint c; //温度值全局变量uchar temp; //用于读取ADC数据uchar yushe_wendu=60; //温度预设值uchar yushe_humi=80; //湿度预设值uchar yushe_wendu_L=15; //温度预设值uchar yushe_humi_L=10; //湿度预设值//按钮模式|uchar Mode=0; //=1是设置温度阀值 =2是设置湿度阀值uchar U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;uchar U8FLAG,U8comdata;uchar U8count,U8temp;ucharU8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_te mp;//软件延时函数void delay(uint z) //延时函数大约延时z ms{uint i,j;for(i=0;i<z;i++)for(j=0;j<121;j++);}void Delay_Ms(uint ms){uint i,j;for(i=ms;i>0;i--)for(j=112;j>0;j--);}/******************************************************************************* ************************LCD1602相关命令******************************************************************************** ************************/。

基于51单片机的湿度控制器(含原理图与C代码)

基于51单片机的湿度控制器(含原理图与C代码)

单片机湿度控制器作者姓名:谢龙专业班级:2008050107 指导教师:陈川摘要本系统采用AT89C51作为控制系统,通过模拟传感器把湿度信号采集后送给ADC0804,转换成数字信号后送入单片机,再通过LCD1602显示出来,同时独立键盘输入湿度上门限值和下门限值,当湿度值低于下门限值或上门限值时系统驱动蜂鸣器报警和控制电路进行湿度控制,当湿度再次回到两个门限值之间时消除报警和停止湿度控制,本系统实时刷新当前湿度和门限值,适用于大棚,花卉以及家庭湿度检测与控制。

目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标志。

同时,控制理论的发展也经历了古典控制理论、现代控制理论和智能控制理论三个阶段。

智能控制的典型实例是模糊全自动洗衣机等。

关键词:AT89C51,LCD1602,ADC0804,湿度控制与检测Single-chip humidity controllerSummaryThis system used AT89C51 as control system, by simulation sensorto humidity signal collection Hou to ADC0804, conversion into digital signal Hou into single tablets machine, then by LCD1602 displayed out, while independent keyboard entered humidity door limited value and Xia threshold value, dang humidity value below Xia threshold value or door limited value Shi system drive buzzer alarm and control circuit for humidity control, dang humidity again returned to two a threshold value Zhijian Shi elimination alarm and stop humidity control, This system live and refreshes the current humidity threshold values, apply to greenhouse, flower and family and humidity measuring and controllingThe current level of industrial automation has become an important symbol of the measure of all walks of life the level of modernization. The same time, the development of control theory has experienced a classical control theory, modern control theory and the theory of intelligent control in three stages. The typical example of the intelligent control fuzzy automatic washing machine.Keyword:AT89C51,LCD1602,ADC0804,humidity controller目录第一章绪论 ----------------------------------------------------------------------------11.1选题背景及目的----------------------------------------------- 11.2发展状况----------------------------------------------------- 11.3各章节主要内容----------------------------------------------- 3 第2章系统的方案与论证-------------------------------------------- 42.1系统选择论证------------------------------------------------- 42.1.1 单片机控制模块的选择论证------------------------------ 42.1.2 显示模块的选择与论证---------------------------------- 42.2 设计任务及要求--------------------------------------------- 42.3 系统的设计原则--------------------------------------------- 52.4 系统组成与框图--------------------------------------------- 6系统控制结构组成如图2-1 ------------------------------------- 62.5 系统原理设计----------------------------------------------- 62.5.1 AT89C51简介------------------------------------------ 62.5.2 AT89C51管脚说明-------------------------------------- 72.5.3 振荡器特性-------------------------------------------- 92.5.4 时钟电路---------------------------------------------- 92.5.5 复位电路--------------------------------------------- 102.5.6 AD转换电路------------------------------------------ 102.6 湿度传感器------------------------------------------------ 122.6.1 湿敏元件的特性---------------------------------------- 122.6.2 湿敏电阻---------------------------------------------- 122.6.3 湿敏电容--------------------------------------------- 122.6.3 湿度测量的名词术语----------------------------------- 122.7 LCD液晶显示器--------------------------------------------- 13 第三章硬件电路的设计--------------------------------------------- 163.1 湿度传感器与ADC0804连接电路------------------------------ 163.2 LCD电路图------------------------------------------------- 173.3 独立键盘与驱动电路---------------------------------------- 183.4 总体电路设计---------------------------------------------- 18 第四章程序流程图与代码------------------------------------------ 194.1 主要程序流程图-------------------------------------------- 194.2 主要程序-------------------------------------------------- 20 第五章系统的调试与总结------------------------------------------ 215.1 单片机测试------------------------------------------------ 215.2 硬件及软件调试-------------------------------------------- 215.3 整机的调试与测试------------------------------------------ 215.4 综合调试-------------------------------------------------- 22 总结--------------------------------------------------------------- 22 参考文献----------------------------------------------------------- 23 附录一------------------------------------------------------------- 24 附录二------------------------------------------------------------- 38第一章绪论1.1选题背景及目的在工农业生产和日常生活中,对湿度的测量及控制始终占据着重要地位。

基于51单片机的温湿度测量电路的设计

基于51单片机的温湿度测量电路的设计

经过线性补偿后的湿度值,SORH 为相对湿度测量值,C1、C2、C3
为线性补偿系数,公式 2 为 RHtrue=(T-25)×(t1+t2×SORH)
+RHlinear,式中:RHtrue 为经过线性补偿和温度补偿后的湿度
值,T 为测试湿度值时的温度 (℃ ),t1 和 t2 为温度补偿系数,公式
3 为 Temperature=d1+d2×SOT,d1 和 d2 为 特 定 系 数,d1 的 取
+5V 逻辑电源;3 号引脚 VEE 为液晶驱动电源,4 号 5 号 6 号分别
为寄存器选择,读 / 写操作选择,使能信号,这三个引脚的取值不
同功能也不同。如表 1 所示:
表1
4:RS
5:R/W
6:E
功能
0
0
下降沿
写指令代码
0
1
高电平
读标志和 AC 码
1
0
下降沿
写数据
1
1
高电平
读数据
LCD 液晶显示屏使用前通常需要进行清屏操作(用软件实现),
电平时电机 MOTOR 不转。
2. 关于光耦隔离装置 OPTOCOUPLER-NPN
该装置采用输入级为二极管,输出级为三极管的形式。当输入
级的二极管导通时,即可对输出级的三极管进行光照,从而使输出
级的三极管的 4,5 引脚导通,形成一根导线;输出级为带基极的三
极管,具有放大状态,6 引脚的作用便是使输出电流放大,在连接
本 次电 路设 计 将 使 用 PROTUES 进行 仿 真,以 MCS51 单
片 机 为 CPU,电 路 实 现 过 程中 将 使 用以下器 件(某 些 器 件 在

基于51单片机温湿度监控系统毕业设计

基于51单片机温湿度监控系统毕业设计

摘要温湿度监控是人们对居室要求的重要指标之一,也是影响人体健康的重要因素之一。

为了保证对温湿度良好的监测和控制,本文采用数字式温湿度传感器SHTll来设计居室温湿度监测系统,以达到简化软硬件系统设计,提高测量精度的目的。

首先介绍了SHTll的结构特点、接口电路,以及温湿度测量系统的软硬件设计方案,最后基于AT89C51单片机和光电耦合器设计了电路简洁、大大节省I/O口资源的居室温湿度监控系统,保证了由AT89C51单片机输出的弱电来控制外围的强电电路,本设计不仅仅只是在原理上可行,而且在实际运用中也了能实现对人们居室温湿度的精确测量与控制,该电路简单且工作稳定,集成度高,操作方便、灵活,对满足人们居室环境的要求具有一定的实用价值和意义。

关键字:AT89C51单片机,SHT11,光电耦合器AbstractThe temperature and humidity control to the requirements of the bedroom is people important indexes, and also one of the important factors affect human health of one. In order to guarantee to the temperature and humidity good monitoring and control, this paper using digital temperature and humidity sensors to design SHTll bedroom temperature and humidity monitoring system, in order to achieve the simplified the hardware and software system design, improve the accuracy of measurement purposes. First introduced the structure characteristics of the SHTll, interface circuit, and the temperature and humidity measurement system hardware and software design scheme, then based on AT89C51 single-chip microcomputer and photoelectric coupling control circuit design the simple circuit, save the I/O mouth of temperature and humidity control system resources bedroom, ensure the electricity output by AT89C51 single-chip microcomputer to control in the outer reaches of the high voltage circuit, this design is not just in principle on feasible, but also in the practical application of the bedroom can realize to people the precise measurement of the temperature and humidity and control, the circuit is simple and stable operation, high level of integration, convenient operation, flexible, to meet the requirements of the people bedroom environment has certain practical value and meaning. Keywords:AT98C51,SHT11, ,Photoelectric coupled circuit目录摘要 (I)ABSTRACT (II)1 绪言1.1课题背景 (3)1.2课题的研究和意义 (3)1.3国内外概况 (3)1.4课题的主要研究工作 (5)2系统设计方案的研究2.1系统设计方案 (6)2.2系统设计方案得比较 (6)2.3系统实现的原理 (7)3硬件的设计3.189C51芯片 (8)3.2SHT11传感器 (8)3.3LCD LM016L显示模块 (10)3.4报警模块 (11)4 软件系统与实现4.1软件子系统设计 (12)4.2P ROTEUS简介 (18)4.3C语言介绍 (18)4.4K EIL 软件介绍 (19)4.5仿真结果 (19)4.5.1温度超出上线和低于下限时控制电路工作 (19)4.5.2温度超出上线和低于下限时控制电路工作 (20)4.5.3温湿度不在预设范围事报警器工作 (20)5总结与展望 (22)5.1总结 (22)5.1.1硬件方面 (22)5.1.2软件方面 (22)5.2展望 (22)5.2.1系统硬件 (22)5.2.2系统软件 (23)致谢 (24)参考文献 (25)附录 .............................................................................................. 错误!未定义书签。

基于51单片机的温湿度检测系统设计与实现

基于51单片机的温湿度检测系统设计与实现

3、无线通信模块
本系统的无线通信模块采用nRF24L01无线通信芯片。nRF24L01是一款具有 2.4GHz全球开放频率的无线通信芯片,具有低功耗、高速率、高稳定性等特点。 它将主控制器处理后的数据通过无线方式发送给接收器。
4、电源模块
本系统的电源模块采用9V电池供电。我们将9V电池通过稳压器转换为5V电源, 为整个系统提供稳定的电力支持。
三、测试与结果分析
为了验证本系统的可靠性和准确性,我们进行了一系列的测试。测试结果表 明,本系统能够准确快速地采集环境中的温湿度数据,并且能够稳定地将数据上 传至计算机或其他数据采集设备。同时,本系统的按键电路和液晶显示电路也表 现良好,用户可以通过按键调整系统的参数设置,并直观地查看温湿度数据。
2、液晶显示屏
为了方便用户直观地查看温湿度数据,本系统选用了一块16×2字符型液晶 显示屏。液晶屏的驱动电路简单易懂,且具有较低的功耗。
3、按键电路
为了便于用户对温湿度检测系统的参数进行设置,本系统加入了一个按键电 路。用户可以通过按键对系统的采样间隔、数据上传频率等参数进行设置。
4、串口通信电路
图1主程序流程图
2.温湿度采集模块
温湿度采集模块主要负责通过DHT11传感器采集环境中的温湿度数据。该模 块首先对DHT11传感器进行初始化,然后通过单总线接口接收传感器输出的温湿 度数据,最后对数据进行处理并存储。
3、液晶显示模块
液晶显示模块主要负责将温湿度数据显示在液晶屏上。该模块首先对液晶屏 进行初始化,然后根据主程序传递过来的温湿度数据,控制液晶屏的字符输出。
三、软件设计
本系统的软件设计主要分为以下几个步骤:
1、系统初始化:在系统上电后,首先进行各模块的初始化操作,包括DHT11 传感器、AT89C51单片机、nRF24L01无线通信芯片等。

基于51单片机的温湿度测量参考程序

基于51单片机的温湿度测量参考程序

#include<reg52.h>#include<math.h>#include<INTRINS.H>#define uint unsigned int#define uchar unsigned charsbit seg1=P2^0;sbit seg2=P2^1;sbit seg3=P2^2;sbit DQ=P1^3;//ds18b20 端口sfr dataled=0x80;//显示数据端口uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,};uchar code we[]={0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff,}; uchar huanchong[]={0,0,0,0,0,0,0,0,};uchar dispcount,T0count,time,temp[8];sbit led=P1^2;bit flag;uint temp1;uchar flag_get,count,num,minute,second;unsigned long x;void delay1(uchar MS);unsigned int ReadTemperature(void);void Init_DS18B20(void);unsigned char ReadOneChar(void);void WriteOneChar(unsigned char dat);void delay(uint z){while(z--);}void main(void){uchar TempH,TempL;uchar i;EA=1;TMOD=0x15;TH0=0;TL0=0;TH1=(65536-4000)/256;TL1=(65536-4000)%256;TR1=1;TR0=1;ET0=1;ET1=1;//P2=0x00;count=0;while(1){P2=we[7];P0=duan[huanchong[0]];delay(250);P2=we[6];P0=duan[huanchong[1]];delay(250);P2=we[5];P0=duan[huanchong[2]];delay(250);P2=we[4];P0=duan[huanchong[3]];delay(250);P2=we[3];P0=duan[12];delay(250);P2=we[2];P0=duan[TempL];delay(250);P2=we[1];P0=duan[(TempH%100)%10]|0x80;delay(250);P2=we[0];P0=duan[(TempH%100)/10];delay(250);if(flag_get==1) //定时读取当前温度{temp1=ReadTemperature();if(temp1&0x8000){P2=we[0];P0=0x40;//负号标志temp1=~temp1; // 取反加1temp1 +=1;}elseP2=we[0];P0=0;TempH=temp1>>4;TempL=temp1&0x0F;TempL=TempL*6/10;//小数近似处理flag_get=0;}if(flag==1){flag=0;x=T0count*65536+TH0*256+TL0;for(i=0;i<4;i++){temp[i]=0;}i=0;while(x/10){temp[i]=x%10;x=x/10;i++;}temp[i]=x;for(i=0;i<4;i++){huanchong[i]=temp[i];}time=0;T0count=0;TH0=0;TL0=0;TR0=1;}}}void t0(void)interrupt 1 using 0{T0count++;}void t1(void)interrupt 3 using 0{TH1=(65536-4000)/256;TL1=(65536-4000)%256;time++;num++;if(time==250){led=~led;TR0=0;time=0;flag=1;}if (num==50){num=0;flag_get=1;//标志位有效second++;if(second>=60){second=0;minute++;}}}void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时大于480usDQ = 1; //拉高总线delay(10);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(5);}/******************************************************************/ /* 读一个字节*/ /******************************************************************/ unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay(5);}return(dat);}/******************************************************************/ /* 写一个字节*/ /******************************************************************/ void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay(5);DQ = 1;dat>>=1;}delay(5);}/******************************************************************//* 读取温度*//******************************************************************/ unsigned int ReadTemperature(void){unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay(200);Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar(); //低位b=ReadOneChar(); //高位b<<=8;t=a+b;return(t);}。

基于52单片机温湿度传感器课程设计报告(含代码)

基于52单片机温湿度传感器课程设计报告(含代码)

基于52单片机的温湿度检测仪的设计摘要利用Atmel52系列单片机和数字温湿度传感器AM2301设计并制作一个简单的温湿度检测仪。

以单片机为核心,外围电路包括电源、时钟芯片、12864LCD、Max232芯片、AM2301传感器以及蜂鸣器报警电路等。

其中AM2301传感器是含有已校准数字信号输出的温湿度复合传感器,它包括一个电阻式感湿元件和一个NTC测温元件。

LCD 显示包括万年历、温湿度以及报警设置,同时通过内部中断方式把温湿度的实时值通过VB编写的上位机程序接收并显示。

一、设计功能(1)L CD分两个界面显示:主界面和设置报警界面;(2)主界面显示万年历和温湿度实时值;(3)设置报警界面显示温湿度上下限及开/关报警;(4)当温湿度低于设置的下限或高于设置的上限并且开报警后,蜂鸣器和led灯配合报警;(5)有按键设置功能,以及关报警和回到主界面显示功能;(6)能通过Max芯片和计算机通信,把温湿度数据显示在上位机界面上,实现远程监控。

二、设计所需元件清单(1)9V电源(2)杜邦线若干(3)12864LCD1块(4)80X52单片机1片(5)排阻1排,电阻若干(6)AM2301传感器1个(7)32768Hz晶振1个,12MHz晶振1个(8)蜂鸣器1个(9)LM2940稳压元件1个(10)DS1302时钟芯片1片(11)船型开关1个,触点开关若干(12)30pF电容若干,22uF电容若干(13)LED灯2个,三极管,纽扣电池三、具体设计根据所要实现的功能,将系统模块化设计,总体模块结构图如下图所示:以下就分别就各模块功能实现进行设计。

1.复位电路这部分是单片机一般都需要的,当运行出错或者死机时,利用复位按键能重新启动系统。

RST2.时钟电路如上图所示。

其中时钟芯片DS1302的各引脚功能如下:Vcc1:主电源;Vcc2:备份电源。

当Vcc2>Vcc1+0.2V时,由Vcc2 向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。

基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码

基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码

基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码/***************DHT11温湿度监测+液晶LCD1602显示程序源代码******************单片机型号:STC15W4K56S4,内部晶振:22.1184M。

功能:DHT11温湿度监测+液晶LCD1602显示。

操作说明:通过温湿度传感器DHT11监测温湿度数值,并将温湿度数值显示在液晶LCD1602上。

**************************************************************************/#include "stc15.h" //包含头文件stc15.h#include <intrins.h> //包含头文件intrins.h#define Busy 0x80 //LCD忙sbit LCD_D0 = P0^0; //LCD_D0对应P0.0sbit LCD_D1 = P0^1; //LCD_D1对应P0.1sbit LCD_D2 = P0^2; //LCD_D2对应P0.2sbit LCD_D3 = P0^3; //LCD_D3对应P0.3sbit LCD_D4 = P0^4; //LCD_D4对应P0.4sbit LCD_D5 = P0^5; //LCD_D5对应P0.5sbit LCD_D6 = P0^6; //LCD_D6对应P0.6sbit LCD_D7 = P0^7; //LCD_D7对应P0.7sbit LCD_RS = P1^0; //LCD_RS对应P1.0sbit LCD_RW = P1^1; //LCD_RW对应P1.1sbit LCD_EN = P3^4; //LCD_EN对应P3.4sbit DHT11_PIN = P4^0; //DHT11管脚对应P4.0void delay(unsigned int t); //delay延时函数void delay_us(unsigned int t); //delay_us延时函数void delay_ms(unsigned int t); //delay_ms延时函数void Delay5Ms(void); //5Ms延时函数void GPIO_1602_Configuration(void); //LCD1602液晶IO口初始化void WriteDataLCD(unsigned char WDLCD); //LCD写数据函数void WriteCommandLCD(unsigned char WCLCD,BuysC); //LCD写命令函数unsigned char ReadDataLCD(void); //LCD读数据函数unsigned char ReadStatusLCD(void); //LCD读状态函数void LCDInit(void); //LCD初始化void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData);//LCD显示一个字符void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData); //LCD显示一个字符串void DHT11_Init(void); //初始化DHT11void DHT11_Delay(unsigned int j); //延时函数,用于DHT11 void DHT11_Delay_10us(void); //延时函数,用于DHT11 void COM(void);void RH(unsigned char *temp,unsigned char *humi);void DHT11_Display(void);unsigned char code welcome[] = {"DHT 11"}; //LCD显示内容DHT 11 unsigned char code Dht11[] = {"T: H: "}; //LCD显示内容T: H: unsigned char code Space[] = {" "};//LCD显示内容空白unsigned char U8FLAG,k;unsigned char U8count,U8temp;unsigned char U8T_data_H_temp,U8T_data_L_temp;unsigned char U8RH_data_H_temp,U8RH_data_L_temp;unsigned char U8checkdata_temp;unsigned char U8comdata;unsigned char temperature;unsigned char humidity;unsigned char disbuff_T[4]={0,0,0,0};unsigned char disbuff_H[4]={0,0,0,0};void delay(unsigned int t) //delay延时函数{while(t--);}void delay_us(unsigned int t) //delay_us延时函数{unsigned char i;while(t--){i = 3;while(i--) delay(1);}}void delay_ms(unsigned int t) //delay_ms延时函数{while(t--){delay_us(t);}}void Delay5Ms(void) //5ms延时函数{unsigned int TempCyc = 3552;while(TempCyc--);}void GPIO_1602_Configuration(void) //LCD1602液晶IO口初始化{P0M1 = P3M1&0x00;P0M0 = P3M0&0x00;P1M1 = P3M1&0xfc;P1M0 = P3M0&0xfc;P3M1 = P4M1&0xef;P3M0 = P4M0&0xef;}unsigned char ReadStatusLCD(void) //测试LCD忙碌状态{LCD_D7 = 1; //LCD的D7置1LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 1; //LCD管脚RW设置成高电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 1; //LCD管脚E设置成高电平while(LCD_D7); //检测忙信号return(Busy); //表示当前忙}void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if(BuysC) ReadStatusLCD(); //根据需要检测忙LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 0; //LCD管脚RW设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时P0 = WCLCD; //将数据送入P0口,即写入指令或地址 _nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void WriteDataLCD(unsigned char WDLCD) //LCD写数据函数{ReadStatusLCD(); //读取LCD状态LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 1; //LCD管脚RS设置成高电平LCD_RW = 0; //LCD管脚RW设置成低电平P0 = WDLCD; //将数据送入P0口_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void LCDInit(void) //LCD初始化{WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); //显示光标移动设置WriteCommandLCD(0x0C,1); //显示开及光标设置}void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCD(X,0); //这里不检测忙信号,发送地址码WriteDataLCD(DData); //发送数据}void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) {unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]>=0x20) //若到达字串尾则退出{if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]);//显示单个字符ListLength++;X++;}}}void DHT11_Init(void) //初始化DHT11 {P4M1 = P4M1&0xfe;P4M0 = P4M0&0xfe;}void DHT11_Delay(unsigned int j){unsigned char i;for(;j>0;j--){for(i=0;i<250;i++);}}void DHT11_Delay_10us(void){unsigned char i;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;}void COM(void){unsigned char i;for(i=0;i<8;i++){U8FLAG=2;while((!DHT11_PIN)&&U8FLAG++);DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us();U8temp=0;if(DHT11_PIN)U8temp=1;U8FLAG=2;while((DHT11_PIN)&&U8FLAG++); //超时则跳出for循环if(U8FLAG==1)break;//判断数据位是0还是1,如果高电平高过预定0高电平值则数据位为 1U8comdata<<=1;U8comdata|=U8temp;}}void RH(unsigned char *temp,unsigned char *humi){DHT11_PIN = 0;DHT11_Delay(180);DHT11_PIN = 1; //总线由上拉电阻拉高主机延时20us DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us(); //主机设为输入判断从机响应信号DHT11_PIN = 1;//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行if(!DHT11_PIN){U8FLAG=2;//判断从机是否发出 80us 的低电平响应信号是否结束while((!DHT11_PIN)&&U8FLAG++);U8FLAG=2;//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态while((DHT11_PIN)&&U8FLAG++); //数据接收状态COM();U8RH_data_H_temp=U8comdata;COM();U8RH_data_L_temp=U8comdata;COM();U8T_data_H_temp=U8comdata;COM();U8T_data_L_temp=U8comdata;COM();U8checkdata_temp=U8comdata;DHT11_PIN=1; //数据校验U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp){*temp = U8T_data_H_temp;*humi = U8RH_data_H_temp;}}}void DHT11_Display(void){RH(&temperature,&humidity);disbuff_T[2]=temperature/100+0x30;disbuff_T[1]=temperature/10%10+0x30;disbuff_T[0]=temperature%10+0x30;disbuff_H[2]=humidity/100+0x30;disbuff_H[1]=humidity/10%10+0x30;disbuff_H[0]=humidity%10+0x30;DisplayOneChar(2,1,disbuff_T[2]);delay_ms(10); //延时DisplayOneChar(3,1,disbuff_T[1]);delay_ms(10); //延时DisplayOneChar(4,1,disbuff_T[0]);delay_ms(10); //延时DisplayOneChar(8,1,disbuff_H[2]);delay_ms(10); //延时DisplayOneChar(9,1,disbuff_H[1]);delay_ms(10); //延时DisplayOneChar(10,1,disbuff_H[0]);delay_ms(10); //延时}void main(void){GPIO_1602_Configuration(); //LCD1602液晶IO口初始化delay_ms(10); //延时LCDInit(); //LCD1602初始化delay_ms(10); //延时DHT11_Init(); //初始化DHT11DisplayListChar(5,0,welcome); //LCD1602显示Hello My Friends delay_ms(10); //延时while(1){DisplayListChar(0,1,Space); //LCD1602显示P: K1delay_ms(10); //延时DisplayListChar(0,1,Dht11); //LCD1602显示delay_ms(10); //延时DHT11_Display();delay_ms(200); //延时}}程序源代码是编译通过的DHT11温湿度监测模块接口电路图该程序的实际运行效果。

基于51单片机温湿度监控系统毕业设计

基于51单片机温湿度监控系统毕业设计

基于51单片机温湿度监控系统毕业设计1. 引言温湿度监控系统是一种用于实时监测环境温度和湿度的设备,广泛应用于工业生产、农业种植、仓储物流等领域。

本文将介绍基于51单片机的温湿度监控系统的设计和实现过程。

2. 设计目标本设计旨在开发一款简单易用、功能稳定的温湿度监控系统。

具体设计目标如下:- 实时监测环境温度和湿度; - 提供用户界面,显示当前温湿度数据; - 当温湿度超出设定范围时,发出警报信号。

3. 硬件设计3.1 单片机选择本设计选用51系列单片机作为主控芯片,因其成本低廉、易于编程和广泛应用等优点。

3.2 温湿度传感器采用常见的DHT11数字式温湿度传感器,具有价格低廉、精确可靠等特点。

3.3 显示模块使用LCD1602液晶显示模块,能够直观地显示当前环境温湿度数据。

3.4 警报器选用蜂鸣器作为警报器,当温湿度超出设定范围时,发出警报信号。

3.5 其他外围电路为了实现与单片机的通信和控制,还需设计适当的电源、电压转换、数据传输等外围电路。

4. 软件设计4.1 系统框架本系统采用基于C语言的嵌入式软件开发,主要包括初始化、数据采集、数据处理和用户界面显示等模块。

4.2 初始化模块在系统启动时,需要对硬件进行初始化设置,包括配置串口通信、LCD1602显示模块和DHT11传感器等。

4.3 数据采集模块通过DHT11传感器采集环境温湿度数据,并将其转换为数字信号供单片机处理。

4.4 数据处理模块根据用户设定的温湿度范围,对采集到的温湿度数据进行判断和处理。

当温湿度超出设定范围时,触发警报信号。

4.5 用户界面显示模块通过LCD1602显示当前环境温湿度数据,并提供简单的操作界面,包括设定温湿度范围和查看历史数据等功能。

5. 系统实现5.1 硬件连接根据设计需求,将单片机、DHT11传感器、LCD1602显示模块和蜂鸣器等进行正确的连接。

5.2 软件编程使用C语言编写嵌入式软件程序,实现系统框架中各个模块的功能。

基于51单片机的温湿度传感器的设计与制作

基于51单片机的温湿度传感器的设计与制作

摘要:温湿度使我们生产生活中很重要的参数,本设计为基于51单片机的温湿度检测与控制系统,采用模块化、层次化设计。

如今采纳新技术,使用新式智能的温湿度传感器DHT11来实现对温度、湿度的监测,运用DHT11来完成湿度信号的收集并将其转换为数字式信号,接着使用单片机AT89C52分析、处置数据,提供信号给报警及显示电路,从而完成对温湿度的检测与监控。

依据设定的报警高低限值来体现报警体系的报警功效,采纳LCD1602液晶显示所测得的温湿度值。

优点是系统的电路简单、集成度高、运行稳定、调试方便、检测精度很高,有一定的实用价值。

关键词:单片机;DHT11温湿度传感器;LCD1602显示Abstract:Temperature and humidity that we are important parameters in production and living, this design is based on 51 single chip microcomputer temperature and humidity detection and control system, adopts the modular, hierarchical design. Now adopt new technology, the use of new intelligent temperature and humidity sensor DHT11 to realize the monitoring of temperature, humidity, using DHT11 to humidity signal collection and convert them into digital signals, then using microcontroller AT89C52 analysis and treatment of data, provides the signal to alarm and display circuit, so as to complete the detection and monitoring of temperature and humidity. According to set the alarm of high and low limit to reflect the alarm function of the alarm system, adopt LCD1602 LCD display the measured temperature and humidity values. Advantage is simple circuit, high integration, stable running, convenient debugging and testing precision is high, has certain practical value.Key words:Single chip microcomputer; DHT11 temperature and humidity; LCD1602 display目录第一章引言 (4)1.1课题的研究背景 (4)1.2课题的研究内容及目标 (4)1.3本文的组织结构 (4)第二章设计要求及目的 (4)1.1 设计目的 (4)1.2 设计要求 (4)第三章系统方案设计及论证 (4)3.1总体方案设计 (5)3.2方案比较与论证 (5)3.2.1温湿度检测 (5)3.2.2主从机通信 (6)3.2.3显示部分 (6)第四章系统的硬件设计与实现 (6)4.1 单片机介绍 (6)4.1.1 单片机主要性能 (6)4.1.2 单片机各引脚功能介绍 (7)4.1.3 单片机特殊功能寄存器介绍 (7)4.2 DHT11数字温湿度传感器介绍 (11)4.2.1 DHT11产品概述 (7)4.2.2 串行接口 (7)4.3 红外发射电路 (11)4.4红外接收电路 (13)第五章软件设计 (14)5.1主机程序 (14)5.2从机程序 (15)总结 (17)致谢 (18)参考文献 (19)附录一主机电路图 (20)附录二从机电路图 (21)附录三程序代码 (22)第一章引言1.1 课题的研究背景温度与湿度与人们的生活息息相关。

基于51单片机的温湿度检测系统设计与实现

基于51单片机的温湿度检测系统设计与实现

单片腸程设计设计题目:基于51单片机的温湿度检测系统设计与实现姓名 ____________________学号201851**院系物理与电子工程学院专业一电子信息科学与技术年级 ____________ 2018级指导教师林2020年6月10日摘要 (2)ABSTRACT (3)第一章概述 (4)第二章系统设计 (5)第三章硬件设计 (6)3.1单片机最小系统 (7)3.2单片机的选用及介绍 (8)3.3单片机最小系统的组成 (9)第四章结论................................................... 参考文献3.4传感器模块 (10)13附录一 (16)附录二 (17)致谢 ....................................................................摘要在日常生活及工业生产过程中,经常要用到温度的检测及控制,温度是生产过程和科学实验中普遍而且重要的物理参数之一。

本文主要阐述了系统的工作原理、设计及实现。

山温度传感器测量当前的温度,并将结果送入单片机。

然后通过51单片机对送来的温度进行计算和转换,并将此结果送入液晶显示模块。

最后,山液晶显示显示出温度值。

它可以实时地显示和设定温度,实现对温度的自动控制,当温度值超出上、下限时自动报警,实现了系统结构简单、性能可靠、控制精度高,同时系统具有扩展性好,分辨率高,测量范围宽,抗干扰性强等特点。

关键词:51单片机;温湿度;Abstractin daily life and industrial production process, temperature detection and control is often used, temperature is one of the common and important physical parameters in production process and scientific experiments・ This paper mainly expounds the working principle, design and implementation of the system・ The current temperature is measured by the temperature sensor, and the result is fed into the single chip microcomputer. Then the temperature is calculated and converted by 51 single chip microcomputer, and the result is fed into the LCD module・ finally, the temperature value is displayed by the liquid crystal display. It can displayand set the temperature in real time, realize the automatic control of the temperature, alarm automatically when the temperature value exceeds the upper and lower limits, and realize the system. The system has the advantages of simple structure, reliable performance, high control precision, good expansibility, high resolution, wide measuring range and strong anti-interference ・第一章设计背景科技的进步必然推动物质水平的提升,这也是人们对美好生活的向往的必然结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
HXD=0;
Delay(500);
HXD=1;
Delay(500);
HXD=0;
Delay(500);
HXD=1;
} // 只有温度超标时,频率3报警
} // 蜂鸣器报警
//uchar Seg1_Tab[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
uchar Dig_Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar temp_H,temp_L,humi_H,humi_L;
#include<regx51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_DB P2
uchar Seg_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39,0x76,0x77,0x63};
}
}
void RH(void) //DHT11的数据读取
{
//主机拉低18ms
DHT11=0;
Delay(180);
DHT11=1;
//总线由上拉电阻拉高 主机延时20us
P0=Seg_Tab[d3];Segce=1;Segce=0;
P0=Dig_Tab[3];Digce=1;Digce=0;for(j=0;j<500;j++);
P0=Seg_Tab[13];Segce=1;Segce=0;
P0=Dig_Tab[5];Digce=1;Digce=0;for(j=0;j<500;j++);
for(i=n;i>0;i--)
for(j=0;j<2;j++);
}
//***************DHT11数据接收处理与数码管显示部分*************
void inter_init() //初始化函数
{
P0=0;
P0=0XFF;Digce=1;Digce=0;
P0=Seg_Tab[11]; Segce=1;Segce=0;
P0=Dig_Tab[0];Digce=1;Digce=0;for(j=0;j<500;j++);
P0=0XFF;Digce=1;Digce=0;
P0=Seg_Tab[12];Segce=1;Segce=0;
uchar value,check,bt,sum,bt_temp,keynum,flag;
uchar tH,tL,hH,hL,RHH,RHL,HT,LT;
uchar warning_RHHL[2]={65,20};
uchar warning_THL[2]={25,16};
uchar m,n,d1,d2,d3,d4,d5,d6;
P1=0x0c;
TMOD=0x01;
TH0=-50000/256;
TL0=-50000%256;
EA=1;
ET0=1;
}
void COM(void) //DHT11的bit读取
{
uchar i;
for(i=0;i<8;i++)
uchar TD=0;
uchar s1[5];
uchar s2[5];
sbit Segce=P1^0;
sbit Digce=P1^1;
sbit Keyce=P1^3;
sbit LCD_RS=P1^4;
sbit LCD_RW=P1^5;
sbit LCD_E=P1^6;
sbit DHT11=P1^7;
HXD=1;
Delay(1000);
HXD=0;
Delay(1000);
HXD=1; // 只有湿度超标时,频率2报警
}
}
else if((RHH&&RHL)||(HT||LT))
{
for(i=0;i<5;i++)
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主机设为输入 判断从机响应信号
DHT11=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
bt_temp=bt;
}
}
}
void deal() //数据处理函数
{
m=tH; //温度整数位
d1=m/10; //温度十位
d2=m%10; //温度个位
n=hH; //湿度整数位
sbit HXD=P1^2;
//******************延时函数部分****************
void Delay(uint j) //(j/10)ms
{
uchar i;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}
HXD=1; //蜂鸣器不报警
if((RHH||RHL)&&(HT||LT))
{
for(i=0;i<5;i++)
{
HXD=0;
Delay(2000);
HXD=1;
Delay(2000);
HXD=0;
if(!DHT11) //T !
{
flag=2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while((!DHT11)&&flag++);
flag=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
{
flag=2;
while((!DHT11)&&flag++);
Delay_10us();
Delay_10us();
Delay_10us();
bt=0;
if(DHT11)bt=1;
flag=2;
while((DHT11)&&flag++);
if(m<= warning_THL[1])
LT=1 ;
else LT=0; //温度与最小值相比
s1[0] = (char)(0X30+d3);
s1[1] = (char)(0X30+d4); //湿度整数部分
s1[2] = (char)(0X30+d6); //湿度小数部分
void Delay_10us(void) //10us
{
uchar i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void delay_n40us(uint n)
{
uint i;
uchar j;
temp_H=value; //第三次出温度的整数值
COM();
temp_L=value; //第四次出温度的小数值
COM();
check=value; // 第五次出效验码
DHT11=1;
//数据校验
P0=Dig_Tab[7];Digce=1;Digce=0;for(j=0;j<500;j++);
}
//**************LCD液晶屏函数部分*************
else RHH=0; //湿度与最大值相比
if(n<= warning_RHHL[1])
RHL=1 ;
else RHL=0; //湿度与最小值相比
if(m>= warning_THL[0])
HT=1 ;
else HT=0; //温度与最大值相比
d3=n/10; //湿度十位
d4=n%10; //湿度个位
d5=tL/10; //温度小数位
d6=hL/10; //湿度小数位
if(n>= warning_RHHL[0])
RHH=1 ;
Delay(2000);
HXD=1; //温湿度都超标时,频率1报警
}
}
else if((RHH||RHL)||(HT&&LT))
{
for(i=0;i<5;i++)
{
HXD=0;
Delay(1000);
while((DHT11)&&flag++);
//数据接收状态
COM();
humi_H=value; //第一次出湿度的整数值
COM();
humi_L=value; //第二次出湿度的小数值
COM();
}
void display() //数码管显示函数
{
uint j=0;
P0=0XFF;Digce=1;Digce=0;
P0=Seg_Tab[10];Segce=1; Segce=0;
P0=Dig_Tab[4];Digce=1;Digce=0;for(j=0;j<500;j++);
相关文档
最新文档