数字温度计的设计_第1页
数字温度计的设计_第2页
数字温度计的设计_第3页
数字温度计的设计_第4页
数字温度计的设计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、扬州大学能源与动力工程学院课程设计报告题 目:数字温度计的设计课程:单片机原理及应用课程设计专业:电气工程及其自动化班 级:电气1202班姓 名:学 号:5第一部分单片机原理及应用课程设计任务书一、课题名称硬件设计题目五:数字温度计的设计二、课程设计目的课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节, 它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重 要的意义。单片机原理及应用是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。单片机原理及应用课程设计的目的是让学生在理论学习的基础上

2、,通过完成一个涉及mcs-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂上学到的理论知识与 实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排 错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。为今后能够独立进行某些单片机 应用系统的开发设计工作打下一定的基础。通过单片机硬件和软件设计、调试、整理资料等环节的培训,使 学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。三、课程设计内容设计以89c51单片机和外围元器件构成的单片机应用系统,并完成相应的软硬件调试。1

3、.系统方案设计:综合运用单片机课程中所学到的理论知识,学生根据所选课题的任务、要求和条件进 行总体方案的设计。2 .硬件电路设计:对方案中以单片机为核心的电路进行设计计算,包括元器件的选择和电路参数的计算,并画出总体电路图。3 .软件设计:根据已设计出的软件系统框图,用汇编语言或c51编制出各功能模块的子程序和整机软件系统的主程序。4 .调试:在单片机周立功实验箱上进行相关设计并调试。四、课程设计要求1 .学习ds18b20功能与使用方法;2 .每秒采集一次温度并在 led上显示;3 .具有显示最高与最低温度的功能;4 .设计硬件原理图;5 .编写程序。五、进度安排序号内容天数1布置任务,熟悉

4、课题要求0.52总体方案确定,硬件电路设计1.53软件编程1.54在周立功实验箱上调试25总结,撰写课程设计报告1.5七、课程设计报告内容:总结设计过程,写出设计报告,设计报告具体内容要求如下:1 .课程设计的目和设计的内容。2 .课程设计的要求。3 .控制系统总框图及系统工作原理。4 .控制系统的硬件电路连接图,电路的原理。5 .软件设计流程图及其说明。6 .电路设计,软件编程、调试中遇到的问题及分析解决方法。7 .实验结果及其分析。8 .体会。第二部分课 程 设 计 报 告1课题简介 11.1 目的 11.2 任务 11.3 要求 11.4 设计 12.1 总体设计 12.2 设计思路 1

5、2.3 工作原理 23硬件电路设计 23.1 主控电路设计 23.2 显示电路设计 23.3 温度采集电路设计 33.4 软件编辑设计 64.1 系统软件设计流程图 64.2 单总线软件设计 64.3 i2c总线软件设计 65实验与结果分析 85.1 系统结果显不 85.2 实验注意事项 85.3 与体会 95.4 献 105.5 10数字温度计的设计1课题简介1.1目的:熟练掌握单总线方式器件 ds18b20的应用,熟悉i2c总线协议,学习i2c器件zlg7290的 使用方法。并能把它们结合,组成数字式温度计。1.2任务:设计一个数字温度计1.3要求:1 .学习ds18b20功能与使用方法;

6、2 .每秒采集一次温度并在 led上显示;3 .具有显示最高与最低温度的功能;4 .设计硬件原理图;5 .编写程序。2方案设计2.1总体设计zlg7290显示控制mcuat89c51ds18b20温度采集数码管显示图1系统框图2.2设计思路系统在温度采集时主要应用了ds18b20芯片,该器件经过初始化后单片机首先进行rom匹配,当收到测温器件发回的信号时证明该器件正常工作,接着单片机发送温度转换命令进行温度采集,测温的精确度很 高。设计中还应用了 zlg7290芯片进行数码管显示的驱动,一共应用了6位数码管。报警图2设计思路22.3工作原理如图1所示基于单总线和i2c结合的温度采集与报警控制系

