基于18B20的单片机课程设计报告(含汇编程序)

更新时间:2023-07-27 18:01:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

电子温度计(基于18B20)课程设计报告

可以实现:

数码管能够显示当前的温度值(两位小数); 能够通过按键设定报警温度;

温度上限或下限时能够通过蜂鸣器报警,警线可设; 开式,华氏,摄氏温标的转化。

实验要求(略)

一.设计目的

通过课程设计使学生达到以下能力训练:调查研究、分析问题的能力;查阅中外文献的能力;计算机软件应用的能力;设计计算和绘图的能力;语言文字表达的能力。对软件的灵活运用,适时开发并创新的能力。

二、设计内容

利用数字温度传感器DS18B20设计一个电子温度计,通过数码管来实时显示测得的温度值。

基本要求: ⑴、设计实验电路 ⑵、分析实验原理 ⑶、列出实验接线表

⑷、采用汇编语言编写实验程序 ⑸、通过实验验证功能的实现 ⑹、编写课程设计说明书 三、设计方案

在单片机电路设计中,大多都是使用传感器,所以可以采用一只温度传感器

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

预计功能:(从主界面开始)

1.按下键1,可显示当前温度(整数部分),和温度上限设定值;

并且在3秒的有效时间内可用键2减小设定温度上限,键3可增加上限值。最后一次按下按键后3秒自动返回主显示界面。

2. 按下键3,可显示当前温度(整数部分),和温度下限设定值;

并且在3秒的有效时间内可用键1减小设定温度上限,键2可增加上限值。最后一次按下按键后3秒自动返回主显示界面。

3.按下键2,可实现开式,华氏,摄氏温标的循环转换。

4.温度小于下限温度警线,或是温度高于上限警线时,产生声光报警。

四、设计框图

温度计电路设计总体设计框图如图1所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用八位LED数码管以并口传送数据实现温度显示。

图1总体设计框图

五、显示电路

显示电路采用两个4位共阳LED数码管,从P1口RXD,TXD串口输出段码。

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

温度传感器设计

DS18B20是1-wire器件,1-wire单总线是Maxim全资子公司Dallas的一项专有技术,与目前多数标准串行数据通信方式,如SPI/I2C/MICROWIRE不同,它采用单根信号线,既传输时钟,又传输数据,而且数据传输是双向的。它具有节省I/O口线资源,结构简单,成本低廉,便于总线扩展和维护等诸多优点。

DS18B20的性能特点如下:

●独特的单线接口仅需要一个端口引脚进行通信;

●多个DS18B20可以并联在惟一的三线上,实现多点组网功能; ●无须外部器件;

●可通过数据线供电,电压范围为3.0~5.5V; ●零待机功耗;

●温度以9或12位数字; ●用户可定义报警设置;

●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; ●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;

DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2所示。

图2 DS18B20内部结构

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

表2 一部分温度对应值表

另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

分别说明如下:

1、初始化 单总线的所有处理均从初始化开始。初始化过程是主机通过向作为从机的DS18B20芯片发一个有时间宽度要求的初始化脉冲实现的。初始化后,才可进行读写操作。

2 、ROM操作命令 总线主机检测到DS18B20的存在 便可以发出ROM操作命令之一 这些命令表3:

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

3、存储器操作 命令如表4:

表4 存储器操作命令

六.调试结果:

四个预计功能全部实现,且实现了两位小数显示。

主程序流程图:

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

DS18B20复位子程序 度温度值子程序

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

度温度值子程序

写DS18B20命令子程序

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

外部中断口

显示上限温度

2\3 键是否按下?

获得键值

调用一次显示

是否放开?

按键子程

计数 210 次则 返回

RETI

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

电子温度计汇编程序代码(经过STC89C52上电验证)

子程序清单:

1. 2. 3. 获得原码子程序 温度数据转化子程序

中断子程序(温度上限子程序) 4. 获得显示段码子程序 5. 显示子程序

6. 18b20初始化子程序 7. 18b20读取子程序 8. 18b20写入子程序 9.

温度下限子程序

DQ BIT P2.3 FLAG1 BIT 00H SIGN BIT 01H F_SIGN BIT 02H MSB EQU 30H LSB EQU 31H INTEG EQU 32H DECIM EQU 33H SEG_S EQU 34H SEG_I3 EQU 35H SEG_I2 EQU 36H SEG_I1 EQU 37H SEG_D1 EQU 38H SEG_D2 EQU 39H SEG_O EQU 3AH SEG_C EQU 3BH LOCAT EQU 3CH T_ALARM EQU 3DH L_ALARM EQU 3EH ALARM3 EQU 41H ALARM2 EQU 42H ALARM1 EQU 43H CURERNT3 EQU 45H CURERNT2 EQU 46H CURERNT1 EQU 47H

