计算机控制技术设计报告数字温度计设计_第1页
计算机控制技术设计报告数字温度计设计_第2页
计算机控制技术设计报告数字温度计设计_第3页
计算机控制技术设计报告数字温度计设计_第4页
计算机控制技术设计报告数字温度计设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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);四、总结 经过将近两周的计算机控制系统的课程设计,终于完成了数字温度计的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把实物都做了出来。在指导老师和同学的帮助下,我确实学到了不少平时在课堂上所学不到的知识。这样的课程设计不论是对我们的理论知识还是实践能力都有很大的帮助,可以使我们能更快更准确的掌握专业方面的理论知识。我感觉这次设计我们得到更多的是,对办任何事情我们都要先经过认真细致的观察和分析,才能确定我们到底该如何去做它,要不然,只会是事倍功半,耽误我们的办事效率。我觉得这个方面的经验是最宝贵的,也是我们在毕业后,进入社会所必须的能力。我们也只有具备了这个基本的能力后,才不至于在以后的生活,学习和工作中误入歧途,对自己和对他人造成不必要的损失。总之,通过这次设计,我真正学到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论