18B20数字温度显示系统.docx
《18B20数字温度显示系统.docx》由会员分享,可在线阅读,更多相关《18B20数字温度显示系统.docx(8页珍藏版)》请在冰豆网上搜索。
18B20数字温度显示系统
1.1系统简介
4.3ISP引脚连接
端口按键判断
红外线遥控
555硬件振荡器
1.2模块接口定义
5.1仿真概述
矩阵按键识别技术
汉字显示屏
PS2键盘实验
2.1软件安装
5.2KEIL软件指南
74LS14反向器
1602液晶显示屏
SD卡实验
2.2软件界面介绍
51引脚说明
74LS138译码器
8155试验
485通信实验
2.3软件操作
八路跑马灯
74LS164串入并出
24C02储存
DS1302实时时钟
3.1USB驱动安装
继电器控制
74LS165并入串出
步进电机
产生hex文件
3.2 特别usb安装
8路拨动开关
dac0832应用
93c46演示
常见问题解答
4.1ISP介绍
数码管静态扫描
模拟/数字转换器
串行双向通信
系统配置指南
4.2下载头之插头定义
数码管动态扫描
小喇叭警报器
18B20温度显示
购买方式
实验2218B20数字温度显示系统
DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃。
主机控制DS18B20完成温度转换必须经过三个步骤:
初始化、ROM操作指令、存储器操作指令。
必须先启动DS18B20开始转换,再读出温度转换值。
本程序仅挂接一个芯片,使用默认的12位转换精度,外接供电电源,读取的温度值高位字节送WDMSB单元,低位字节送WDLSB单元,再按照温度值字节的表示格式及其符号位,经过简单的变换即可得到实际温度值.
相关原理:
18B20封装引脚:
程序运行的照片:
接线方法:
1、用一根单条数据线把18B20的JP39接到CPU部份的JP53(P3口)的P3.0
2、用一条4PIN的排线,把JP19接到P0口的JP51的P0.0,P0.1,P0.2,0.3四个端口。
(即插入P0口的上半部份)。
3、用一条8PIN的排线。
把数码管译码部份的输出端JP88,接到数码管部份的数据口JP5
4、用一条4PIN的排线,把JP22接到P0口的JP51的P0.4,P0.5,P0.6,07四个端口。
(即插入P0口的下半部份)。
5、用一条8PIN的排线。
把38译码部份的输出端JP25,接到数码管部份的显示位口JP8。
在本系统中,为了简化程序,采用了74LS47(数码管译码)74LS138(三八译码)。
即P0口的P0.0,P0.1,P0.2,P0.3四个端口接到74LS47进行硬件数码管译码,然后输出到数码管部分的数据口JP5。
P0.4,P0.5,P.0.6三个端口接到74LS138进行38译码,然后输出到数码管的位控制JP8.
系统综合原理图:
汇编语言参考程序:
;定时显示子程序,采用循环扫描方式
;显示缓冲区40H~47H
ORG0080H
TIMER0:
MOVP0,40H;最后一位值送p0
ORLP0,#70H;点亮最后一位
CALLT1MS
MOVP0,41H
ORLP0,#60H
CALLT1MS
MOVP0,42H
ORLP0,#50H
CALLT1MS
MOVP0,43H
ORLP0,#40H
MOVTH0,#LOW(65536-10000);定时器10MS中断
MOVTL0,#HIGH(65536-10000)
RETI
T1MS:
movr5,#00h;延时子程序
tt:
movr6,#9
djnzr6,$
djnzr5,tt
ret
;*********************************************************
;主程序:
MAIN:
MOVSP,#60H
MOVP2,#0FFH
MOVR2,#8
MOVR0,#40H;
OVER:
MOV@R0,#00H
INCR0
DJNZR2,OVER
MOVTMOD,#01H
MOVTH0,#LOW(65536-10000)
MOVTL0,#HIGH(65536-10000)
SETBEA
SETBET0
SETBTR0
LOOP:
LCALLDSWD;调用读出DS18B20温度程序
SJMPLOOP;读出DS18B20温度程序
DSWD:
CLREA
LCALLRST
JNBF0,KEND;如果没有应答,返回主程序
MOVR0,#0CCH
LCALLSEND_BYTE;跳过ROM匹配
MOVR0,#44H;发出温度转换命令
LCALLSEND_BYTE
SETBEA
MOVP1,#00001111B
MOV48H,#1;廷时75ms以上准备读
SS2:
MOV49H,#255
SS1:
MOV4AH,#255
SS0:
DJNZ4AH,SS0
DJNZ49H,SS1
DJNZ48H,SS2
MOVP1,#11111100B
CLREA
LCALLRST
JNBF0,KEND
MOVR0,#0CCH;跳过ROM匹配
LCALLSEND_BYTE
MOVR0,#0BEH;发出读温度命令
LCALLSEND_BYTE
LCALLREAD_BYTE
MOVWDLSB,A
LCALLREAD_BYTE
MOVWDMSB,A
LCALLTRANS12
KEND:
movp1,#01010101b
SETBEA
RET
;**********************************************************
;温度转换程序:
精确到:
0.06;
TRANS12:
MOVA,30H
ANLA,#0F0H
MOV3AH,A
MOVA,31H
ANLA,#0FH
ORLA,3AH
SWAPA
MOVB,#10
DIVAB
MOV43H,A
MOV42H,B;
MOVDPTR,#TABB
MOVA,30H
ANLA,#0FH
MOVB,#2
MULAB
MOVCA,@A+DPTR
MOV41H,A
MOVA,30H
ANLA,#0FH
MOVB,#2
MULAB
INCA
MOVCA,@A+DPTR
MOV40H,A
RET
TABB:
DB0,0,0,6,1,2,1,8,2,5,3,1,3,7,4,3,5,0
DB5,6,6,2,6,8,7,5,8,1,8,7,9,3
;*************************************************
SEND_BYTE:
;发送一个字节程序
MOVA,R0
MOVR5,#8
SEN3:
CLRC
RRCA
JCSEN1
LCALLWRITE_0
SJMPSEN2
SEN1:
LCALLWRITE_1
SEN2:
DJNZR5,SEN3;循环8次,写一个字节
RET
READ_BYTE:
;读一个字节程序
MOVR5,#8
READ1:
LCALLREAD
RRCA
DJNZR5,READ1;循环8次,读一个字节
MOVR0,A
RET
;复位程序,如果复位置位F0,没有就复位F0
RST:
SETBDAT
NOP
NOP
CLRDAT
MOVR6,#250;主机发复位脉冲持续3μs×200=600μs
DJNZR6,$
MOVR6,#50
DJNZR6,$
SETBDAT;主机释放总线,口线改为输入
MOVR6,#15
DJNZR6,$
CALLCHCK;调用应答检查程序
MOVR6,#60
DJNZR6,$
SETBDAT
RET
CHCK:
MOVC,DAT
JCRST0
SETBF0;检测到信号,置位F0
SJMPCHCK0
RST0:
CLRF0;未准备好F0复位
CHCK0:
RET
WRITE_0:
;写0
CLRDAT
MOVR6,#30
DJNZR6,$
SETBDAT
RET
WRITE_1:
CLRDAT;写1
NOP
NOP
NOP
NOP
NOP
SETBDAT
MOVR6,#30
DJNZR6,$
RET
;读一位数据程序
READ:
SETBDAT;先复位至少1US产生读起始信号
NOP
NOP
CLRDAT
NOP
NOP
SETBDAT;置位DAT准备接收数据
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOVC,DAT
MOVR6,#23
DJNZR6,$
RET
END