32基于单片机和DS18B20的空调温控系统设计(硬件)
收藏
资源目录
压缩包内文档预览:
编号:6161935
类型:共享资源
大小:525.07KB
格式:RAR
上传时间:2017-12-01
上传人:加Q294****549海量...
认证信息
个人认证
乐**(实名认证)
湖南
IP属地:湖南
39
积分
- 关 键 词:
-
32
基于
单片机
以及
ds18b20
空调
温控
系统
设计
硬件
- 资源描述:
-
32基于单片机和DS18B20的空调温控系统设计(硬件),32,基于,单片机,以及,ds18b20,空调,温控,系统,设计,硬件
- 内容简介:
-
附录一 程序表/*/*卢涛的毕业设计 */*基于单片机和DS1820的空调温控系统设计程序*/ /*目标器件:AT89S51 */*晶振:11.0592MHZ */*编译环境:Keil 7.50A */*/*包含头文件*/#include #define uchar unsigned char#define uint unsigned int /*端口定义*/sbit DQ=P33; /数据传输线接单片机的相应的引脚sbit lcdrw = P21;sbit lcdep = P22;sbit right = P26;sbit lcdrs=P23;sbit lt=P15;sbit ut=P16;sbit sz=P17;/*定义全局变量*/uchar tempL=0; /临时变量低位uchar tempH=0; /临时变量高位float temperature; /温度值uchar code table=*TEMP*;uchar code table1= 00 C;uchar code table2=*SET TEMP*;int th,tl,num,a,set,k,sth,stl,ssth,sstl;int stemp,I,Pmax, Pmin;float deltaPn,delta,Pi,PsumCopy,PID1,PID2;float Kp,Kd,E_12,E_22,E_0,Emax;/*函数功能:延时子程序入口参数:k出口参数:*/void delay(unsigned int k) unsigned int n; n=0; while(n 480ms) DQ=1; /拉高数据线 delay(14); /等待(1560ms) /*函数功能:向DS18B20读一字节数据入口参数:出口参数:dat*/ReadOneChar(void) unsigned char i=0; unsigned char dat=0; for (i=8;i0;i-) DQ=1; delay(1); DQ=0; dat=1; DQ=1; if(DQ) dat|=0x80; delay(4); return(dat);/*函数功能:向DS18B20写一字节数据入口参数:dat出口参数:*/WriteOneChar(unsigned char dat) unsigned char i=0; for(i=8;i0;i-) DQ=0; DQ=dat&0x01;delay(5);DQ=1;dat=1;delay(4);/*函数功能:向DS18B20读温度值入口参数:出口参数:temperature*/ReadTemperature(void) Init_DS18B20(); /初始化WriteOneChar(0xcc); /跳过读序列号的操作WriteOneChar(0x44); /启动温度转换delay(125); /转换需要一点时间,延时Init_DS18B20(); /初始化WriteOneChar(0xcc); /跳过读序列号的操作WriteOneChar(0xbe); /读温度寄存器(头两个值分别为温度的低位和高位)tempL=ReadOneChar(); /读出温度的低位LSBtempH=ReadOneChar(); /读出温度的高位MSB /温度转换,把高低位做相应的运算转化为实际温度temperature=(tempH*256)+tempL)*0.0625; delay(200);return(temperature);/*函数功能:独立按键扫描子程序入口参数:出口参数:*/void scan()sz=1;yw=1; if(sz=0) if(sz=1)/如果按了设置或确定键set=set;/跳出循环 /*函数功能:1602液晶显示设置温度子程序入口参数:出口参数:*/void displaystep(int k)write_com(0x0f); /光标闪烁write_com(0xc6+a);write_data(0x30+k);/*函数功能:液晶显示控制子程序入口参数:出口参数:*/void tr()if(a=0)th=k;displaystep(k);a+;if(a=1)tl=k;displaystep(k);a-;/*函数功能:矩阵键盘扫描子程序入口参数:出口参数:*/void keyscan(void)unsigned char n;/扫描第一行P1=0xfe;n=P1;n&=0xf0;if(n!=0xf0) delay(); P1=0xfe; n=P1; n&=0xf0; if(n!=0xf0) switch(n) case(0xe0):k=3;tr();break; case(0xd0):k=2;tr();break; case(0xb0):k=1;tr();break; case(0x70):k=0;tr();break; /扫描第二行P1=0xfd;n=P1;n&=0xf0;if(n!=0xf0) delay(); P1=0xfd; n=P1; n&=0xf0; if(n!=0xf0) switch(n)case(0xe0):k=7;tr();break; case(0xd0):k=6;tr();break; case(0xb0):k=5;tr();break; case(0x70):k=4;tr();break; /扫描第三行P1=0xfb;n=P1;n&=0xf0;if(n!=0xf0) delay(); P1=0xfb; n=P1; n&=0xf0; if(n!=0xf0) switch(n) case(0xe0):k+;tr();break; case(0xd0):k-;tr();break; case(0xb0):k=9;tr();break; case(0x70):k=8;tr();break; if (sz=0)If(sz=1)set=!set;/如果按下了设置键,退出温度设置子程序/*函数功能:设置温度子程序入口参数:出口参数:*/void setemp()set=1;a=0;P1=0xff;write_com(0x80); /在第一行写标题for(num=0;num30)stemp=30;if(stemp16)stemp=16;sth=stemp%100/10;stl=stemp%10;/*函数功能:独立按键扫描子程序入口参数:出口参数:*/void keyscan1(void)unsigned char n;P0=0xff;if (sz=0)If(sz=1)set=1;if (lt=0)if(lt=1)stemp-;if (ut=0)if(ut=1)stemp+;/*函数功能:1602液晶显示实际温度子程序入口参数:出口参数:*/void displaytemp(int w) init();write_com(0x80);/在第一行写标题for(num=0;numEmax) deltaPp=(float)Kp*(E_0-E_11); deltaPd=(float)Kd*(E_0-2*E_11+E_21);if(deltaPd=dPdmax) deltaPd=0; deltaPn=deltaPp+deltaPd; else if(abs(E_0)E0) deltaPi=(float)Ki*E_0*(Emax-abs(E_0)/(Emax-E0); else /小误差时的处理 deltaPi=(float)Ki*E_0; if(fabs(deltaPi)=dPdmax) deltaPd=0; deltaPn=deltaPp+deltaPi+deltaPd; if(fabs(deltaPn)dPmax) if(deltaPn0) deltaPn=dPmax; else deltaPn=-dPmax; Psum1+=deltaPn; PsumCopy=Psum1; if(PsumCopyPmax) PsumCopy=Pmax;if(PsumCopyEmax) deltaPn=(float)Kp*(E_0-E_12)+(float)Kd*(E_0-2*E_12+E_22); else if(abs(E_0)E0) deltaPi=(float)Ki*E_0*(Emax-abs(E_0)/(Emax-E0); else /小误差时的处理 deltaPi=(float)Ki*E_0; deltaPn=(float)Kp*(E_0-E_12)+deltaPi+(float)Kd*(E_0-2*E_12+E_22); if(fabs(deltaPn)dPmax) if(deltaPn0) deltaPn=dPmax;else deltaPn=-dPmax; Psum2+=deltaPn;PsumCopy=Psum2; if(PsumCopyPmax) PsumCopy=Pmax; if(PsumCopyPmin) PsumCopy=Pmin; E_22=E_12; E_12=E_0; return(PsumCopy);/*函数功能:PID控制子程序入口参数:出口参数:*/void pidcontrol()PID1=PIDprocess1();PID2=PIDprocess2();/根据具体的控制电路设
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。