课程设计(论文)单片机课程设计温度控制.doc

上传人:laozhun 文档编号:3993409 上传时间:2023-03-30 格式:DOC 页数:21 大小:581.50KB
返回 下载 相关 举报
课程设计(论文)单片机课程设计温度控制.doc_第1页
第1页 / 共21页
课程设计(论文)单片机课程设计温度控制.doc_第2页
第2页 / 共21页
课程设计(论文)单片机课程设计温度控制.doc_第3页
第3页 / 共21页
课程设计(论文)单片机课程设计温度控制.doc_第4页
第4页 / 共21页
课程设计(论文)单片机课程设计温度控制.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《课程设计(论文)单片机课程设计温度控制.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)单片机课程设计温度控制.doc(21页珍藏版)》请在三一办公上搜索。

1、浙江传媒学院课程设计(实训)报告 温度控制的日 期: 2011年 03月27日目 录1 概述.31.1 课程设计的目的. 31.2设计的要求.32 课程设计原理及内容.4 2.1 课程设计原理.4 2.2 课程设计内容.93 课程设计结果.104设计心得体会.105附1源程序代码.116附2参考文献.217评阅意见.21l 概述1.1 课程设计的目的1) 训练学生如何综合运用学过的卢纶和技能去分析结局事迹问题,加上理论的理解。2) 增强学生的实践能力和创新能力3) 使学生掌握微机系统以及常用接口电路的设计及调试方法。4) 掌握常用工具软件的使用方法5) 通过课程设计训练学生如何综合运用所学知识

2、去分析解决事迹问题。6) 培养学生严谨的工作作风和科学态度。2.1 课程设计的要求1) 设计一个温度控制系统2) 该温度控制系统可以将温度控制在一个温度范围之内3) 温度显示在数码管上,精确到小数4) 该范围可以通过系统中的键进行修改5) 温度一旦快到达上下限的温度时,蜂鸣器报警6) 蜂鸣器有简单的音乐l 课程设计原理及内容1.1 课程设计原理 A. 硬件部分本次课程设计的题目是温度控制系统,硬件部分本设计主要是对温度进行监测与控制,主要控制器件是单片机89S51。首先温度传感器DS1820对温度进行采样和转换,将测量结果送给单片机,单片机将输入的温度值与内部指定单元的给定温度值进行比较,根据

3、比较结果,通过执行温度传感器加热源的开断状态进行控制。温度显示与设定体现在3个八段共印数码管。下图为系统原理框图。 图1 图2 硬件设计图从各个部分分析看:I)、 图为晶振电路,采用12MHZ晶振 图3 晶振电路II)、 图为复位电路。 图4 复位电路III)、温度传感器DS1820信号线接P3.7口,con口接P3.5,这一部分主要完成对温度信号的采集和转换工作和加温工作。由于采用了该芯片,温度测量电路变得非常简单。DS1820像三极管一样,有一根底线,一根信号线和一根电源线,而信号线与IO口P3.7的相连,就能实现单片机对DS1820模式控制,温度值读取等操作。 图5IV)、 显示电路采用

4、4 位共阴极LED 数码管,采用动态扫描的方式显示,P1 口由上拉电阻提高驱动能力,作为段码输出并作为数码管的驱动。P0 口的高四位作为数码管的位选端。进而显示数字 图6V)、本系统采用四个按键来处理修改和显示上下限温度。S1和S2分别来加或减温度限值,当S3按下时,显示最高上限温度。再按一下显示下限温度。在S3被按下时,如果S1和S2被按下,则相应的加或减1,如果S4被按下,则加减的幅度变为3。 图7VI)、另外还有鸣器是由单片机89S51的P3.6口来驱动。通过高低电平的跳变,产生一个频率声音,从听觉上感觉就是一个蜂鸣声。可以通过改变跳变的频率来改变声音。B. 软件部分系统程序主要包括主程