7、统框图。系统利用单片机做主控制器,驱动基于单总线的温度传感器 ds18b20和基于i2c总线的zlg7290数码管显示控制器,温度传感器ds18b20负 责采集实时温度值,zlg7290作为显示数码管的驱动芯片,当采集到的温度值大于40度或小于10度时,数码管进行频闪显示报警。单片机完成对温度的检测,实现安全温度内正常显示温度值,超出设定的温度上下 限进行频闪报警。3硬件电路设计3.1主控电路设计本系统采用at89c51单片机作为主控制器。at89c51是一种带4k字节flash存储器的低电压、高性能cmos 8位微处理器,是一种带 2k字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只

8、读存 储器可以反复擦除1000次。at89c51提供以下标准功能:4k字节flash闪速存储器,128字节内部ram , 32个i/o 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及 时钟电路。同时,at89c51可降至0hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停 止cpu的工作,但允许 ram ,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存 ram中的内 容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。设计电路如图:. tws.1 te th或tv tl, 则将该器件内的报警标志位置位,并对主机发出的报

9、警搜索命令作出响应。因此,可用多只ds18b20同时测量温度并进行报警搜索。在64位rom勺最高有效字节中存储有循环冗余检验码( crc。主机rom勺前56位来计算crc1,并和 存入ds18b20的crc直作比较,以判断主机收到的ro瞰据是否正确。当ds18b20处于写存储器操作和温度a/d转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时 vdm接地。由于单线制只有一根线,因此发送接口必须是三态的。设计电 路如图:簿 11叩朋口 1pd3fl.d2xtal2!rgtpd.tadtp3皿幅pz1jmp221dpsew me eap2w11p2.w12胆t/a

10、仿finf3d/rxbpi.if3.1/dcdri里”现肿t1p1i.4p/i/tqp1sp3j&t1he照pitip3.7?r d4系统软件编程设计4.1 系统软件设计流程图温度是否大于40度或者小于10度报警4.2 单总线软件设计系统上电先初始化 ds18b20,然后判断芯片是否存在,对芯片操作命令进行写入,然后出去温度值,读 取后返回采集到的温度值。4.3 i2c总线软件设计i2c总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。开始信号:scl为高电平时,sda由高电平向低电平跳变,开始传送数据。结束信号:scl为高电平时,sda由低电平向高电平跳变,结束

11、传送数据。应答信号:接收数据的ic在接u到8bit数据后,向发送数据的ic发出特定的低电平脉冲, 表示已收到数据。cpu向受控单元发出一个信号后,等待受控单元发出一个应答信号,cpu接收到应答信号后, 根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。7ds18b20存在?i2c 一帧完整 数据传送完毕5实验与结果分析i2c总线参数 初始化startstop是否发送成功发送7位数据stop图5 i2c总线软件设计框图存储操作命令读取温度值图4 ds18b20软件设计框图i2c 一帧完整 数据传送开始

12、发送其他数据或地初始化rom操作命令是否发送成功写入设备起始 地址找到当前地址开始255.1 系统结果显不硬件环境:dp-51pro.net单片机综合仿真实验台。软件环境:pc及keil等软件。通过ds18b20采集温度后显示在数码管上(2位整数、4位小数),可在程序中任意设定报警上下限温度,一旦超过上下限温度,数码管频闪发出报警,当温度回落,数码管频闪停止。5.2 实验注意事项:1、硬件调试或运行的运行的时候打开电源,不要保持电源的常开状态,以免实验箱运行时间过长烧坏。2、debug时,需关掉dpflash,否则调试时开发环境报错。6小结与体会随着时代的不断发展,科技的不断进步,单片机在我们

13、的生活和以后的工作中是经常用到的,所以学好 它对我们来说是非常重要的。本次的课程设计就是让我们通过单片机来实现生活中的某一种功能,分为程序 编辑和硬件实现两个方面。我此次的课题是实现数字温度计的实现。首先,在拿到课题后,我们需要上网查询相关资料,对网上资料进行整合和对课设中用到的器件进行了解和学习。本次课设我用到了温度传感器ds18b20和数码管等器件。在网上查询了ds18b20的使用程序,并理解其含义。从网上参考相关课题的程序在 keil软件中进行运行,理解其运行各步骤的含义并且借鉴到自 己的程序中。在程序编写完毕后,再到试验箱中运行看是否能实现数字温度计的功能。在试验过程中,要对器件的引脚

14、熟悉确定后再接入实验电路中,经过多次实验,最终终于显示了当前的温度值。在手动改写了程 序的温度上下限报警值后也实现了频闪报警的功能。本次课设既考验了我们对相关软件的学习和应用是否到位,又考验了我们的单片机知识的掌握程度和动手能力。要实现数字温度计的功能, 程序是相当复杂的! 在前期编写程序的过程中,我就遇到了很大的困难。程序很复杂,要读懂程序需要耗费很长的时间,还要对器件有足够的了解。比如对于ds18b20,实现不同的功能其需要的准备时间就不同,所以在程序会出现很多的空操作来达到延时的目的。我在刚开始时就不是很 了解,所以对于这样的程序编辑表示很不理解,直到我的组员给我提醒后,我才恍然大悟。所

15、以此次课设还考验了我的耐心和细心程度。在一句一句程序的摸索和相关时序表的学习中,经过两天的程序理解和编辑,我终于搞懂了程序部分,然后就开始运用keil软件进行仿真。先是在试验箱上对正确的引脚进行连接,然后运行。刚开始时会有失误,比如引脚连接不对或者有些引脚不知道要连接,经过多次的尝试,最后终于成功 了!我觉得经过这次课设,我的单片机知识更加充实和稳固了。以前对一些命令因为使用不多,所以不够熟悉,经过这次课设也变得熟悉了,还有keil软件也能熟练使用了。 其次,我对器件的引脚和使用更加熟悉了。为了实现相应的功能,我把课设要用到的器件引脚的功能每个都进行了了解,还有相应时序表的学习都让我 对器件的

16、使用更加得心应手,而不再是拘泥于书本的学习,正所谓实践出真知,真是一点不假。还有,这次 课设极大的考验了我的细心和耐心,在面对复杂无比的程序要一句一句的弄懂其含义和先后功能的实现,还 要在一次次的失败之后不气馁,重新开始一次次的实验!在最开始确实很折磨人,可当你发现大家都在为各 自的任务而奋斗,不抛弃,不放弃,一次次的实践直到成功的到来。在成功的那一刻,那满腔的满足感是无 法言喻的!最后,我要感谢我的老师夏老师和组员袁同学对我的帮助!在我遇到困难无法进行下去时,是你们给予 了我帮助。或者是一句程序的不懂,或者是调试不出正确结果,感谢你们耐心的给我讲解,让我在一次次调 试中,最终能取得成功。所以

17、说人是群居动物,无论在生活或者工作中,很多时候都需要和别人的交流和合 作来达到相应的目的,就像这次的课程设计,如果我遇到了困难而一味自己瞎琢磨,这样不仅浪费了大量时 间和精力,而且还可能得不得正确结果。所以在遇到自己难以解决的问题时,要敢于寻求他人的帮助,互助 互惠才是最好的生活方式!我相信经过这次课设,我不仅更加牢固的掌握了单片机的知识和和相关软件的应用,也锻炼了自己的实 践能力,相信在未来的日子里,无论遭遇失败或成功,我都会继续进步,继续成长,为将来的工作奠定一个 好的基础!参考文献1张毅刚主编,单片机原理及应用,北京:高等教育出版社,20042陈涛编著,单片机应用及c51程序设计,北京:

18、机械工业出版社,20083周润景主编,proteus入门实用教程,北京:机械工业出版社,20074皮大能主编,单片机课程设计指导书,北京:北京理工大学出版社,2010附录.*;设置ds18b20端口参数;*;thi_warningequ 40htli_warningequ 41htemper_flag equ 42htemper_point equ 43htemperequ 44htemper_hequ 45htemper_lequ 46hti_showequ 47ht_saveequ 48htemper_numequ 60hflag1bit 00hdqbit p3.3*设置zlg7290端口

19、参数*sdabit p3.0sclbit p3.1wslaequ 70hrslaequ 71hdisdaequ 20hdisconequ 08h*org8000hljmp8100h*初始化部分*org8100hmovsp,#60hclrp3.6lcalldelay;温度符号位数据保存区;温度小数部分数据保存区;温度整数部分数值保存区;温度整数部分高位数值保存区;温度整数部分低位数值保存区;十进制温度整数部分数值保存区lp1:lcall get_temperlcalltemper_cov lcall data_pro lcall ledshow mov a,temper cjne a,tli_w

20、arning ,warwar:jnc loop10lcall twinkle sjmp lp1loop10: cjne a,thi_w arning ,war1war1:jc lp2lcall twinklesjmp lp1lp2:lcall notwinkleljmp lp1p3.6setb.* ;设置报警上下限值.*mov thi_warning,#40mov tli_warning ,#10 .*;主程序部分.*;从ds18b20读取温度数据;转换读取的温度整数、符号位和小数部分数据并保存;数码管显示前对要显示数据的相关处理;数码管显示程序;判断温度值是否低于报警下限值,低于则报警,不低

21、于则判断;是否大于报警上限值;判断温度值是否低于报警下限值,低于则报警,不低于则跳转;对zlg7290写入不闪烁控制字.*;获取ds18b20温度值子程序.*get_temper:setb dq bcd: lcall init_1820 jb flag1,s22 ljmp bcds22: lcall delay1mov a,#0cch lcall write_1820 mov a,#44hlcall write_1820 lcall delaycba: lcall init_1820 jb flag1,abc ljmp cbaabc: lcall delay1mov a,#0cch lcall

22、 write 1820;定时入口;若ds18b20不存在则返回;跳过rom匹配0cc;发出温度转换命令;跳过rom匹配mov a,#0beh;发出读温度命令lcall write_1820lcall read_18200ret;写ds18b20的程序write_1820:mov r2,#8;写一个字节的数据clr cwr1: clr dqmov r3,#6djnz r3,$;延时rrc a;带进位的右移mov dq,cmov r3,#23djnz r3,$;延时setb dqnopdjnz r2,wr1setb dqret;读ds18b20的程序,从ds18b20中读出二个字节的数据read_

23、18200:mov r4,#2;读出两个字节的数据mov r1,#46hre00:mov r2,#8re01:clr csetb dqnopclr dqnopnop;空操作延时以达到 ds18b20可以读的状态setb dqmov r3,#2djnz r3,$mov c,dqmov r3,#23djnz r3,$rrc adjnz r2,re01mov r1,adec r1djnz r4,re00ret .*;ds18b20温度值提取整数部分、符号位和小数部分的子程序.*temper_cov:mov a,#0f0h;数据省略低四位anl a,temper_lswap a;交换高低半字节的数据m

24、ov temper_num,amov a,temper_hanl a,#07h;只保留高字节中的低三位数据swap aadd a,temper_nummov temper_num,amov temper,temper_nummov a,#0fh;只保留低四位数据anl a,temper_lswap amov temper_point,amov a,temper_hanl a,#08hswap amov temper_flag ,aret;整数和小数的位偏移数据存储;*;30h 37h为数据存储区,其中 30h-33h为小数值;34h-35h为整数值,36h为百位值,37h为符号位值.*data

25、_pro:mov 37h,#0ah;把标志位的值给 a;条件转移mov a,temper_flagjz positivemov a,tempercpl aanl a,#7fhadd a,#01hmov temper,amov 37h,#0bhpositive: mov a,tempercjne a,64h,sethundredbitsethundredbit:jc sethundredbit1subb a,#64hmov temper,amov 36h,#01hsjmp set1sethundredbit1: mov 36h,#00hset1:mov a,tempermov b,#10div

26、abmov 34h,bmov 35h,amov a,temper_pointclr crlc aswap arr ajnz point1mov 30h,#00hmov 31h,#00hmov 32h,#00hmov 33h,#00hsjmp showpoint1: dec ajnz point2mov 30h,#05hmov 31h,#02hmov 32h,#06hmov 33h,#00hsjmp showpoint2: dec ajnz point3mov 30h,#00hmov 31h,#05hmov 32h,#02hmov 33h,#01hsjmp showpoint3: dec ajn

27、z point4mov 30h,#05hmov 31h,#07hmov 32h,#08hmov 33h,#01hsjmp showpoint4: dec ajnz point5mov 30h,#00hmov 31h,#00h;a除以b,商存放在a中,余数存放在;数据左移;不带进位的右移;不为0则跳转到point1;小数数据的输入;堆栈区数据不断修改mov 32h,#05hmov 33h,#02hsjmp showpoint5: dec ajnz point6mov 30h,#05hmov 31h,#02hmov 32h,#06hmov 33h,#00hsjmp showpoint6: dec

28、ajnz point7mov 30h,#00hmov 31h,#05hmov 32h,#07hmov 33h,#03hsjmp showpoint7:mov 30h,#05hmov 31h,#07hmov 32h,#03hmov 33h,#04hshow:jnc show1mov a,33hadd a,#05hmov 33h,ashow1: ret.* ;zlg7290数据显示部分子程序.*ledshow:push 00h;堆栈push 01hpush 02hpush 03hpush 07hmov dptr,#ledsegclr amov r7,#08hmov r0,#20hmov r1,#3

29、0h查表依次输入loop1:mov a,r1movc a,a+dptr;mov r0,ainc r1inc r0djnz r7,loop1mov a,24hadd a,#01hmov 24h,aloop:mov r7,#08hmov r0,#20hmov r2,#10hmov r3,#wslalcall wrnbytlcall delay0pop 07hpop 03hpop 02hpop 01hpop 00hret .*;延时子程序delay0:push 00hpush 01hmov r0,#00hdelay2:mov r1,#00hdjnz r1,$djnz r0,delay2pop 01h

30、pop 00hretdelay1:mov r7,#20hdjnz r7,$retdelay: push 00hpush 01hmov r0,#00lp: mov r1,#00hdjnz r1,$djnz r0,lppop 01hpop 00hret.* ;数码管闪烁子程序.*;中断程序用堆栈的方式进行现场保护twinkle:push 00hpush 02hpush 03hpush 07hmov 38h,#70hmov 39h,#0ffhmov r7,#02hmov r0,#38hmov r2,#07hmov r3,#wsla lcall wrnbyt mov 3ah,#00h mov r7,#

31、01h mov r0,#3ahmov r2,#0chmov r3,#wsla lcall wrnbyt pop 07hpop 03hpop 02hpop 00h retnotwinkle:push 00hpush 02hpush 03hpush 07hmov 38h,#70hmov 39h,#00hmov r7,#02hmov r0,#38hmov r2,#07hmov r3,#wsla lcall wrnbyt mov 3ah,#00h mov r7,#01h mov r0,#3ah mov r2,#0chmov r3,#wsla lcall wrnbyt pop 07h pop 03h p

32、op 02hpop 00hret.* ;数码管显示子程序.* ;disp1: push 00hpush02hpush03hpush04hpush07hmovr7,#08hmovr0,#50hmovr2,#10hmovr3,#wslalcallwrnbytlcalldelaypop 07hpop 04hpop 03hpop 02hpop 00hret.* ;初始化ds18b20子程序.*init_1820:setb dqnopclr dqmov r0,#80htsr1:djnz r0,tsr1setb dqmov r0,#25htsr2:djnz r0,tsr2jnb dq,tsr3ljmp t

33、sr4tsr3:setb flag1ljmp tsr5tsr4:clr flag1ljmp tsr7 tsr5: mov r0,#06bh tsr6:djnz r0,tsr6;延时;延时;置标志位,表示ds1820存在;清标志位,表小ds1820不存在;200us;延时tsr7:setb dqret*zlg7290相关子程序*(1)带有内部单元地址的多字节写操作子程序wrnbyt*通用的i2c通讯子程序(多字节写操作)入口参数r7字节数,r0:源数据块首地址r0原数据块首地址;r2从器件内部子地址;r3:外围器件地址(写).相关了程序wrbyt、stop、cack、sta*wrnbyt:pus

34、h pswpush accwradd:mov a,r3lcall sta lcall wrbyt lcall cack jb f0,wradd mov a,r2 lcall wrbyt lcall cack jb f0,wraddwrda: mov a,r0 lcall wrbyt lcall cack jb f0,wradd inc r0 djnz r7,wrda;取外围器件地地址(包含 r/w=0);发送起始信号s;发送外围地址;检测外围器件的应答信号;如果应;发送内部寄存器首地址;检测外围器件的应答信号;如果应答不正确返回重来;发送外围地址;检测外围器件的应答信号;如果应答不正确返回重来lcall stoppop accpop pswretrdadd(2)带有内部单元地址的多字节读操作子程序 *通用的i2c通讯子程序(多字节读操作);入口参数r7字节数;r0目标数据块首地址;r2从器件内部子地址;r3器件地址(写);r4器件地址(读).利

温馨提示

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

评论

0/150

提交评论