ORG 0000H AJMP MAIN

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

ORG 000BH LJMP IT0P

ORG 0060H

MAIN: MOV SP,#77H

SETB IT0 SETB EX0

MOV DPTR,#TABLE MOV R0,#38H MOV R1,#30H CLEAR: MOV @R1,#00H INC R1

DJNZ R0,CLEAR

MOV 60H,#50H MOV 61H,#63H MOV LOCAT,#34H MOV T_ALARM,#30 MOV L_ALARM,#18 MOV INTEG,#25

LOOP: CLR EA LCALL INIT_1820 LCALL GET_TEMPER LCALL DATA_PROC

JNB P3.1,F_EN AJMP F_NOT F_EN: LCALL DISPLAY JNB P3.1,F_EN MOV A,LOCAT XCH A,60H XCH A,61H MOV LOCAT,A

F_NOT: CLR C CLR EA

MOV A,L_ALARM CJNE A,INTEG,NEXTP LJMP NEXT2 NEXTP: JNC LALARM SETB P2.4

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

LJMP NEXT2 LALARM: CLR P2.4 AJMP SAFE NEXT2: CLR C

MOV A,T_ALARM CJNE A,INTEG,NEXT AJMP ALARM NEXT: JC ALARM SETB P2.4 AJMP SAFE ALARM: CLR P2.4

SAFE: JB P3.0 ,KILL LCALL L_TEMP KILL: SETB EA

LCALL SEG_GEN LCALL DISPLAY AJMP LOOP

;*********************************** ; 上限温度报警程序(外部中断0) ; 显示40H-47H 内容

;***********************************

IT0P: PUSH LOCAT PUSH ACC PUSH PSW PUSH 00H

MOV CURERNT3,SEG_I3 MOV CURERNT2,SEG_I2 MOV CURERNT1,SEG_I1 MOV R0,#210 START: MOV B,#100 MOV A,T_ALARM DIV AB

MOVC A,@A+DPTR MOV ALARM3,A MOV A,B MOV B,#10 DIV AB

MOVC A,@A+DPTR MOV ALARM2,A

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

MOV A,B

MOVC A,@A+DPTR MOV ALARM1,A MOV LOCAT,#40H LCALL DISPLAY JNB P3.0,FUN1 JNB P3.1,FUN2 DJNZ R0,START POP 00H POP PSW POP ACC POP LOCAT RETI

FUN1: MOV R0,#210 ;等待3秒无键按下则返回主程序 INC T_ALARM STAY1: LCALL DISPLAY ;判断按键放开 JNB P3.0,STAY1 LJMP START FUN2: MOV R0,#210 DEC T_ALARM STAY2: LCALL DISPLAY JNB P3.1,STAY2 LJMP START RETI

;*************************** ; 下限温度报警程序

;*************************** L_TEMP:

WAITL: LCALL DISPLAY JNB P3.0,WAITL PUSH LOCAT

MOV CURERNT3,SEG_I3 MOV CURERNT2,SEG_I2 MOV CURERNT1,SEG_I1 MOV R0,#210 MOV LOCAT,#40H STARTL:MOV B,#100 MOV A,L_ALARM DIV AB

MOVC A,@A+DPTR MOV ALARM3,A MOV A,B MOV B,#10 DIV AB

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

MOVC A,@A+DPTR MOV ALARM2,A MOV A,B

MOVC A,@A+DPTR

MOV ALARM1,A LCALL DISPLAY JNB P3.1,FUNL1 JNB P3.2,FUNL2 DJNZ R0,STARTL LJMP ENDL

FUNL1: MOV R0,#210

INC L_ALARM STAYL1:LCALL DISPLAY JNB P3.1,STAYL1 LJMP STARTL FUNL2: MOV R0,#210 DEC L_ALARM STAYL2:LCALL DISPLAY JNB P3.2,STAYL2 LJMP STARTL ENDL: POP LOCAT CLR IE0 RET

;****************************** ;DS18b20复位初始化子程序

;**************************** INIT_1820:

SETB DQ NOP

CLR DQ

MOV R1,#3 ;546us低电平 TSR1: MOV R0,#88 DJNZ R0,$ DJNZ R1,TSR1

SETB DQ ;释放总线 NOP NOP NOP

MOV R0,#25H TSR2:

JNB DQ, TSR3;等待回应

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

DJNZ R0,TSR2 LJMP TSR4 TSR3:

SETB FLAG1 ;监测到18b20则把标志位置1 LJMP TSR5 TSR4:

CLR FLAG1 LJMP TSR6 TSR5:

MOV R0,#100 DJNZ R0,$ TSR6:

SETB DQ RET