5、序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,按键扫描处理子程序等I) 程序流程图 图8II) 读出温度子程序读出温度子程序的主要功能是读出RAM 中的9 字节,在读出时需进行CRC 校验,校验有错时不进行温度数据的改写。其程序流程图如图3.2 示 图9III) 计算温度子程序计算温度子程序将RAM 中读取值进行BCD 码转换运算,并进行温度值正负的判定。IV) 显示数据刷新子程序 显示数据刷新子程序主要是对分离后的温度显示数据进行刷新操作,当标志位位为1时将符号显示位移入第一位。 图 10V) 按键扫描子程序按键采用扫描查询方式,设置标志位,检测SET键是否被按

6、下,当标志位为1 时,显示设置温度,否则显示当前温度。同时设定一个变量a,a为设置温度的量度,当另外一个键SET1见在显示设置温度是被检测按下的时候,a赋值为3,否则a=1。从而完成对温度的设置。 图112.1 课程设计内容1) 准备工作。查相关资料,了解要做的内容,准备好硬件图,了解各项功能。2) 编辑程序,录入程序,保存为.C格式。3) 编译和修改程序,存盘。4) 根据硬件图连线。5) 运行程序,检查功能是否能够正常运行,分部分排查程序。6) 再通过老师的指点,加入其它的功能7) 编改程序,有必要还需查阅相关书籍。8) 编译,改错,运行。9) 经过反复的修改运行和调试,做出最后结果的单片机

7、系统。l 课程设计结果经过一个星期的调试,能够正常的运行基本功能,可以通过温度感应器感应到外界的温度,显示当前温度,显示精确到小数。并通过判断是否在某个温度区间,若低于下限温度,则开始加热,若高于上限温度,则停止加热。并且在快到达上限温度时,蜂鸣器开始发出警告声,约等于20S,并发出3个连续不同的声音,当温度在下限的附近是,蜂鸣器做出同样的反应。而且本系统有四个按键,S1、S2、S3、S4,分别是加,减,选择,修改精度,的功能。当S3按1下时,显示上限温度,按2下是,显示下限温度。在此期间若S4被按下,则加减的精度从原来的1改为3。l 设计心得体会从周一开始回来查资料,到周五验收成功。中间虽然

8、没有很长的时间,但是感觉受益匪浅。学的最最多的东西当然是对单片机这个系统的了解,所以说坐而言不如立而行,对于这样的系统还是亲自实践过才能够更加深刻的了解。 课程设计是能培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。回顾起此次单片机课程设计,我仍感慨颇多,的确,从接题到定稿,从理论到实践,在一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不

9、仅可以巩固了以前所学过知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说对于C语言的一些语句不是很了解,对单片机的知识也不是很透彻通过这次课程设计之后,一定把以前所学过的知识重新温故。最后感谢黄老师对我们的指导和认真

10、负责,这次课程设计终于顺利完成了,虽然最后那个精度没有改成功,但是我们还是很认真的对待这一次实践。相信在以后运用单片机知识的地方这次的实践肯定会有所帮助。总之,我们学到了在课堂上学不到的东西,学会了团队合作,学到了更多关于单片机和单片机实践的知识。我们很感激。l 附录:程序清单#include reg51.h#include intrins.h /_nop_();延时函数用#define dm P1/段码输出口#define uchar unsigned char#define uint unsigned intsbit DQ=P37; /温度输入口sbit w0=P00; /数码管 4sbi

11、t w1=P01; /数码管 3sbit w2=P02;/数码管 2sbit w3=P03;/数码管 1sbit w4=P04;sbit w5=P05;sbit beep=P36; /蜂鸣器和指示灯sbit con=P35; /温度设置切换键sbit set1=P20;sbit set=P21;sbit add=P22;/温度加sbit dec=P23; /温度减uint temp1=0; /显示当前温度和设置温度的标志位为 0 时显示当前温度 uint h;uint temp;uchar r;uchar high=30.0,low=23.0 ;uchar sign;uchar q=0;uch

