大连理工单片机课程设计报告书.docx
- 文档编号:25209333
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:30
- 大小:310.37KB
大连理工单片机课程设计报告书.docx
《大连理工单片机课程设计报告书.docx》由会员分享,可在线阅读,更多相关《大连理工单片机课程设计报告书.docx(30页珍藏版)》请在冰豆网上搜索。
大连理工单片机课程设计报告书
大连理工大学本科设计报告
题目:
基于DS18B20、ZLG7290的温度采集系统设计
课程名称:
单片机综合设计实验
学院(系):
信息与通信工程学院
专业:
电子信息工程
班级:
电子
学号:
学生姓名:
成绩:
2016年5月6日
题目:
1设计要求
1.利用DS18B20实现现场环境温度的采集;
2.利用ZLG7290B实现温度数据证书的十进制显示;
3.默认一个上限温度的报警(蜂鸣器);
4.能够利用ZLG7290B的键盘操作修改“上限报警值”;
5.可以显示温度的小数位,以提高温度检测的分辨率;
6.程序中必须有中断环节。
2设计分析及系统方案设计
利用P3.3口采集DS18B20的温度信息,采集后,通过I2C协议控制ZLG7290显示温度信息,并且将小数部分显示出来,通过P1.3连接一个拨码用来做模式控制,控制是温度显示状态模式或者设定温度上限模式,其中温度上限存放在28H单元中。
利用T0定时器控制蜂鸣器发声一段时间,超过温度上限报警声音提示,同时数码管进行闪烁以报警。
利用INT0外部中断读取按键值,用于设定上限温度并保存。
3系统电路图
P1.3
P1.3
P1.2
5主程序中主要变量说明
内存单元的定义、功能等。
变量名称
内存单元
功能
TEMPER_L
36H
存放温度低四位
TEMPER_H
35H
存放温度高四位
TEMPER
34H
转换后的温度值
TEMPER_BCD
33H
BCD形式温度值
TEMPER_NUM
60H
温度值缓冲单元
WSLA_7290
70H
7290写控制单元
RSLA_7290
71H
7290读控制单元
20-27H
数码管显示缓冲区
28H
存放温度上限值
30-31H
存放温度BCD码个位十位
6系统软件中各个子程序的功能描述
子程序的名称、功能,以及入口、出口参数。
子程序名称
功能描述
GET_TEMPER
读取18B20的温度值
WRITE_1820
向18b20写控制字
READ_18200
向18b20读控制字
TEMPER_COV
温度转换成十进制BCD码形式
CF
拆分子程序,拆分送数码管显示
INIT_1820
温度传感器初始化
BUZZER
蜂鸣器控制发声子程序
INT_7290:
读取按键外部中断子程序
RDKEY
读取键值子程序
DELAY
延时子程序
7主程序程序流程图
8程序清单(I2C库函数省略)
SDABITP1.0
SCLBITP1.1
TEMPER_LEQU36H
TEMPER_HEQU35H
TEMPEREQU34H;转换后温度值
TEMPER_BCDEQU33H;BCD码温度值
TEMPER_NUMEQU60H;缓冲单元
WSLA_7290EQU70H
RSLA_7290EQU71H
FLAG1BIT00H
DQBITP3.3;总线控制单元
ORG0000H
LJMPMAIN
ORG0003H
LJMPINT_7290
ORG0100H
MAIN:
MOVSP,#70H
;ZLG7290复位
CLRP1.7
LCALLDELAY
SETBP1.7
MOV28H,#1EH;温度上限初始值30度
MOVTMOD,#01H;模式一,16位计数器
SETBEA;允许中断
MODE:
JBP1.3,SETTMP;拨码为0时采集温度
;温度采集
TMP:
CLREX0
MOV27H,#1FH;t
LP1:
LCALLGET_TEMPER
LCALLTEMPER_COV
;7290显示
MOVR7,#08H
MOVR0,#20H
MOVR2,#10H
MOVR3,#WSLA_7290
LCALLWRNBYT
LCALLDELAY
MOVA,TEMPER
;判断温度上限
MOV28H,R5
CLRC
CJNEA,28H,rel;此处报警温度为30度
rel:
JCNET
LCALLBUZZER;大于等于时蜂鸣器报警
;闪烁
MOV28H,#70H;闪烁命令字
MOV29H,#7FH;闪烁命令字
MOVR7,#02H;设定数据个数
MOVR0,#28H;设置源数据首地址
MOVR2,#07H;设置外围器件内部寄存器首地址
MOVR3,#WSLA_7290;设定外围器件地址
LCALLWRNBYT;调用显示子程序
LCALLDELAY
LJMPNEXTT
;设定温度上限
SETTMP:
SETBEX0
;7290复位
CLRP1.7
LCALLDELAY
SETBP1.7
;显示设定内容
MOV27H,#0B6H;S
MOV26H,#9EH;E
MOV25H,#1FH;T.
MOVR7,#03H
MOVR0,#25H
MOVR2,#15H
MOVR3,#WSLA_7290
LCALLWRNBYT
LCALLDELAY
SJMPNEXTT
NET:
MOV28H,#70H;不能闪烁
MOV29H,#00H
MOVR7,#02H
MOVR0,#28H
MOVR2,#07H
MOVR3,#WSLA_7290
LCALLWRNBYT
LCALLDELAY
NEXTT:
CALLDELAY
SJMPMODE
GET_TEMPER:
SETBDQ;定时入口
BCD:
LCALLINIT_1820
JBFLAG1,S22
LJMPBCD;若ds18b20不存在则返回
S22:
LCALLDELAY1
MOVA,#0CCH;跳过rom匹配0cch
LCALLWRITE_1820
MOVA,#44H;发出温度转换命令
LCALLWRITE_1820
LCALLDELAY
CBA:
LCALLINIT_1820
JBFLAG1,ABC
LJMPCBA
ABC:
LCALLDELAY1
MOVA,#0CCH;跳过rom匹配
LCALLWRITE_1820
MOVA,#0BEH;发出读温度命令
LCALLWRITE_1820
LCALLREAD_18200
RET
WRITE_1820:
;写ds18b20程序
MOVR2,#8
CLRC
WR1:
CLRDQ
MOVR3,#6;延时24us
DJNZR3,$
RRCA
MOVDQ,C
MOVR3,#23;延时60us
DJNZR3,$
SETBDQ
NOP
DJNZR2,WR1
SETBDQ
RET
READ_18200:
;从1820中读出两个字节温度数据
PUSH01H
MOVR4,#2
MOVR1,#36H
RE00:
MOVR2,#8
RE01:
CLRC
SETBDQ
NOP
CLRDQ
NOP
NOP
SETBDQ
MOVR3,#2
DJNZR3,$
MOVC,DQ
MOVR3,#23H
DJNZR3,$
RRCA
DJNZR2,RE01
MOV@R1,A
DECR1
DJNZR4,RE00
POP01H
RET
TEMPER_COV:
;将读出的数据转换
PUSHDPH
PUSHDPL
PUSH02H
MOVA,#0F0H
ANLA,TEMPER_L;舍去小数点后的四位
SWAPA
MOVTEMPER_NUM,A
MOVA,TEMPER_H
ANLA,#07H
SWAPA
ADDA,TEMPER_NUM
MOVTEMPER,A
;转换成十进制数显示
MOVB,#10
DIVAB
MOV30H,B;个位
MOVB,#10
DIVAB
MOV31H,B;十位
ANLA,#0FH;百位
SWAPA
ADDA,B
MOVTEMPER_BCD,A
LCALLCF2;拆分查表
MOV25H,R3
MOV26H,R4
MOVA,30H
ANLA,#0FH
LCALLCF
MOV24H,R3
;处理四位小数位数据
MOVA,TEMPER_L
ANLA,#0FH;取低四位数据
MOVB,#02H
MULAB
MOVDPTR,#NUMSEG
MOVCA,@A+DPTR
MOVTEMPER_BCD,A
LCALLCF2
MOV22H,R3
MOV23H,R4
MOVA,TEMPER_L
ANLA,#0FH
MOVB,#02H
MULAB
INCA
MOVCA,@A+DPTR
MOVTEMPER_BCD,A
LCALLCF2
MOV20H,R3
MOV21H,R4
POP02H
POPDPL
POPDPH
RET
;--------------小数部分查表------------------------
NUMSEG:
DW0000H,0625H,1250H,1875H,2500H,3125H,3750H,4375H
DW5000H,5625H,6250H,6875H,7500H,8125H,8750H,9375H
;--------------------------------------------------
;--------------拆分显示整数子程序------------------
CF:
PUSH02H
PUSHDPH
PUSHDPL
MOVDPTR,#LEDSEG
MOVR2,TEMPER_BCD
ANLA,#0FH
MOVCA,@A+DPTR
MOVR3,A
MOVA,R2
SWAPA
ANLA,#0FH
MOVCA,@A+DPTR
MOVR4,A
INCR3;加上小数点
POPDPL
POPDPH
POP02H
RET
;-----------------------------------------------
;--------------拆分显示小数子程序------------------
CF2:
PUSH02H
PUSHDPH
PUSHDPL
PUSHACC
MOVDPTR,#LEDSEG
MOVR2,TEMPER_BCD
MOVA,R2
ANLA,#0FH
MOVCA,@A+DPTR
MOVR3,A
MOVA,R2
SWAPA
ANLA,#0FH
MOVCA,@A+DPTR
MOVR4,A
;加上小数点
POPACC
POPDPL
POPDPH
POP02H
RET
;-----------------------------------------------
;-----------------led字型码---------------------
LEDSEG:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H
DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
;-----------------------------------------------
INIT_1820:
SETBDQ
NOP
CLRDQ
MOVR0,#80H
TSR1:
DJNZR0,TSR1;延时300us
SETBDQ
MOVR0,#25H;96us
TSR2:
DJNZR0,TSR2
JNBDQ,TSR3
LJMPTSR4;延时
TSR3:
SETBFLAG1;致标志位
LJMPTSR5;ds18b20存在
TSR4:
CLRFLAG1;清标志位
LJMPTSR7;ds18b20不存在
TSR5:
MOVR0,#06BH;延时200us
TSR6:
DJNZR0,TSR6
TSR7:
SETBDQ
RET
DELAY1:
MOVR7,#20H;80us延时
DJNZR7,$
RET
;---------------蜂鸣器驱动子程序--------------
BUZZER:
PUSH07H
MOVR7,#00H
MOVTL0,#33H;设置定时0.5us初值
MOVTH0,#0FEH
SETBTR0;启动t0
WAIT:
JNBTF0,$
CLRTF0
MOVTL0,#33H
MOVTH0,#0FEH
CPLP1.2
DJNZR7,WAIT
CLRTR0
SETBP1.2
POP07H
RET
;---------------------------------------------
;-------------外部中断服务程序----------------
INT_7290:
PUSH00H
PUSH01H
PUSH02H
PUSH03H
PUSH04H
PUSH07H
PUSHACC
PUSHPSW
SJMPRD1
RD1:
JBP3.2,$;以查询方式等待下一次按键操作
SWAPA
LCALLRDKEY
CJNEA,#0AH,WAITT;容错功能调整
WAITT:
JNCRD1
MOVTEMPER_BCD,A
LCALLCF2
MOVB,#0AH
MULAB
MOVR5,A
MOV23H,R3
MOVR7,#01H
MOVR0,#23H
MOVR2,#13H
MOVR3,#WSLA_7290
LCALLWRNBYT
KEY2:
JBP3.2,$;以查询方式等待下一次按键操作
LCALLRDKEY
CJNEA,#0AH,WAITT2
WAITT2:
JNCKEY2
MOVTEMPER_BCD,A
LCALLCF2
MOVA,R5
ADDA,TEMPER_BCD
MOVR5,A
MOV22H,R3
MOV21H,#9CH;C
MOVR7,#02H
MOVR0,#21H
MOVR2,#11H
MOVR3,#WSLA_7290
LCALLWRNBYT
;确定键
COMF:
JBP3.2,$;等待确认键
LCALLRDKEY
CJNEA,#0FH,COMF
MOV28H,R5;上限值放入28h中
DOWN:
;7290复位
CLRP1.7
LCALLDELAY
SETBP1.7
CLRIE0;必须清标志
POPPSW
POPACC
POP07H
POP04H
POP03H
POP02H
POP00H
RETI
;---------------------------------------------
;------------读取键值子程序(键值保存在A中)---
RDKEY:
MOVR0,#1FH
MOVR7,#01H
MOVR2,#01H
MOVR3,#WSLA_7290
MOVR4,#RSLA_7290
LCALLRDADD
MOVA,1FH
DECA
RET
;----------------------------------------------
;------------延时子程序-----------------------
DELAY:
PUSH00H;延时子程序
PUSH01H
MOVR1,#00
LP:
MOVR1,#00H
DJNZR1,$
DJNZR0,LP
POP01H
POP00H
RET
;---------------------------------------------
;【附录一】由汇编语言编制的I2C通讯子程序
;【提示】下列程序是在系统时钟为12MHZ(或11.0592MHZ),即NOP指令为1微秒左右。
;
(1)带有内部单元地址的多字节写操作子程序WRNBYT
;*******************************************************************
;通用的I2C通讯子程序(多字节写操作)
;入口参数R7字节数,R0:
源数据块首地址
;R0原数据块首地址;R2从器件内部子地址;R3:
外围器件地址(写)
;相关子程序WRBYT、STOP、CACK、STA
;*******************************************************************
WRNBYT:
PUSHPSW
PUSHACC
WRADD:
MOVA,R3;取外围器件地地址(包含r/w=0)
LCALLSTA;发送起始信号S
LCALLWRBYT;发送外围地址
LCALLCACK;检测外围器件的应答信号
JBF0,WRADD;如果应
MOVA,R2
LCALLWRBYT;发送内部寄存器首地址
LCALLCACK;检测外围器件的应答信号
JBF0,WRADD;如果应答不正确返回重来
WRDA:
MOVA,@R0
LCALLWRBYT;发送外围地址
LCALLCACK;检测外围器件的应答信号
JBF0,WRADD;如果应答不正确返回重来
INCR0
DJNZR7,WRDA
LCALLSTOP
POPACC
POPPSW
RET
;*******************************************************************
;
(2)带有内部单元地址的多字节读操作子程序RDADD
;*******************************************************************
;通用的I2C通讯子程序(多字节读操作)
;入口参数R7字节数;
;R0目标数据块首地址;R2从器件内部子地址;
;R3器件地址(写);R4器件地址(读)
;相关子程序WRBYT、STOP、CACK、STA、MNACK
;*******************************************************************
RDADD:
PUSHPSW;从PCF8563的02H单元读入7个参数
PUSHACC;存放于20H-26H单元
RDADD1:
LCALLSTA
MOVA,R3;取器件地址(写)
LCALLWRBYT;发送外围地址
LCALLCACK;检测外围器件的应答信号
JBF0,RDADD1;如果应答不正确返回重来
MOVA,R2;取内部地址
LCALLWRBYT;发送外围地址
LCALLCACK;检测外围器件的应答信号
JBF0,RDADD1;如果应答不正确返回重来
LCALLSTA
MOVA,R4;取器件地址(读)
LCALLWRBYT;发送外围地址
LCALLCACK;检测外围器件的应答信号
JBF0,RDADD1;如果应答不正确返回重来
RDN:
LCALLRDBYT
MOV@R0,A
DJNZR7,ACK
LCALLMNACK
LCALLSTOP
POPACC
POPPSW
RET
ACK:
LCALLMACK
INCR0
SJMPRDN
;(3)I2C各个信号子程序
;**********************************************************************
;启动信号子程序S
;**********************************************************************
STA:
SETBSDA;启动信号S
SETBSCL
NOP;产生4.7US延时
NOP
NOP
NOP
NOP
CLRSDA
NOP;产生4.7US延时
NOP
NOP
NOP
NOP
CLRSCL
RET
;**********************************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大连理工 单片机 课程设计 报告书
![提示](https://static.bdocx.com/images/bang_tan.gif)