;******************************************* ;读出转换后的温度

;******************************************* GET_TEMPER:

SETB DQ

LCALL INIT_1820 JB FLAG1, TSS2 RET TSS2:

MOV A,#0CCH LCALL WRITE_1820 MOV A,#44H

LCALL WRITE_1820 LCALL S_DELAY LCALL INIT_1820 MOV A,#0CCH LCALL WRITE_1820 MOV A,#0BEH LCALL WRITE_1820 LCALL READ_18B20 RET

;******************************************* ;写,读DS18B20的子程序

;******************************************** WRITE_1820:

MOV R2,#8 CLR C WR1:

CLR DQ MOV R3,#3

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

DJNZ R3,$ RRC A MOV DQ,C MOV R3,#33 DJNZ R3,$ SETB DQ NOP

DJNZ R2,WR1 SETB DQ RET

READ_18B20:

MOV R4,#2 MOV R1,#31H RE00: MOV R2,#8 RE01: CLR C SETB DQ NOP NOP

CLR DQ NOP NOP NOP

SETB DQ MOV R3,#9 RE10: DJNZ R3,RE10 MOV C,DQ MOV R3,#23 DJNZ R3,$ RRC A

DJNZ R2,RE01 MOV @R1,A DEC R1

DJNZ R4,RE00 RET

;***************************************************** ;数据处理子程序,判断正负,并分离转换值的整数和小数部分 ;符号位为SIGN,0为正,1为负

;整数部分存放在INTEG(32H)中,小数部分存放在DECIM(33H)中 ;***************************************************** DATA_PROC:

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

CLR C CLR SIGN MOV A ,MSB RLC A JC NEG LJMP PROC NEG:

CLR C SETB SIGN MOV A,LSB CPL A ADD A,#1 MOV LSB,A MOV A,MSB CPL A ADDC A,#0 MOV MSB,A PROC:

MOV A,LSB ANL A,#0FH MOV DECIM,A MOV A,MSB SWAP A

ANL A,#0F0H MOV INTEG,A MOV A,LSB SWAP A

ANL A ,#0FH MOV R0,INTEG ORL A,R0 MOV INTEG,A

RET

;*************************************************************** ;生成显示码子程序 ,摄氏首地址为34H,开式首地址为50H,华氏为63H ;符号位断码存放在SEG-S中,整数断码存放在SEG-I3到SEG-I1中 ;小数部分断码存放在SEG_D1(38H),SEG_D2(39H)中 .

;*************************************************************** SEG_GEN:

JB SIGN,S_NEG MOV SEG_S,#00H SJMP S_INT S_NEG:

MOV SEG_S,#40H S_INT:

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

MOV A,INTEG MOV B,#100 DIV AB MOV 58H,A

MOVC A,@A+DPTR MOV SEG_I3,A MOV A,B MOV B,#10 DIV AB MOV 59H,A MOVC A,@A+DPTR MOV SEG_I2,A MOV A,B MOV 5AH,A MOVC A,@A+DPTR ORL A,#80H MOV SEG_I1,A

MOV A,DECIM MOV B,#12 MUL AB PUSH ACC MOV A,DECIM CLR C RRC A MOV R3,A POP ACC ADD A,R3

MOV B,#2 DIV AB PUSH ACC MOV A,B

CJNE A,#01H,SW1 POP ACC AJMP ACT SW1: POP ACC INC A ACT: MOV B,#10 DIV AB MOV 5BH,A

MOVC A,@A+DPTR MOV SEG_D1,A MOV A,B

基于18b20的电子温度计课程设计,可用两位小数显示开式,华氏,摄氏温标,三个按键。可设置上限,下限报警。程序均经过上电调试。(不含硬件图,仅供参考。)

MOV 5CH,A MOVC A,@A+DPTR MOV SEG_D2,A

MOV SEG_O,#63H ;符号 ℃ MOV SEG_C,#39H

MOV A,5CH ;计算开式温标数值

AGAIN1: ADD A,#5 MOV B,#10 DIV AB MOV 68H,B ADD A,5BH ADD A,#1 MOV B,#10 DIV AB MOV 67H,B ADD A,5AH ADD A,#3 MOV B,#10 DIV AB MOV 66H,B ADD A,59H ADD A,#7 MOV B,#10 DIV AB MOV 65H,B ADD A,58H ADD A,#2 MOV B,#10 DIV AB MOV 64H,B MOV R0,#64H

MOV A,@R0 MOVC A,@A+DPTR MOV @R0,A INC R0

CJNE R0,#69H,AGAIN1 ORL 66H,#80H

MOV 69H,#06H ;得到开式段码符号K

;

本文来源:https://www.bwwdw.com/article/bdjm.html

Top