#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
extern void cs_t(void);
extern void delay(uint);
extern void display(uchar *);
data uchar testok;
/*主程序*/
void main(void)
{
data uchar dispram[5];
data uint i;
data ulong time;
P0=0xff;
P2=0xff;
TMOD=0x11;
IE=0x80;
while(1)
{
cs_t();
delay(1);
testok=0;
EX0=1;
ET0=1;
while(! testok) display(dispram);
if(1==testok)
{
time=TH0;
time=(time<<8) | TL0;
time*=172;
time/=10000;
dispram[0]=(uchar)(time%10);
time/=10;
dispram[1]=(uchar)(time%10);
time/=10;
dispram[2]=(uchar)(time%10);
dispram[3]=(uchar)(time/10);
if(0==dispram[3])dispram[3]=17;
}else
{
dispram[0]=16;
dispram[1]=16;
dispram[2]=16;
dispram[3]=16;
}
for(i=0;i<300;i++)display(dispram);
}
}
/*超声波接收程序(外中断0)*/
void cs_r(void) interrupt 0
{
TR0=0;
ET0=0;
EX0=0;
testok=1;
}
/*超时清除程序(内中断0)*/
void overtime(void) interrupt 1
{
EX0=0;
TR0=0;
ET0=0;
testok=2;
}
/*文件2:cs_t.asm*/
/*超声波发生子程序*/
NAME; CS_T
;?PR?CS_T?CS_T SEGMENT CODE
PUBLIC CS_T
RSEG ?PR?CS_T?CS_T
CS_T: PUSH ACC
MOV TH0,#00H
MOV TL0,#00H
MOV A,#4D
SETB TR0
CS_T1: CPL P1.0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ ACC,CS_T1
POP ACC
RET
END
/*文件3:display.asm*/
/*4位共阳LED动态扫描显示程序*/
NAME DISPLAY
?PR?_DISPLAY?DISPLAY SEGMENT CODE
?CO?_DISPLAY?DISPLAY SEGMENT DATA
EXTRN CODE(_DELAY)
PUBLIC _DISPLAY
RSEG ?CO?_DISPLAY?DISPLAY
?_DISPLAY?BYTE:
DISPBIT: DS 1
DISPNUM: DS 1
RSEG ?PR?_DISPLAY?DISPLAY
_DISPLAY: PUSH ACC
PUSH DPH
PUSH DPL
PUSH PSW
INC DISPNUM
MOV A,DISPNUM
CJNE A,#4D,DISP1
DISP1: JC DISP2
MOV DISPNUM,#00H
MOV DISPBIT,#0FEH
DISP2: MOV A,R1
ADD A,DISPNUM
MOV R0,A
MOV A,@R0
MOV DPTR,#DISPTABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,DISPNUM
CJNE A,#2D,DISP3
CLR P0.7
DISP3: MOV P2,DISPBIT
MOV R6,#00H
MOV R7,#0AH
LCALL _DELAY
MOV P0,#0FFH
MOV P2,#0FFH
MOV A,DISPBIT
RL A
MOV DISPBIT,A
POP PSW
POP DPL
POP DPH
POP ACC
RET
DISPTABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0BFH,0FFH
END
/*文件4:delay.asm*/
/*延时100个机器周期*/
NAME DELAY
?PR?_DELAY?DELAY SEGMENT CODE
PUBLIC _DELAY
RSEG ?PR?_DELAY?DELAY
_DELAY: PUSH ACC ;2
MOV A,R7 ;1
JZ DELA1 ;2
INC R6 ;1
DELA1: MOV R5,#50D ;2
DJNZ R5,$ ;2
DJNZ R7,DELA1 ;2
DJNZ R6,DELA1 ;2
POP ACC ;2
RET ;2
END
chaoshengbo.rar_chaoshengbo_超声波测距
版权申诉
10 浏览量
2022-09-23
10:15:37
上传
评论
收藏 10KB RAR 举报
寒泊
- 粉丝: 75
- 资源: 1万+
最新资源
- 写入三菱plcD位寄存器的值
- 确保你的操作系统符合Docker的要求 Docker支持的操作系统包括Ubuntu、Debian、CentOS、Fedora和m
- 确保你的操作系统符合Docker的要求 Docker支持的操作系统包括Ubuntu、Debian、CentOS、Fedora和m
- HDMI 虚拟软件欺骗器
- 确保你的操作系统符合Docker的要求 Docker支持的操作系统包括Ubuntu、Debian、CentOS、Fedora和m
- 读取三菱PLC D位寄存器
- HDMI edid 编辑工具
- 要在你的计算机上安装Docker,你可以按照以下步骤进行:
- 要在你的计算机上安装Docker,你可以按照以下步骤进行:
- html加JavaScript进行表单验证
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