基于51单片机温度控制电路的设计与制作毕业设计论文(编辑修改稿)内容摘要:

地址。 为操作各器件作好准备。 跳过 ROM OCCH 忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。 适用与单片工作。 告警搜索命令OECH 执行后只有温度超过设定值上限或下限的片子才做出响应。 正 文11指令 约定代码 功能温度变换 44H 启动 DS1820 进行温度转换 12 位转换时最厂为750ms(9 位为 )。 结果存入内部 9 字节 RAM 中。 读暂存器 OBEH 读内部 RAM 中 9 字节的内容。 写暂存器 4EH 发出向内部 RAM 的 4 字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。 复制暂存器 48H 将 RAM 中第 4 字节的内容复制到 EEPROM 中重调 EEPROM OB8H 将 EEPROM 中内容恢复到 RAM 中的第 4 字节。 读供电方式 OB4H 读 DS1820 的供电模式。 寄生东佃时 DS1820 发送“0” ,外界电源供电 DS1820 发送“1”。 下图 12 是 DS18B20 的初始化和读写时序:正 文12图 12 DS18B20 读写时序 液晶驱动程序: LCD 使用之前须对它进行初始初始化可通过复位完成,也可在复位后完成,初始化过程如下:(1)清屏。 将显示缓冲区 DDRAM 的内容全部写入空格(ASCII20H)。 (2)功能设置。 (3)开/关显示设置。 控制显示的开关,当 D=1 时显示,D=0 时不显示。 控制光标开关,当 C=1 时光标显示,C=0 时光标不显示。 控制字符是否闪烁,当 B=0时字符闪烁,B=0 时字符不闪烁。 (4)输入方式设置。 初始化过程:(1)延时 15ms;(2)写指令 38H(不检测忙信号) ;(3)延时 5 ms;(4)写指令 38H(不检测忙信号) ;(5)延时 5ms;(6)写指令38H(不检测忙信号) ;(7)以后每次写指令、读/写数据操作之前均需检测忙信号;(8)写指令 38H:显示模式设置;(9)写指令 08H:显示关闭;(10)写指令 01H:显示清屏;(11)写指令 06H:显示光标移动设置;(12)写指令0CH:显示开及光标设置。 Comment [园园园园7]: 为什么要二次清除 LCD显示。 正 文13本系统中液晶显示器的初始化程序流程如图 13所示:开始清除 LCD显示内容模拟设置移动光标显示开关光标初始化完成图 13 LCD初始化程序流程图5 系统调试与测试 硬件调试在本温度控制电路的设计调试中遇到了很多的问题。 回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:(1) 开始调试时发现时钟芯片 DS1302发热很厉害,后来发现电路没有给它加上拉电阻,加上上拉电阻后问题就解决了。 Comment [园园园园8]: 不使用电容会有什么后果。 Comment [园园园园9]: 正 文14(2) 双向可控硅 BTA12600B高压部分电路,加 104电容时,发生击穿现象,导致光耦控制部分电路瘫痪,原因是耐压值不够。 解决的方法有两种,第一种是更换耐压值更高的电容;由于该电容的作用是吸收可控硅元件的残余电量,使得可控硅能够正常导通截止,而根据使用的负载(交流电机) ,去掉该电容后,该电路能够正常的工作,所以第二种是在电路可以运行的状况下去掉该 104电容相连的电路。 我采取的是第二种方法。 软件调试在软件调试时也出现了一些问题,其中主要的问题有以下两个方面:(1) 程序读取温度值时,出现的现象,造成风扇温度在判断时出现错误,使风扇经常性突快突慢变化,蜂鸣器也不断的蜂鸣报警。 解决的方法是在读取温度判断时加延时,并且多次判断,防止跳变。 (2) 调节系统参数时,液晶光标太快以致调节的时候观察困难,原因是刷新液晶太快。 解决的方法是在相应数据更该时,才开始刷新液晶内容。 6 设计总结在整个设计过程中,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。 较好的完成了作品,达到了预期的目的,完了最初的设想。 但是在做板时由于之前考虑的不够周全,时钟芯片没有加到上拉电阻,由于是做好了板把元件焊上去才发现的,只能在板的后面把 3个上拉电阻焊上去,所以导致了整块板的看起来不是很美观。 通过这一次的经验我意识到了对电路的设计、布局要先有一个好的构思,而且要认真仔细的检查各个功能模块的具体情况,确保不遗留什么元件,才做出美观、大方的电路板。 程序编写中,先研究各个功能模块的程序,包括时钟模块的程序,温度模块的程序,不懂的就通过查资料或者请教老师和同学来解决,然后再整理好这些程序,最终完成了能实现整个设计要求的程序。 在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,也练就了我们的耐心和细心,做什么事都要认真仔细,因为细节决定成败。 总之,这次设计使我的能力得到了全方位的提高。 Comment [园园园园10]: 行距不对致 谢15致 谢这次的设计和论文是在各位老师的悉心指导下完成的。 你们严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。 从课题的选择到项目的最终完成,你们都始终给予我细心的指导和不懈的支持。 在此谨向老师们致以诚挚的谢意和崇高的敬意。 在此,我还要感谢在一起愉快的度过大学四年的 07级电子本科班的同学们,你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。 最后,衷心感谢在百忙之中抽出宝贵时间对此论文进行评阅与审议的老师们。 感谢学院给我提供了一个展现自己的舞台,给我一次难得煅炼的机会,使得我的动手能力和专业技能都有了很大的提高。 参考文献16参考文献[1]沙占友 王彦明 孟志永. 单片机外围电路设计[M]. 北京: 电子工业出版社,20xx ,1[2]李建忠 . 单片机原理及应用( 第二版) [M]. 西安: 西安电子科技大学出版社,20xx,2[3]谭浩强 .C 程序设计( 第三版 ) [M]. (清华大学出版社)[4]求是科技 . 单片机典型模块设计实例导航[M]. 北京: 人民邮电出版社,20xx[5]华成英 童诗白 .模拟电子技术基础 (第四版) [M]. (高等教育出版社)[6]缪家鼎 徐文娟 牟同升. 光电技术[M]. 浙江大学出版社,[7]吴大正 .电路基础(第二版) (西安电子科技大学出版社)[8]袁小平 .电子技术综合设计教程(第一版) (机械工业出版社)[9]康华光, 邹寿彬,电子技术基础数字部分( 第四版) 北京:高等教育出版社 1999[10]杜肤生, 数字集成电路应用精粹 ,北京:人民邮电出版社 20xx[11]陈大钦,电子技术基础实验(第二版),北京:高等教育出版社 20xx[12]全国大学生电子设计竞赛组委会,第五界全国大学生电子设计竞赛获奖作品选编.20xx.北京理工大学出版社, 20xx[13]中国计量出版社组编,新编电子电路大全, 北京:中国计量出版社, [14]葛汝明, 《 电子技术实验与课程设计 》,山东: 山东大学出版社 20xx [15]周永金, 《 模拟电子技术及应用 》,西安:陕西国防学院电子教研室 20xx[16]吴玮玮, PROTEL 99 简明应用教程 ,西安:陕西国防学院电子教研室 20xx[17]任元,吴勇, 《 常用电子元器件简明手册 》,北京:工业出版社 20xx [18]程路,郑毅,向先波,PROTEL 99SE 电路板设计与制作, 人民邮电出版社  20xx参考文献17附 录18附录附录 A:电路图附录 B:程序清单includeincludeincludedefine uchar unsigned chardefine uint unsigned intdefine LCD_dat P0 //定义 lcd 数据口sbit lcd_E=P2^7。 //定义 lcd 控制口sbit lcd_RW=P2^6。 //定义 lcd 控制口sbit lcd_RS=P2^5。 //定义 lcd 控制口sbit DS18B20_DQ =P1^5。 //定义 DS18B20 通信端口sbit LED1=P1^2。 sbit LED2=P1^3。 sbit speaker=P1^1。 //蜂鸣器接口sbit fan=P2^1。 //风扇 pwm 输出控制口bit fan_flag=0。 sbit key_model=P3^1。 //模式键sbit key_set=P3^2。 //设置键sbit key_add=P3^5。 //加键附 录19sbit key_sub=P3^4。 //减键sbit key_left=P3^0。 //左移键sbit key_right=P3^3。 //右移键sbit E_sw=P1^0。 //继电器控制uchar sw_flag=0。 //继电器自动手动切换标志uchar switch_flag=0。 //继电器液晶设置切换标志int sw_open_temperature=100。 //继电器开启的温度值设置 uchar restrict_hour=0。 //设定时间风扇不能转uint temp=0。 //温度缓存uint fan_count=0。 //风扇计数bit fan_AUTO=0。 //自动风扇自动或手动控制标志uchar model_flag=0。 //总的模式标志uchar code num_to_char[] = {0123456789ABCDEF}。 /*定义数字跟 ASCII 码的关系*/uchar data lcd1602_line1[]= { 20xx/00/00 TUE }。 //时间显示缓存数组uchar data lcd1602_line2[]= {00:00:00 }。 //时间显示缓存数组uchar data lcd1602_line3[]= {00:00:00set time}。 //时间设置缓存数组uchar idata temp_record_line1[]={Temperature note}。 //温度记录显示缓存数组uchar idata temp_record_line2[]={time 00 T: }。 //温度记录显示缓存数组uchar xdata temp_highter_line1[]={sw T on/off }。 //继电器手动自动切换和自动时开启电压uchar xdata temp_highter_line2[]={AUTO T= }。 //继电器手动自动切换和自动时开启电压uchar xdata temp_time_unable_line1[]={fan time unable}。 //显示风扇禁止打开的时间段uchar xdata temp_time_unable_line2[]={F:4 T:7 o39。 clock}。 //显示风扇禁止打开的时间段uchar code temp_AUTO_switch[][6]={{AUTO },{Manuel}}。 //自动,手动切换值uchar idata temp_record[]={010000000000000000000000000000000000000000000000000000000000000000000000}。 //保存每天对应钟点的温度值uchar code Weeks[][4]={{SUN },{MON },{TUE },{WED },{THU },{FRI },{SAT },{SUN }}。 //星期数组//时钟标志uint data year=0。 //时间设置标志,数据uchar data set_time=0,time_flag=0,day_flag=0,hour=0,minute=0,second=0,day=0,month=0,week=0。 //时间设置标志,数据uint speaker_count=0。 //喇叭蜂鸣计数uchar record_hour,record_minute,record_second,record_hour_count=0。 //温度记录的时间设置//小延时程序void delay(uint x) {while(x)。 }/*1MS 为单位的延时程序*/void delay_1ms(uint x){ uchar j。 while(x){ for(j=0。 j125。 j++) {。 } } }//lcd 写命令字写入void write_instruction(uchar x) {delay(100)。 lcd_E=0。 附 录20 lcd_RW=0。 lcd_RS=0。 LCD_dat=x。 lcd_E=1。 delay(20)。 lcd_E=0。 }//LCD 写数据(单个字符)void write_data(uchar x) {delay(100)。 lcd_E=0。 lcd_RW=0。 lcd_RS=1。 lcd_E=1。 LCD_dat=x。 lcd_E=0。 }//LCD 写数据(字符串)void write_string(uchar x,uchar *p){write_instruction(x)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。