Micro:bit官方案例02:显示实时温度

Micro:bit官方案例02:显示实时温度,第1张

显示实时温度(Temperature Activity)这个案例主要滚升侍原理就是利用Micro:bit内置的温度传感器,当笑橡检测到摇动手势的时候,显示当前的实时温度。所以的 *** 作上非常简单,直接增加一个振动的事件侦听,当检测到振动触发显示数字的功能即可。不过需要首先在变量中创建一个变量来存储温度值,在这个案例中是Temp。

本文档由浙大吵江省阮高峰名师工作室创建并维护,地址: http://gzs.ilester.net 。

这是关于DS18B20的读写程序,数据脚P2.2,晶振12MHZ

温度传感器18B20汇编程序,采用器件默认的12位转化,最大转化时间750微秒

可以将检测到的温度直接显示到AT89C51开发实验板的两个数码管上困迅

显示温度00到99度,很准确哦~~无需校正!

ORG 0000H 单片机内存分配申明!

TEMPER_L EQU 29H用于保存读出温度的低8位

TEMPER_H EQU 28H用于保存读出温度的高8位

FLAG1 EQU 38H是否检测到DS18B20标志位

a_bit equ 20h 数码管个位数存放内存粗州位置

b_bit equ 21h 数码管十位数存放内存位置

TEMP_TH EQU

MAIN:

LCALL GET_TEMPER调用读温度子程序 ,显示范围00到99度,显示精度为1度

因为12位转化时每一位的精度为0.0625度,我们不要求显示小数所以可以抛弃29H的低4位

将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度

MOV A,29H

MOV C,40H将28H中的最低位移入C

RRC A

MOV C,41H

RRC A

MOV C,42H

RRC A

MOV C,43H

RRC A

MOV 29H,A

LCALL DISPLAY 调用数码管显示子程序

CPL P1.0

AJMP MAIN

这是DS18B20复位初始化子程序

INIT_1820:

SETB P3.5

NOP

CLR P3.5 主机发出延时537微秒的复位低脉冲

MOV R1,#3

TSR1:MOV R0,#107

DJNZ R0,$

DJNZ R1,TSR1

SETB P3.5 然后拉高数据线

NOP

NOP

NOP

MOV R0,#25H

TSR2:

JNB P3.5,TSR3 等待DS18B20回应

DJNZ R0,TSR2

LJMP TSR4 延时

TSR3:

SETB FLAG1 置标志位,表示DS1820存在

CLR P1.7 检查到DS18B20就点亮P1.7LED

LJMP TSR5

TSR4:

CLR FLAG1 清标志位,表示DS1820不存在

CLR P1.1 点亮P1。1脚LED表示温度传感器通信失败

LJMP TSR7

TSR5:

MOV R0,#117

TSR6:

DJNZ R0,TSR6 时序要求延时一段时间

TSR7:

SETB P3.5

RET

读出转换后的温度值

GET_TEMPER:

SETB P3.5

LCALL INIT_1820 先复位DS18B20

JB FLAG1,TSS2

CLR P1.2

RET 判断DS1820是否存在?若DS18B20不存在则返回

TSS2:

CLR P1.3 DS18B20已经被检测到!!!!!!!!!!!!!!!!!!

MOV A,#0CCH

LCALL WRITE_1820

MOV A,#44H 发出温度转换命令

LCALL WRITE_1820

这里通过调用显示子程序实现延时一段时间,等待AD转换汪凳此结束,12位的话750微秒

LCALL DISPLAY

LCALL INIT_1820 准备读温度前先复位

MOV A,#0CCH 跳过ROM匹配

LCALL WRITE_1820

MOV A,#0BEH 发出读温度命令

LCALL WRITE_1820

LCALL READ_18200将读出的温度数据保存到35H/36H

CLR P1.4

RET

写DS18B20的子程序(有具体的时序要求)

WRITE_1820:

MOV R2,#8一共8位数据

CLR C

WR1:

CLR P3.5

MOV R3,#6

DJNZ R3,$

RRC A

MOV P3.5,C

MOV R3,#23

DJNZ R3,$

SETB P3.5

NOP

DJNZ R2,WR1

SETB P3.5

RET

读DS18B20的程序,从DS18B20中读出两个字节的温度数据

READ_18200:

MOV R4,#2 将温度高位和低位从DS18B20中读出

MOV R1,#29H 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)

RE00:

MOV R2,#8数据一共有8位

RE01:

CLR C

SETB P3.5

NOP

NOP

CLR P3.5

NOP

NOP

NOP

SETB P3.5

MOV R3,#9

RE10:

DJNZ R3,RE10

MOV C,P3.5

MOV R3,#23

RE20:

DJNZ R3,RE20

RRC A

DJNZ R2,RE01

MOV @R1,A

DEC R1

DJNZ R4,RE00

RET

显示子程序

display: mov a,29H将29H中的十六进制数转换成10进制

mov b,#10 10进制/10=10进制

div ab

mov b_bit,a 十位在a

mov a_bit,b 个位在b

mov dptr,#numtab 指定查表启始地址

mov r0,#4

dpl1: mov r1,#250 显示1000次

dplop: mov a,a_bit 取个位数

MOVC A,@A+DPTR 查个位数的7段代码

mov p1,a 送出个位的7段代码

setb p2.0 开个位显示

acall d1ms 显示1ms

clr p2.0

mov a,b_bit 取十位数

MOVC A,@A+DPTR 查十位数的7段代码

mov p1,a 送出十位的7段代码

setb p2.1 开十位显示

acall d1ms 显示1ms

clr p2.1

djnz r1,dplop 100次没完循环

djnz r0,dpl1 4个100次没完循环

ret

1MS延时(按12MHZ算)

D1MS: MOV R7,#80

DJNZ R7,$

RET

numtab:数码管共阳极0~9代码

DB 0C0H,0F9H,0A4H,0B0H,99H, 92H,82H,0F8H,80H,90H

end


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12557978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存