📄 超声波汽车倒车测距仪.txt
字号:
ORG 0000H
LJMP MAIN ;复位转主程序
ORG 0003H
LJMP INT0 ;中断
ORG 001BH
LJMP IT1 ;T1中断
ORG 0100H
MAIN:MOV SP,#60H ;置堆栈指针
MOV P1,#0FFH ;停显示
CLR P3.4 ;不发射
SET P3.6 ;灯亮
SET P3.5 ;发嘟声
MOV 40H,#7EH ;显示符号“— — —”单元
MOV 41H,#7EH
MOV 42H,#7EH
MOV 32H,#160 ;置显示循环数
LCALL DIR ;调用显示子程序
MOV IP,#00000001B ;置为高优先级
MOV TMOD,#00010001B ;置T0、T1定时器方式1
MOV TH1,#9EH ;置T1时间常数25ms。用于
控制嘟声方波脉宽
MOV TL1,#58H
SETB TR1 ;T1运行
MOV IE,#10001001B ;T1开中
MOV 20H,#00H ;各标志位清零
MOV 21H,#00H
MOV 22H,#00H
MOV 23H,#00H
MOV 44H,#FFH ;置嘟声方波初值
255*25ms=6.375s
MOV 45H,#04H ;置闪烁间隙时间
4*25ms=0.1s
MOV R2,#04H ;置信号计数器初值
TLOOP:MOV TH0,#00H ;T0值清零
MOV TL0,#00H
SETB P3.4 ;开始发射40KHZ超声波
SETB TR0 ;启动T0,开始计时
LCALL DELAY ;延时1ms。即发射1ms
CLR P3.4 ;停发射
MOV 32H,#20 ;置显示环数
LCALL DIR ;显示3ms*20=60ms
LCALL WORK ;信息与数据处理
SJMP TLOOP ;循环
附录4 信号处理程序
WORK:JBC 01H,WORK1 ;有回波信号,转存信号
DJNZ R3,GORET ;无回波信号,判断连续无回波信号次数
MOV R3,#04H ;连续无回波计数器恢复初值
LCALL FLASH ;调用闪烁显示子程序
GORET:RET
WORK1:MOV R3,#04H ;有回波,连续无回波计数器恢复初值
DJNZ R2,WORK2 ;未存满4个信号,转存信号
MOV R2,#04H ;存满4个信号,信号计数器恢复初值
MOV 56H,TL0 ;存第4个信号
MOV 57H,TH0
LCALL SORT ;调用信号排序子程序
LCALL RIGHT ;调用筛选正确信号子程序
LCALL TRAS ;调用更换显示子程序
LCALL TONE ;调用计算嘟声方波脉宽子程序
RET
WORK2:JBC 11H,WORK21 ;1#信号标志,转存第1个信号
JBC 12H,WORK22 ;2#信号标志,转存第2个信号
JBC 13H,WORK23 ;3#信号标志,转存第3个信号
RET
WORK21:MOV 50H,TL0 ;存第1个信号
MOV 51H,TH0
RET
WORK22:MOV 52H,TL0 ;存第2个信号
MOV 53H, TH0
RET
WORK23:MOV 54H,TL0 ;存第3个信号
MOV 55H,TH0
RET
由于涉及篇幅,上述WORK中调用的几个子程序不在罗列。
附录5 内RAM分配:
30H:延迟子程序外循环数 31H:延迟子程序内循环数
32H:扫描显示循环数 40H:个位显示符寄存器
41H:十位显示符寄存器 42H:百位显示符寄存器
44H:嘟声方波脉宽值 45H:闪烁显示间隙时间
50H:1#信号低8位 51H:1#信号高8位
52H:2#信号低8位 53H:3#信号高8位
54H:3#信号低8位 55H:5#信号高8位
56H:4#信号低8位 57H:7#信号高8位
R2:信号计数器 R3:连续无回波计数器
标志位:
P3.4:40KHZ超声波发射控制位 P3.5:嘟声控制位
P3.6:STOP灯控制位 11H:1#信号存储标志
12H:2#信号存储标志 13H:3#信号存储标志
01H:回波标志,01H=1有回波,01H=0无回波
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -