如上图所示,发射超声波时,需按下 P0.0 口的按键,单片机采用扫描 P0.0 是否有低电
平的方式决定是否要测距,这样以来,需按下按键较长时间,去等待程序执行到这一快,才
能相应测距要求。
改进方法:将按键接到 P3.3,即外中断 1,通过中断方式可以随时相应是否要进行测距。
五、主要程序
;这是关于单个 DS18B20 的测温程序,数据脚为 P1.2,晶振是 11.059MHZ
;温度传感器 18B20 采用器件默认的 12 位转化,最大转化时间要 750 毫秒
;用 1602 液晶屏显示,显示温度从-55.0 到 127.9 度,分辨率 0.1 度,精度 0.05 度
;内存分配声明
TEMPER_L EQU 29H;用于保存读出温度的低字节
TEMPER_H EQU 28H;用于保存读出温度的高字节
T_DF EQU 27H ;FORMAT 后的小数部分(decimal fraction),半
;字节的温度小数(存在低四位)
FLAG1 BIT 50H;位地址 50H 是字节 2AH 的最低位,用作是否检
;测到 DS18B20 的标志位
A_BIT EQU 20h ;液晶十位数存放内存位置
B_BIT EQU 21h ;液晶个位数存放内存位置
C_BIT EQU 22H ;个位小数
D_BIT EQU 23H ;十位小数
S_BIT EQU 24H ;正负符号
VOUT EQU P1.0;超声波脉冲输出口
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP PINT0
ORG 000BH
LJMP INTT0
ORG 0013H
RETI
ORG 01BH
LJMP INTT1
ORG 0023H
RETI
ORG 002BH
RETI
ORG 0030H
LJMP START
ORG 0100H ;测温程序
MAIN: LCALL T_CONVERSION;调用读温度子程序
LCALL T_FORMAT;将读出的 2 字节温度格式化
LCALL DISPLAY0;调用液晶显示子程序
LCALL D1MS;延时 1M 秒后再测
JNB P0.0,START
SJMP MAIN
;超声测距子程序
START:MOV SP,#4FH
MOV R0,#40H ;40h~43h 为显示数据存放单元
MOV R7,#0BH
CLEARDISP:MOV @R0,#00H
INC R0