《计算机控制技术设计报告数字温度计设计.doc》由会员分享,可在线阅读,更多相关《计算机控制技术设计报告数字温度计设计.doc(18页珍藏版)》请在三一办公上搜索。
1、Hefei University计算机控制技术设计报告设计题目: 数字温度计设计 专业班级: 08级自动化(2)班 姓 名: 学 号: 指导老师: 摘 要在这个信息化高速发展的时代,单片机作为一种最经典的微控制器,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,作为自动化专业的学生,我们学习了单片机,就应该把它熟练应用到生活之中来。本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。本文设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。关键词:单片机,数字控制,
2、数码管显示,温度计,DS18B20,AT89S52。目 录一、总体方案设计概述31.1系统总体方案设计31.2各功能模块31.2.1温度检测31.2.2数字信号的处理及温度显示3二、硬件系统设计42.1总体电路设计42.2主控制器 AT89C5242.3显示电路1286452.3.1基本特性52.3.2设计使用52.4 温度传感器62.4.1技术性能描述62.4.2接线说明72.5蜂鸣器报警电路7三、软件系统设计83.1程序流程图83.2软件代码93.2.1主文件部分93.2.2 DS18B20部分103.2.3 12864部分13四、总结16五、参考文献16附录17一、总体方案设计概述1.1
3、系统总体方案设计本设计以检测温度并显示温度提供上下限报警为目的,按照系统设计功能的要求,确定系统由4个模块组成:主控器、测温电路,报警电路,显示电路。系统以DS18B20为传感器用以将温度模拟量转化为电压数字量以总线传入单片机,以AT89S52为主芯片,在主芯片对DS18B20传入的温度值进行处理,由单片机程序控制,将经处理后的温度由12864液晶屏显示出来。本系统具有电路简洁,性能可靠等特点,易于实现。总体设计框图1.2各功能模块1.2.1温度检测每次测温由单片机向测温传感器发出特定脉冲,测温传感器能够检测到脉冲并做相应的工作。传感器将模拟温度信号经过采集,数字处理,放大后输出。DS18B2
4、0使用一个单线接口发送或接受信息,因此在单片机和DS18B20之间只需要一条线链接,用于读写和温度转换的电源可以从数据线获得,无需外接电源。1.2.2数字信号的处理及温度显示送入单片机内部的数字信号经过单片机的处理,将数据用12864液晶屏显示出来。其处理过程主要由单片机能存储的程序进行控制。1.2.3报警功能在单片机程序内设置了报警温度的上下限值,当所测得的温度超过了这一数值,将会由蜂鸣器发出报警。报警功能是本系统的重要功能之一,在工业应用中常常需要在特定的温度条件下进行报警,当温度超出范围时及时的报警是十分必要的。二、硬件系统设计2.1总体电路设计温度计电路设计原理图控制器使用单片机AT8
5、9S52,温度传感器使用DS18B20,用12864液晶屏以动态扫描法实现温度显示。电路还包括报警电路,单片机外设电路等。整个系统的原理图如下图所示:2.2主控制器 AT89C52AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。2.3显示电路1286412864是
6、一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示84行1616点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。2.3.1基本特性低电源电压(VDD:+3.0-+5.5V)显示分辨率:12864
7、点内置汉字字库,提供8192个1616点阵汉字(简繁体可选)内置 128个168点阵字符2MHZ时钟频率通讯方式:串行、并口可选内置DC-DC转换电路,无需外加负压无需片选信号,简化软件设计工作温度: 0 - +55 ,存储温度: -20 - +60 2.3.2设计使用本设计主要用的是12864的串行接法12864串行接法12864引脚说明2.4 温度传感器引脚图封装图2.4.1技术性能描述 1、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。2、测温范围 55+125,固有测温分辨率0.5。3、支持多点组网功能,多个DS18B20
8、可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。4、工作电源: 35V/DC 5、在使用中不需要任何外围元件6、测量结果以912位数字量方式串行传送DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;实际应用中不需要外部任何元器件即可实现测温;可通过数据线供电,电压范围为3.05.5V;在DS18B20中的每个器件上都有独一无二的序列号;温度以9或12位数字量读出;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能工作。2.4.2接线说
9、明 独特的一线接口,只需要一条口线通信,多点能力,简化了分布式温度传感应用,无需外部元件,可用数据总线供电。电压范围为3.0 V至5.5 V 无需备用电源,测量温度范围为-55 至+125摄氏度。范围内精度为0.5摄氏度,温度传感器可编程的分辨率为912位,温度转换为12位数字格式最大值为750毫秒。用户可定义的非易失性温度报警设置 应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统2.5蜂鸣器报警电路所测温度超出上、下限温度极限值时,为实现报警功能,并且相应的指示灯亮,设计了蜂鸣器报警电路。三、软件系统设计3.1程序流程图3.2软件代码3.2.1主文件部分#include
10、#include 12864.h#include DS18B20.Hsbit beep=P00;/蜂鸣器控制口sbit red_H=P02;/红灯控制口sbit green_L=P01;/绿灯控制口extern unsigned int wendu;unsigned int H=33,L=30;void main(void) unsigned int temp; unsigned char temp_h,temp_l; Delay(50000); Lcd_Init(); /12864初始化 Lcd_DisplayString(0,2,温度检测); Lcd_DisplayString(1,1,温
11、度:); while(1) temp=read_temp()*0.625;/读取温度if(tempH*10)/温度高于33摄氏度则报警 /上下限报警判断 beep=0; red_H=0; else if(tempL*10)/ 温度低于30摄氏度则报警 beep=0; green_L=0; else /否则取消声光报警 beep=1; green_L=1; red_H=1; Lcd_WriteCmd(0x90+0x04); / 把收到的温度信息显示在12864上 Lcd_WriteData(temp/1000+0x30); Lcd_WriteData(temp%1000/100+0x30); L
12、cd_WriteData(temp%100/10+0x30); Lcd_WriteData(.); Lcd_WriteData(temp%10+0x30); Lcd_WriteData(C); Delay(20000); 3.2.2 DS18B20部分#include DS18B20.h#include /_nop_();延时函数用sbit DQ=P10; /温度输入口uint temp;uint wendu;/*温度小数部分用查表法*/uchar code ditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,
13、0x08,0x08,0x09,0x09; uchar data temp_data2=0x00,0x00; /读出温度暂放uchar data display5=0x00,0x00,0x00,0x00,0x00; /显示单元数据,共4个数据和一个运算暂用/*11us延时函数*/void delay_18b20(uint t) while(t-) ;/*DS18B20复位函数*/ow_reset(void)char presence=1;while(presence) while(presence) DQ=1;_nop_();_nop_();/从高拉倒低DQ=0; delay_18b20(50)
14、; /550 usDQ=1; delay_18b20(6); /66 uspresence=DQ; /presence=0 复位成功,继续下一步 delay_18b20(45); /延时500 us presence=DQ; DQ=1; /拉高电平/*DS18B20写命令函数*/向1-WIRE 总线上写1个字节void write_byte(uchar val) uchar i; for(i=8;i0;i-) DQ=1;_nop_();_nop_(); /从高拉倒低 DQ=0;_nop_();_nop_();_nop_();_nop_(); /5 us DQ=val&0x01; /最低位移出
15、delay_18b20(6); /66 us val=val/2; /右移1位 DQ=1; delay(1);/*DS18B20读1字节函数*/从总线上取1个字节uchar read_byte(void)uchar i;uchar value=0;for(i=8;i0;i-) DQ=1;_nop_();_nop_(); value=1; DQ=0;_nop_();_nop_();_nop_();_nop_(); /4 us DQ=1;_nop_();_nop_();_nop_();_nop_(); /4 us if(DQ)value|=0x80; delay_18b20(6); /66 usD
16、Q=1;return(value);/*读出温度函数*/uint read_temp() ow_reset(); /总线复位 delay_18b20(200); write_byte(0xcc); /发命令 write_byte(0x44); /发转换命令 ow_reset(); delay_18b20(1); write_byte(0xcc); /发命令 write_byte(0xbe); temp_data0=read_byte(); /读温度值的低字节 temp_data1=read_byte(); /读温度值的高字节 temp=temp_data1; temp6348) / 温度值正负
17、判断 tem=65536-tem;n=1; / 负温度求补码,标志位置1 display4=tem&0x0f; / 取小数部分的值 display0=ditabdisplay4; / 存入小数部分显示值 display4=tem4; / 取中间八位,即整数部分的值 display3=display4/100; / 取百位数据暂存 display2=display4/10%10; / 取十位数据暂存 display1=display4%10; / 取个位数据暂存 wendu=display3*1000+display2*100+display1*10+display0;/*符号位显示判断*/ i
18、f(!display3) display3=0x0a; /最高位为0时不显示 if(!display2) display2=0x0a; /次高位为0时不显示 if(n) /负温度时最高位显示-display3=0x0b; 3.2.3 12864部分#include 12864.h/*/函数功能:延时函数/*/void Delay(unsigned int tt)while(tt-) ;/*/函数功能:写入命令/*/void Lcd_WriteCmd(unsigned charLData)unsignedchari;SCLK=0;SID=1;for(i=0;i5;i+)SCLK=1;SCLK=0
19、;SID=0;SCLK=1;SCLK=0;SID=0;SCLK=1;SCLK=0;SID=0;SCLK=1;SCLK=0;for(i=0;i4;i+)SID=(bit)(LData&(0x80);SCLK=1;SCLK=0;LData=LData1;SID=0;for(i=0;i4;i+)SCLK=1;SCLK=0;Delay(50);for(i=0;i4;i+)SID=(bit)(LData&(0x80);SCLK=1;SCLK=0;LData=LData1;SID=0;for(i=0;i4;i+)SCLK=1;SCLK=0;/*/函数功能:将数据写入液晶模块/入口参数:y(为字符常量)/*
20、/void Lcd_WriteData(unsigned char LData)unsignedchari;SCLK=0;SID=1;for(i=0;i5;i+)SCLK=1;SCLK=0;SID=0;SCLK=1;SCLK=0;SID=1;SCLK=1;SCLK=0;SID=0;SCLK=1;SCLK=0;for(i=0;i4;i+)SID=(bit)(LData&(0x80);SCLK=1;SCLK=0;LData=LData1;SID=0;for(i=0;i4;i+) SCLK=1;SCLK=0;Delay(50);for(i=0;i4;i+) SID=(bit)(LData&(0x80
21、);SCLK=1;SCLK=0;LData=LData1;SID=0;for(i=0;i4;i+) SCLK=1;SCLK=0;/*/函数功能:对LCD的显示模式进行初始化设置/*/voidLcd_Init(void)Lcd_WriteCmd(0x30);Lcd_WriteCmd(0x30);Lcd_WriteCmd(0x30);Lcd_WriteCmd(0x08);Lcd_WriteCmd(0x01);Lcd_WriteCmd(0x02);Lcd_WriteCmd(0x10);Lcd_WriteCmd(0x38);Lcd_WriteCmd(0x0c);/*/函数功能:写入一个字符串/*/vo
22、id Lcd_DisplayString(unsignedchar xx,unsigned char yy,unsigned char *string)unsigned char i;switch(xx)case 0:Lcd_WriteCmd(0x80);Lcd_WriteCmd(0x80+yy);break;case 1:Lcd_WriteCmd(0x90);Lcd_WriteCmd(0x90+yy);break;case 2:Lcd_WriteCmd(0x88);Lcd_WriteCmd(0x88+yy);break;case 3:Lcd_WriteCmd(0x98);Lcd_WriteC
23、md(0x98+yy);break;for(i=0;stringi!=0;i+)Lcd_WriteData(stringi);/*/函数功能:写入一个字符/*/void Lcd_DisplayOneChar(unsigned char xx,unsigned char yy,unsigned char string)switch(xx)case0:Lcd_WriteCmd(0x80);Lcd_WriteCmd(0x80+yy);break;case1:Lcd_WriteCmd(0x90);Lcd_WriteCmd(0x90+yy);break;case2:Lcd_WriteCmd(0x88);
24、Lcd_WriteCmd(0x88+yy);break;case3:Lcd_WriteCmd(0x98);Lcd_WriteCmd(0x98+yy);break;Lcd_WriteData(string);四、总结 经过将近两周的计算机控制系统的课程设计,终于完成了数字温度计的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把实物都做了出来。在指导老师和同学的帮助下,我确实学到了不少平时在课堂上所学不到的知识。这样的课程设计不论是对我们的理论知识还是实践能力都有很大的帮助,可以使我们能更快更准确的掌握专业方面的理论知识。我感觉这次设计我们得到更多的是,对办任何事情我们都要
25、先经过认真细致的观察和分析,才能确定我们到底该如何去做它,要不然,只会是事倍功半,耽误我们的办事效率。我觉得这个方面的经验是最宝贵的,也是我们在毕业后,进入社会所必须的能力。我们也只有具备了这个基本的能力后,才不至于在以后的生活,学习和工作中误入歧途,对自己和对他人造成不必要的损失。总之,通过这次设计,我真正学到了很多东西,真正体会到了理论联系实际的重要性。我想如果在平时多搞几次这样的设计,那我们的知识会掌握的更多,更牢固。最后,衷心感谢储忠老师的指导和同学的帮助! 五、参考文献1 MCS-51系统单片机原理及应用 2 18B20温度传感器资料及应用手册3 HD7279A键盘/显示接口芯片资料
26、及应用手册4 DS1302时钟芯片资料及应用手册附录 计算机控制技术课程设计任务书设计题目数字温度计的设计设计类型工程设计类导师姓名储忠胡晨曦主要目标使用数字温度传感器DS18B20把温度信号转换成数字信号输入单片机,经单片机处理后将温度值显示在4位共阳LED数码管(12864液晶屏)上,测温范围在0128摄氏度之间,精度误差1摄氏度。(12864显示的内容比较多,故用其替换LED。附加功能温度上下限越限报警)具 有的设计条件PC机一台,AT89C51最小系统板,4位共阳数码(12864液晶屏)管,温度传感器DS18B20等 计 划学生数及任务学生数:3人(1):明确课题对程序功能。(2):把
27、复杂问题分解为若干模块,确定各模块处理方法,画出流程图。(3):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序(4):对程序进行汇编,调试和修改,直到程序运行结果正确为止。提交设计报告书(应包括设计思想、硬件设计电路图、软件设计流程、设计心得,并附设计软件)计划设计进程(按课程设计周计算)第一周设计任务:(1):明确课题对程序功能,运算精度等方面的要求及硬件条件; (2):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。第二周设计任务:(3):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序(4):对程序进行汇编,调试和修改,直到程序运行结果正确为止。参考文献单片机原理 汇编语言程序设计 南京大学出版社 姚君遗编著汇编语言程序设计教程 清华大学出版社 杨记文编著计算机控制技术机械工业出版社 于海生著