ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:129.26KB ,
资源ID:9140384      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9140384.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(大连理工大学单片机实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

大连理工大学单片机实验报告.docx

1、大连理工大学单片机实验报告大连理工大学本科设计报告题目: 单总线高精度温度采集系统 课程名称: 单片机综合设计实验 学院(系): 信息与通信工程学院 专 业: 电子信息工程 班 级: 电子 学 号: 学生姓名: 成 绩: 2016 年 5 月 5 日一设计要求1.启动DS18B20进行12位高精度环境温度采集2.利用12864LCD屏/数码管显示数据3.具有温度上限声光报警器4.可以通过键盘设定报警上限值(选)二设计分析及系统方案设计 通过DS18B20进行小数12位温度转换、采集,通过单片机读取DS18B20采集到的12位温度值进行二进制到十六进制的转换,利用ZLG7290进行八位数码管显示

2、;利用键盘进入中断来设定报警上限,当温度高于上限时进入报警子程序。利用SW1进入中断来查看当前设置的温度报警上下限值,利用ZLG7290和数码管来显示。主程序不断循环采集温度比较,并可随时进入中断来修改温度上下限和查看温度值。三系统电路图四外围接口模块硬件电路功能描述1.DS18B20:用于测定温度,测量范围-55+125,分辨率为0.0625,数据格式为二进制补码形式。2.ZLG7290B:用于数码管动态显示驱动,键盘扫描管理。能够驱动8位共阴极结构的LED数码管或64位独立的LED,同时还能扫描管理多达64个按键的扫描识别,其中八个键可以作为功能键使用。接口采用IC结构。3.蜂鸣器:这里用

3、作报警,为无源蜂鸣器。 五主程序中主要变量定义变量名称内存单元功能TEMPER_L 36H存放温度低四位TEMPER_H 35H存放温度高四位TEMPER 34H转换后的温度值TEMPER_BCD 33HBCD形式温度值TEMPER_NUM 60H温度值缓冲单元WSLA_7290 70H7290写控制单元RSLA_7290 71H7290读控制单元20-27H数码管显示缓冲区28H存放温度上限值30-31H存放温度BCD码个位十位六系统软件中各个子程序的功能描述子程序名称入口参数出口参数功能 描述GET_TEMPER无35H,36H读取18B20的温度值READ_1820035H,36H无向1

4、8b20读控制字TEMPER_COV35H,36H20H,21H温度转换成十进制BCD码形式CF无R3,R4拆分子程序,拆分送数码管显示INIT_1820无无温度传感器初始化BUZZER 无 无无蜂鸣器控制发声子程序INT_7290无28H读取按键外部中断子程序RDKEY无A读取键值子程序DELAY无无延时子程序七主程序程序流程图8. 程序清单(要求打印格式要规范、重要的语句要有必要的注释) SDA BIT P1.0 SCL BIT P1.1 TEMPER_L EQU 36H TEMPER_H EQU 35H TEMPER EQU 34H ;转换后温度值 TEMPER_BCD EQU 33H

5、;BCD码温度值 TEMPER_NUM EQU 60H ;缓冲单元 WSLA_7290 EQU 70H RSLA_7290 EQU 71H FLAG1 BIT 00H DQ BIT P3.3 ;总线控制单元 ORG 0000H LJMP MAIN ORG 0003H LJMP INT_7290 ORG 0100HMAIN: MOV SP,#70H ;ZLG7290复位 CLR P1.7 LCALL DELAY SETB P1.7 MOV 28H,#1EH ;温度上限初始值30度 MOV TMOD,#01H ;模式一,16位计数器 SETB EA ;允许INTO中断 MODE: JB P1.3,

6、SETTMP ;拨码为0时采集温度 ;温度采集TMP: CLR EX0 MOV 27H,#1FH ;tLP1: LCALL GET_TEMPER LCALL TEMPER_COV ;7290显示 MOV R7,#08H MOV R0,#20H MOV R2,#10H MOV R3,#WSLA_7290 LCALL WRNBYT LCALL DELAY MOV A,TEMPER ;判断温度上限 MOV 28H,R5 CLR C CJNE A,28H,rel ;此处报警温度为30度rel: JC NET LCALL BUZZER ;大于等于时蜂鸣器报警 ;闪烁 MOV 28H,#70H ;闪烁命令

7、字 MOV 29H,#7FH ;闪烁命令字 MOV R7,#02H ;设定数据个数 MOV R0,#28H ;设置源数据首地址 MOV R2,#07H ;设置外围器件内部寄存器首地址 MOV R3,#WSLA_7290 ;设定外围器件地址 LCALL WRNBYT ;调用显示子程序 LCALL DELAY LJMP NEXTT ;设定温度上限SETTMP: SETB EX0 ;7290复位 CLR P1.7 LCALL DELAY SETB P1.7 ;显示设定内容 MOV 27H,#0B6H ;S MOV 26H,#9EH ;E MOV 25H,#1FH ;T. MOV R7,#03H MO

8、V R0,#25H MOV R2,#15H MOV R3,#WSLA_7290 LCALL WRNBYT LCALL DELAY SJMP NEXTTNET: MOV 28H,#70H ;不能闪烁 MOV 29H,#00H MOV R7,#02H MOV R0,#28H MOV R2,#07H MOV R3,#WSLA_7290 LCALL WRNBYT LCALL DELAYNEXTT: CALL DELAY SJMP MODEGET_TEMPER: SETB DQ ;定时入口BCD: LCALL INIT_1820 JB FLAG1,S22 LJMP BCD ;若ds18b20不存在则返回

9、S22: LCALL DELAY1 MOV A,#0CCH ;跳过rom匹配0cch LCALL WRITE_1820 MOV A,#44H ;发出温度转换命令 LCALL WRITE_1820 LCALL DELAYCBA: LCALL INIT_1820 JB FLAG1,ABC LJMP CBAABC: LCALL DELAY1 MOV A,#0CCH ;跳过rom匹配 LCALL WRITE_1820 MOV A,#0BEH ;发出读温度命令 LCALL WRITE_1820 LCALL READ_18200 RETWRITE_1820: ;写ds18b20程序 MOV R2,#8 C

10、LR CWR1: CLR DQ MOV R3,#6 ;延时24us DJNZ R3,$ RRC A MOV DQ,C MOV R3,#23 ;延时60us DJNZ R3,$ SETB DQ NOP DJNZ R2,WR1 SETB DQ RETREAD_18200: ;从1820中读出两个字节温度数据 PUSH 01H MOV R4,#2 MOV R1,#36HRE00: MOV R2,#8RE01: CLR C SETB DQ NOP CLR DQ NOP NOP SETB DQ MOV R3,#2 DJNZ R3,$ MOV C,DQ MOV R3,#23H DJNZ R3,$ RRC

11、A DJNZ R2,RE01 MOV R1,A DEC R1 DJNZ R4,RE00 POP 01H RETU8TEMPER_COV: ;将读出的数据转换 PUSH DPH PUSH DPL PUSH 02H MOV A,#0F0H ANL A,TEMPER_L ;舍去小数点后的四位 SWAP A MOV TEMPER_NUM,A MOV A,TEMPER_H ANL A,#07H SWAP A ADD A,TEMPER_NUM MOV TEMPER,A ;转换成十进制数显示 MOV B,#10 DIV AB MOV 30H,B ;个位 MOV B,#10 DIV AB MOV 31H,B

12、;十位 ANL A,#0FH ;百位 SWAP A ADD A,B MOV TEMPER_BCD,A LCALL CF2 ;拆分查表 MOV 25H,R3 MOV 26H,R4 MOV A,30H ANL A,#0FH LCALL CF MOV 24H,R3 ;处理四位小数位数据 MOV A,TEMPER_L ANL A,#0FH ;取低四位数据 MOV B,#02H MUL AB ;字节转为字 MOV DPTR,#NUMSEG MOVC A,A+DPTR MOV TEMPER_BCD,A LCALL CF2 MOV 22H,R3 MOV 23H,R4 MOV A,TEMPER_L ANL A

13、,#0FH MOV B,#02H MUL AB INC A MOVC A,A+DPTR MOV TEMPER_BCD,A LCALL CF2 MOV 20H,R3 MOV 21H,R4 POP 02H POP DPL POP DPH RET;-小数部分查表-NUMSEG: DW 0000H,0625H,1250H,1875H,2500H,3125H,3750H,4375H DW 5000H,5625H,6250H,6875H,7500H,8125H,8750H,9375H ;-;-拆分显示整数子程序-CF: PUSH 02H PUSH DPH PUSH DPL MOV DPTR,#LEDSEG

14、 MOV R2,TEMPER_BCD ANL A,#0FH MOVC A,A+DPTR ;查表得字形码 MOV R3,A MOV A,R2 SWAP A ANL A,#0FH MOVC A,A+DPTR MOV R4,A INC R3 ;加上小数点 POP DPL POP DPH POP 02H RET ;-;-拆分显示小数子程序-CF2: PUSH 02H PUSH DPH PUSH DPL PUSH ACC MOV DPTR,#LEDSEG MOV R2,TEMPER_BCD MOV A,R2 ANL A,#0FH MOVC A,A+DPTR MOV R3,A MOV A,R2 SWAP

15、A ANL A,#0FH MOVC A,A+DPTR MOV R4,A ;加上小数点 POP ACC POP DPL POP DPH POP 02H RET ;-;-led字型码-LEDSEG: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH;- INIT_1820: SETB DQ NOP CLR DQ MOV R0,#80HTSR1: DJNZ R0,TSR1 ;延时300us SETB DQ MOV R0,#25H ;96usTSR2: DJNZ R0,TSR2 JNB DQ,T

16、SR3 LJMP TSR4 ;延时TSR3: SETB FLAG1 ;致标志位 LJMP TSR5 ;ds18b20存在TSR4: CLR FLAG1 ;清标志位 LJMP TSR7 ;ds18b20不存在TSR5: MOV R0,#06BH ;延时200usTSR6: DJNZ R0,TSR6TSR7: SETB DQ RETDELAY1: MOV R7,#20H ;80us延时 DJNZ R7,$ RET;-蜂鸣器驱动子程序-BUZZER: PUSH 07H MOV R7,#00H MOV TL0,#33H ;设置定时0.5us初值 MOV TH0,#0FEH SETB TR0 ;启动t0

17、WAIT: JNB TF0,$ CLR TF0 MOV TL0,#33H MOV TH0,#0FEH CPL P1.2 DJNZ R7,WAIT CLR TR0 SETB P1.2 POP 07H RET;-;-外部中断服务程序-INT_7290: PUSH 00H PUSH 01H PUSH 02H PUSH 03H PUSH 04H PUSH 07H PUSH ACC PUSH PSW SJMP RD1 RD1: JB P3.2,$ ;以查询方式等待下一次按键操作 SWAP A LCALL RDKEY CJNE A,#0AH,WAITT ;容错功能调整WAITT: JNC RD1 MOV

18、TEMPER_BCD,A LCALL CF2 MOV B,#0AH MUL AB MOV R5,A MOV 23H,R3 MOV R7,#01H MOV R0,#23H MOV R2,#13H MOV R3,#WSLA_7290 LCALL WRNBYTKEY2: JB P3.2,$ ;以查询方式等待下一次按键操作 LCALL RDKEY CJNE A,#0AH,WAITT2WAITT2: JNC KEY2 MOV TEMPER_BCD,A LCALL CF2 MOV A,R5 ADD A,TEMPER_BCD MOV R5,A MOV 22H,R3 MOV 21H,#9CH ;C MOV R

19、7,#02H MOV R0,#21H MOV R2,#11H MOV R3,#WSLA_7290 LCALL WRNBYT ;确定键COMF: JB P3.2,$ ;等待确认键 LCALL RDKEY CJNE A,#0FH,COMF MOV 28H,R5 ;上限值放入28h中 DOWN: ;7290复位 CLR P1.7 LCALL DELAY SETB P1.7 CLR IE0 ;必须清标志 POP PSW POP ACC POP 07H POP 04H POP 03H POP 02H POP 00H RETI;-;-读取键值子程序(键值保存在A中)-RDKEY: MOV R0,#1FH

20、MOV R7,#01H MOV R2,#01H MOV R3,#WSLA_7290 MOV R4,#RSLA_7290 LCALL RDADD MOV A,1FH DEC A RET;-;-延时子程序-DELAY: PUSH 00H ;延时子程序 PUSH 01H MOV R1,#00LP: MOV R1,#00H DJNZ R1,$ DJNZ R0,LP POP 01H POP 00H RET;-(I2C子程序省略)九系统调试运行结果说明、分析所出现得问题,设计体会与建议 硬件使用ZLG51单片机开发平台,软件使用KEil2软件进行程序的编写编译以及调试。运行结果:能够实现当前环境温度的采集

21、以及分为整数部分和小数部分的显示,设定温度上限,超过设定上限温度进行蜂鸣器报警,数码管同时闪烁,温度低于设定值立刻停止闪烁和报警。能够通过拨码控制模式切换,切换到设定上限温度模式,通过按键输入上限温度值改变当前上限温度,能够纠错,输入10以上的数字时不显示,按下确定键时确定温度上限值。问题:(1)采集的温度为十六进制数字,如何转换成十进制BCD码。通过查询上学期学习的计算机原理的相关算法,解决了此问题,成功显示。(2)小数部分的显示问题。通过将有可能出现的小数情况列举并进行查表显示,最后成功显示。(3)高于温度报警闪烁之后,温度下降以后数码管仍然闪烁,后来发现是子程序逻辑错误已经改正。十结论及

22、设计体会 通过本次实验,我对DS18B20芯片有了一定的了解,对于DS18B20编程的时序要求以及相应的编程操作流程有了更深度的掌握。这次实验综合了中断、查询、时钟、ZLG7290芯片、DS18B20芯片等很多知识。本次试验采用子程序调用的方法进行设计,可以逐一的进行调试,对于代码量比较大的程序来说子程序设计还是很好的编程开发方式。此次试验中遇到很多细节的错误,比如子程序顺序混乱等逻辑错误,导致程序总是出现错误,幸好在最后都成功的改正了。 在代码量比较大的程序设计时,不能只对软件代码进行修改,还要结合硬件调试,否则很难看出问题,同时不怕错误,会正确的调试方法,灵活使用断点,会找错并改错也是很重要的素质。这次实验对我以后的程序设计任务有很大的启发作用,让我明白了程序设计的基本顺序和需要注意的地方以及调试方法,相信在以后的学习和工作中都会受益。最后感谢老师的悉心教导。参考文献1 MCS-51单片机应用实验教程 作者:陈育斌,秦晓梅等

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1