12、ar tt=0;uchar scale;uint a; uint b;/*温度小数部分用查表法*/uchar code ditab10=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09;/小数断码表uchar code table_dm12=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40; /共阴 LED 段码表/*01 2 3 4 5 6 7 8 9 不亮 - */ uchar table_dm1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x

13、87,0xff,0xef;/个位带小数点的断码表uchar data temp_data2=0x00,0x00; /读出温度暂放uchar data display5=0x00,0x00,0x00,0x00,0x00; /显示单元数据,共 4 个数据和一个运算暂用 /*11us 延时函数*/ void delay(uint t)while(t-);void scan()int j;for(j=0;j0;i-) DQ=1;_nop_();_nop_(); /从高拉倒低DQ=0;_nop_();_nop_();_nop_();_nop_();/5 usDQ=val&0x01;/最低位移出delay

14、(2) ; /66 usval=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 usDQ=1;_nop_();_nop_();_nop_();_nop_();/4 usif(DQ)value|=0x80;delay(2);/66 usDQ=1;return(value);/*

15、读出温度函数*/read_temp() ow_reset();/总线复位delay(200);write_byte(0xcc);/发命令write_byte(0x44);/发转换命令ow_reset();delay(1);write_byte(0xcc); /发命令 write_byte(0xbe);temp_data0=read_byte();/读温度值的低字节temp_data1=read_byte();/读温度值的高字节temp=temp_data1; temp6348) / 温度值正负判断tem=65536-tem;n=1; / 负温度求补码,标志位置 1display4=tem&0x

16、0f; / 取小数部分的值display0=ditabdisplay4; / 存入小数部分显示值display4=tem4; / 取中间八位,即整数部分的值display3=display4/100; / 取百位数据暂存display1=display4%100;/ 取后两位数据暂存 display2=display1/10; / 取十位数据暂存display1=display1%10; /个位数据 r=display1+display2*10+display3*100;/符号位显示判断/if(!display3) display3=0x0a; /最高位为 0 时不显示if(!display2

17、)display2=0x0a;/次高位为 0 时不显示if(n)display3=0x0b;/负温度时最高位显示- void buz() int y; for(y=1;yhigh-1&r129)con=0;if(r128)horl=256-horl;n=1; display3=horl/100;display3=display3&0x0f;display2=horl%100/10;display1=horl%10;display0=0;if(!display3) display3=0x0a; /最高位为 0 时不显示if(!display2)display2=0x0a; /次高位为 0 时不显

18、示 if(n)display3=0x0b; /负温度时最高位显示-/*按键查询程序*/void keyscan() int temp1;/最高温度和最低温度标志位 if(set=0) int a=1;while(1)delay(500);/消抖if(set=0)temp1+; while(!set)scan();if(temp1=1)xianshi(high);if(set1=0)while(!set1);scan();a=3;scan();if(add=0)while(!add)scan();high+=a;if(dec=0)while(!dec)scan();high-=a;if(temp

19、1=2)xianshi(low);if(add=0)while(!add)scan();low+=a;if(dec=0)while(!dec)scan();low-=a;scan();if(temp1=3)temp1=0;break; /*主函数*/void main()dm=0x00;w0=0;w1=0;w2=0;w3=0;w4=0;w5=0; for(h=0;h4;h+)displayh=0;ow_reset();write_byte(0xcc);write_byte(0x44);for(h=0;h100;h+)scan(); while(1)if (temp1=0) /初始化端口/开机显示0000/开机先转换一次/Skip ROM/发转换命令/开机显示0000work_temp(read_temp();/处理温度数据BEEP();scan(); /显示温度值 keyscan();elsekeyscan();/*结束*/l 附录:参考文献1) 雷思孝.单片机系统设计及工程应用M.西安电子科技大学出版社,2007.2) 马忠梅,张凯,等. 单片机的C 语言应用程序设计(第四版) 北京航空航天大学出版社3) 廖常初.现场总线概述J.电工技术,1999.评阅意见 教师签名: 年 月 日

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号