1、水温控制系统设计论文水温控制系统设计论文学校:系别:专业:指导教师:姓名及学号: 2011年5月目 录标题.2摘要.2一、设计要求.2二、设计方案及论证. .2三、硬件设计及实现.31、主控系统设计. . . . . . . 32、温度采集系统. .4四、系统软件设计. . . . . . . . . . . . . . . . . . . . .71 系统软件流程图.72 系统软件.9结束语. .10参考文献. .10水温控制系统 摘要:设计关键词:AT89C52单片机 数字温度传感器DS18B20 八段数码管显示 独立键盘输入 温度采集与转换一、设计要求1、温度设定范围为4090,最小区分
2、度为1,标定温度小于等于1。2、环境温度降低时,(如用电风扇降温)温度控制的静态误差小于等于1。3、用十进制数码管显示水的实际温度。二、设计方案及论证1、控制器模块:采用AT89C52作为系统控制器。2、温度采集模块:采用数字温度传感器DS18B20,如图1 所示 。图1 DS18B20测温电路3、显示模块:采用三位LED七段数码管分别显示温度的十位、个位和小数位。按键采用单列3按键进行温度设定。系统框图如图2所示:三、硬件设计与实现系统硬件电路主要由AT89C52单片机开发板、DS18B20单线数字温度传感器组成。1、主控系统设计图3 系统硬件模块关系图2、温度采集部分设计本系统采用半导体温
3、度传感器作为敏感元件。传感器我们采用了DS18B20单总线可编程温度传感器,来实现对温度的采集和转换,直接输出数字量,可以直接和单片机进行通讯,大大简化了电路的复杂度。DS18B20应用广泛,性能可以满足题目的设计要求。DS18B20的测温电路如图4所示。图4 DS18B20测温电路(1)DSI8B20的测温功能的实现:其测温电路的实现是依靠单片机软件的编程上。当DSI8B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的0,1字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0062 5LSB形。温式表
4、示度值格式如表1所示,其中“S”为标志位,对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。DSI8B20完成温度转换后,就把测得的温度值与 TH做比较,若TTH或TTL,则将该器件内的告警标志置位,并对主机发出的告警搜索命令做出响应。 (2)温度转换算法及分析由于DS18B20转换后的代码并不是实际的温度值,所以要进行计算转换。温度高字节(MS Byte)高5位是用来保存温度的正负(标志为S的bit11bit15),高字节(MS Byte)低3位和低字节来保存温度值(bit0 bit10)。其中低字节(LS Byte)的低4位来保存
5、温度的小数位(bit0 bit 3)。由于本程序采用的是0.0625的精度,小数部分的值,可以用后四位代表的实际数值乘以0.0625,得到真正的数值,数值可能带几个小数位,所以采取小数舍入,保留一位小数即可。也就说,本系统的温度精确到了0.1度。算法核心:首先程序判断温度是否是零下,如果是,则DS18B20保存的是温度的补码值,需要对其低8位(LS Byte)取反加一变成原码。处理过后把DS18B20的温度Copy到单片机的RAM中,里面已经是温度值的Hex码了,然后转换Hex码到BCD码,分别把小数位,个位,十位的BCD码存入RAM中。(3)键盘、显示系统键盘使用AT89C52单片机开发板上
6、自带键盘进行键盘输入操作。数字显示部分第一种方法是采用采用数码管,由于要求的测量精度为10C,所以本系统采用三位数码管进行显示。 数码管显示图如图5图5本系统通过键盘设定温度并可以进行复位,其电路图如图6 图6四、 系统软件设计1、 系统软件流程图系统软件主要由温度采集、键盘扫描、数码管显示、报警子程序、中间接口程序组成。其主程序流程图如图7,温度采集子程序流程图如图3.2,键盘扫描子程序流程图如图8。Y N蜂鸣器连续鸣响图7 主程序流程图读取温度DS18B20模块的流程图8 温度采集子程序流程图键盘扫描处理流程图9 键盘扫描子程序流程图注:显示温度(1) 未插DS18B20时,数码管显示设定
7、值50.(2) 插入DS18B20时,数码管显示当前温度XX.X2、系统软件系统软件的源程序:#include #include #define uchar unsigned char#define uint unsigned intsbit DS=P20; /定义DS18B20接口sbit DAT_595_PIN = P12;sbit SCK_595_PIN = P10;sbit RCK_595_PIN = P11;sbit BUZZ=P33;int temp,seding; uchar flag1,sebai=0,seshi=5,sege=0,sexiao=0; void display(
8、unsigned char *lp,unsigned char lc);/数字的显示函数;lp为指向数组的地址,lc为显示的个数void Write_595(uchar *lp);/void delay(void);/延时子函数,5个空指令/void delay10ms(void);/void readrom(void);code unsigned char table=0xf5,0x05,0xb3,0x97,0x47,0xd6,0xf6,0x85,0xf7,0xd7, /0 1 2 3 4 5 6 7 8 9 0xfd,0x0d,0xbb,0x9f,0x4f,0xde,0xfe,0x8d,0
9、xff,0xdf,0x00; /0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 灭 /共阴数码管 0-9 - _ 空 表uchar code bit_buf8 = 0xdf,0xbf,0x7f,0xef,0xfd,0xfb,0xf7,0xfe;/0xf7,0xef,0xdf,0xbf,0x7f;unsigned char l_tmpdate8=0,0,0,0,0,0,0,0;/定义数组变量,并赋值1,2,3,4,5,6,7,8,就是/本程序显示的八个数int tmp(void);void tmpchange(void);void tmpwritebyte(uchar dat);uc
10、har tmpread(void);bit tmpreadbit(void);void dsreset(void);void delayb(uint count); void Scan_Key(void);void Delayk(void);void main() /主函数 int l_tmp; BUZZ=1; while(1) Scan_Key(); /设定温度上限 if(sebai=0)l_tmpdate4=20;else l_tmpdate4=sebai; l_tmpdate5=seshi; l_tmpdate6=sege+10; l_tmpdate7=20; tmpchange();
11、/温度转换 l_tmp=tmp(); if(l_tmp10*seding) /超过设定值报警 BUZZ=0; else BUZZ=1;display(l_tmpdate,5); void display(unsigned char *lp,unsigned char lc)/显示 uchar i; for(i=0;ilc;i+) Write_595(lp); void Write_595(uchar *lp) /写数到595,数码管显示 uchar i,j; uint dat; for(i=0;i8;i+) RCK_595_PIN=0; dat =bit_bufi; dat =dat8; da
12、t |= tablelpi; for(j=0;j16;j+) SCK_595_PIN = 0; if(dat & 0x8000) DAT_595_PIN = 1; else DAT_595_PIN = 0; dat=dat0) i-; count-; void dsreset(void) /DS18B20初始化 uint i; DS=0; i=103; while(i0)i-; DS=1; i=4; while(i0)i-;bit tmpreadbit(void) / 读一位 uint i; bit dat; DS=0;i+; /小延时一下 DS=1;i+;i+; dat=DS; i=8;wh
13、ile(i0)i-; return (dat);uchar tmpread(void) /读一个字节 uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=tmpreadbit(); dat=(j1); /读出的数据最低位在最前面,这样刚好/一个字节在DAT里 return(dat); /将一个字节数据返回void tmpwritebyte(uchar dat) /写一个字节到DS18B20里 uint i; uchar j; bit testb; for(j=1;j1; if(testb) / 写1部分 DS=0; i+;i+; DS=1; i=8;while(i0
14、)i-; else DS=0; /写0部分 i=8;while(i0)i-; DS=1; i+;i+; void tmpchange(void) /发送温度转换命令 dsreset(); /初始化DS18B20 delayb(1); /延时 tmpwritebyte(0xcc); / 跳过序列号命令 tmpwritebyte(0x44); /发送温度转换命令int tmp() /获得温度 float tt; uchar a,b; dsreset(); delayb(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); /发送读取数据命令 a=tmpread(); /连续读两个字节数据 b=tmpread(); temp=b; temp0;m-); /for(n=200;n0;n-);参考文献:1 张毅刚,单片机原理及应用M。高等教育出版社,2003 2 王晓威, 左谨平, 唐叔进. 基于液晶显示模块的图片处理技术J. 中国仪器仪表,2005,(07) 3 田军夏, 路平. 中文LCD与单片机的4种常用接口电路J. 仪表技术与传感器 , 2005,(03)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1