水温控制系统设计论文.docx
- 文档编号:3710746
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:17
- 大小:125.08KB
水温控制系统设计论文.docx
《水温控制系统设计论文.docx》由会员分享,可在线阅读,更多相关《水温控制系统设计论文.docx(17页珍藏版)》请在冰豆网上搜索。
水温控制系统设计论文
水温控制系统设计论文
学校:
系别:
专业:
指导教师:
姓名及学号:
2011年5月
目录
标题.....................................................................2
摘要.................................................................2
一、设计要求...........................................................2
二、设计方案及论证............................................................2
三、硬件设计及实现....................................................3
1、主控系统设计................................................................3
2、温度采集系统.............................................................4
四、系统软件设计...............................................................7
1系统软件流程图....................................................7
2系统软件...........................................................9
结束语................................................................10
参考文献...............................................................10
水温控制系统
摘要:
设计关键词:
AT89C52单片机数字温度传感器DS18B20八段数码管显示
独立键盘输入温度采集与转换
一、设计要求
1、温度设定范围为40~90℃,最小区分度为1℃,标定温度小于等于1℃。
2、环境温度降低时,(如用电风扇降温)温度控制的静态误差小于等于1℃。
3、用十进制数码管显示水的实际温度。
二、设计方案及论证
1、控制器模块:
采用AT89C52作为系统控制器。
2、温度采集模块:
采用数字温度传感器DS18B20,如图1所示。
图1DS18B20测温电路
3、显示模块:
采用三位LED七段数码管分别显示温度的十位、个位和小数位。
按键采用单列3按键进行温度设定。
系统框图如图2所示:
三、硬件设计与实现
系统硬件电路主要由AT89C52单片机开发板、DS18B20单线数字温度传感器组成。
1、主控系统设计
图3系统硬件模块关系图
2、温度采集部分设计
本系统采用半导体温度传感器作为敏感元件。
传感器我们采用了DS18B20单总线可编程温度传感器,来实现对温度的采集和转换,直接输出数字量,可以直接和单片机进行通讯,大大简化了电路的复杂度。
DS18B20应用广泛,性能可以满足题目的设计要求。
DS18B20的测温电路如图4所示。
图4DS18B20测温电路
(1)DSI8B20的测温功能的实现:
其测温电路的实现是依靠单片机软件的编程上。
当DSI8B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的0,1字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.0625℃/LSB形。
温式表示度值格式如表1所示,其中“S”为标志位,对应的温度计算:
当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。
DSI8B20完成温度转换后,就把测得的温度值与TH做比较,若T>TH或T (2)温度转换算法及分析 由于DS18B20转换后的代码并不是实际的温度值,所以要进行计算转换。 温度高字节(MSByte)高5位是用来保存温度的正负(标志为S的bit11~bit15),高字节(MSByte)低3位和低字节来保存温度值(bit0~bit10)。 其中低字节(LSByte)的低4位来保存温度的小数位(bit0~bit3)。 由于本程序采用的是0.0625的精度,小数部分的值,可以用后四位代表的实际数值乘以0.0625,得到真正的数值,数值可能带几个小数位,所以采取小数舍入,保留一位小数即可。 也就说,本系统的温度精确到了0.1度。 算法核心: 首先程序判断温度是否是零下,如果是,则DS18B20保存的是温度的补码值,需要对其低8位(LSByte)取反加一变成原码。 处理过后把DS18B20的温度Copy到单片机的RAM中,里面已经是温度值的Hex码了,然后转换Hex码到BCD码,分别把小数位,个位,十位的BCD码存入RAM中。 (3) 键盘、显示 系统键盘使用AT89C52单片机开发板上自带键盘进行键盘输入操作。 数字显示部分第一种方法是采用采用数码管,由于要求的测量精度为≤10C,所以本系统采用三位数码管进行显示。 数码管显示图如图5 图5 本系统通过键盘设定温度并可以进行复位,其电路图如图6 图6 四、系统软件设计 1、系统软件流程图 系统软件主要由温度采集、键盘扫描、数码管显示、报警子程序、中间接口程序组成。 其主程序流程图如图7,温度采集子程序流程图如图3.2,键盘扫描子程序流程图如图8。 Y N 蜂鸣器连续鸣响 图7主程序流程图 读取温度DS18B20模块的流程 图8温度采集子程序流程图 键盘扫描处理流程 图9键盘扫描子程序流程图 注: 显示温度 (1)未插DS18B20时,数码管显示设定值50. (2)插入DS18B20时,数码管显示当前温度XX.X 2、系统软件 系统软件的源程序: #include #include #defineucharunsignedchar #defineuintunsignedint sbitDS=P2^0;//定义DS18B20接口 sbitDAT_595_PIN=P1^2; sbitSCK_595_PIN=P1^0; sbitRCK_595_PIN=P1^1; sbitBUZZ=P3^3; inttemp,seding; ucharflag1,sebai=0,seshi=5,sege=0,sexiao=0; voiddisplay(unsignedchar*lp,unsignedcharlc);//数字的显示函数;lp为指向数组的地址,lc为显示的个数 voidWrite_595(uchar*lp); //voiddelay(void);//延时子函数,5个空指令 //voiddelay10ms(void); //voidreadrom(void); codeunsignedchartable[]={0xf5,0x05,0xb3,0x97,0x47,0xd6,0xf6,0x85,0xf7,0xd7, //0123456789 0xfd,0x0d,0xbb,0x9f,0x4f,0xde,0xfe,0x8d,0xff,0xdf,0x00}; //0.1.2.3.4.5.6.7.8.9.灭 //共阴数码管0-9-_空表 ucharcodebit_buf[8]={0xdf,0xbf,0x7f,0xef,0xfd,0xfb,0xf7,0xfe};//0xf7,0xef,0xdf,0xbf,0x7f}; unsignedcharl_tmpdate[8]={0,0,0,0,0,0,0,0};//定义数组变量,并赋值1,2,3,4,5,6,7,8,就是//本程序显示的八个数 inttmp(void); voidtmpchange(void); voidtmpwritebyte(uchardat); uchartmpread(void); bittmpreadbit(void); voiddsreset(void); voiddelayb(uintcount); voidScan_Key(void); voidDelayk(void); voidmain()//主函数 { intl_tmp; BUZZ=1; while (1) { Scan_Key();//设定温度上限 if(sebai==0)l_tmpdate[4]=20;elsel_tmpdate[4]=sebai; l_tmpdate[5]=seshi; l_tmpdate[6]=sege+10; l_tmpdate[7]=20; tmpchange();//温度转换 l_tmp=tmp(); if(l_tmp<0) l_tmpdate[0]=10;//判断温度为负温度,前面加"-" else { l_tmpdate[0]=temp/1000;//显示百位,这里用1000,是因为我们之前乖以10位了 if(l_tmpdate[0]==0) l_tmpdate[0]=20;//判断温度为正温度且没有上百,前面不显示 } l_tmp=temp%1000; l_tmpdate[1]=l_tmp/100;//获取十位 l_tmp=l_tmp%100; l_tmpdate[2]=l_tmp/10;//获取个位 l_tmpdate[2]+=10; l_tmpdate[3]=l_tmp%10;//获取小数第一位 seding=sebai*100+seshi*10+sege; if(temp>10*seding)//超过设定值报警 BUZZ=0; else BUZZ=1; display(l_tmpdate,5); } } voiddisplay(unsignedchar*lp,unsignedcharlc)//显示 { uchari; for(i=0;i { Write_595(lp); } } voidWrite_595(uchar*lp)//写数到595,数码管显示 { uchari,j; uintdat; for(i=0;i<8;i++) { RCK_595_PIN=0; dat=bit_buf[i]; dat=dat<<8; dat|=table[lp[i]]; for(j=0;j<16;j++) { SCK_595_PIN=0; if(dat&0x8000){ DAT_595_PIN=1; }else{ DAT_595_PIN=0; } dat=dat<<1; SCK_595_PIN=1; } RCK_595_PIN=1; } } /*voiddelay(void)//空5个指令 { _nop_();_nop_();_nop_();_nop_();_nop_(); }*/ voiddelayb(uintcount)//delay { uinti; while(count) { i=200; while(i>0) i--; count--; } } voiddsreset(void)//DS18B20初始化 { uinti; DS=0; i=103; while(i>0)i--; DS=1; i=4; while(i>0)i--; } bittmpreadbit(void)//读一位 { uinti; bitdat; DS=0;i++;//小延时一下 DS=1;i++;i++; dat=DS; i=8;while(i>0)i--; return(dat); } uchartmpread(void)//读一个字节 { uchari,j,dat; dat=0; for(i=1;i<=8;i++) { j=tmpreadbit(); dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好//一个字节在DAT里 } return(dat);//将一个字节数据返回 } voidtmpwritebyte(uchardat)//写一个字节到DS18B20里 { uinti; ucharj; bittestb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb)//写1部分 { DS=0; i++;i++; DS=1; i=8;while(i>0)i--; } else { DS=0;//写0部分 i=8;while(i>0)i--; DS=1; i++;i++; } } } voidtmpchange(void)//发送温度转换命令 { dsreset();//初始化DS18B20 delayb (1);//延时 tmpwritebyte(0xcc);//跳过序列号命令 tmpwritebyte(0x44);//发送温度转换命令 } inttmp()//获得温度 { floattt; uchara,b; dsreset(); delayb (1); tmpwritebyte(0xcc); tmpwritebyte(0xbe);//发送读取数据命令 a=tmpread();//连续读两个字节数据 b=tmpread(); temp=b; temp<<=8; temp=temp|a;//两字节合成一个整型变量。 tt=temp*0.0625;//得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回//数据的最低位代表的是0.0625度。 temp=tt*10+0.5;//放大十倍,这样做的目的将小数点后第一位 //也转换为可显示数字,同时进行一个四舍五入操作。 returntemp;//返回温度值 } voidScan_Key(void) { ucharkey_value; P2=0xff; if((P2&0x0f)! =0x0f) { Delayk(); if((P2&0x0f)! =0x0f) { key_value=(P2&0x0f); while((P2&0x0f)! =0x0f); switch(key_value) { case0x07: sebai=++sebai%10; break; case0x0b: seshi=++seshi%10; break; case0x0d: sege=++sege%10; break; case0x0e: sexiao=++sexiao%10; break; default: break; } } } } voidDelayk(void)//延时子程序 { unsignedcharm; for(m=200;m>0;m--); //for(n=200;n>0;n--); } 参考文献: [1]张毅刚,单片机原理及应用[M]。 高等教育出版社,2003 [2]王晓威,左谨平,唐叔进.基于液晶显示模块的图片处理技术[J].中国仪器仪表,2005,(07) [3]田军夏,路平.中文LCD与单片机的4种常用接口电路[J].仪表技术与传感器,2005,(03)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 水温 控制系统 设计 论文