📄 多功能遥控小车的硬件软件设计程序.txt
字号:
六、使小车前进、后退、左转弯、右转弯、左滚动、右滚动的基本指令
◆ MOV P2,#11111010B ; 小车前进
LCALL K1 ; 调延时3秒子程序K1。改变延时时间长短,可改
; 变小车的前进路程。
MOV P2,#11111111B ; 小车停止前进
◆ MOV P2,#11110101B ; 小车后退
LCALL K1 ; 调延时3秒子程序K1
MOV P2,#11111111B ; 小车停止后退
◆ MOV P2,#11110110B ; 小车左转弯
LCALL K2 ; 调延时1秒子程序K2。如果小车转弯的角度大于
; 或小于90度,可调整延时时间长短实现之
MOV P2,#11111111B ; 小车停止左转弯
◆ MOV P2,#11111001B ; 小车右转弯
LCALL K2 ; 调延时1秒子程序K2
MOV P2,#11111111B ; 小车停止左转弯
◆ MOV P2,#11110110B ; 小车左滚动
LCALL K3 ; 调较长时间延时5秒子程序K3
MOV P2,#11111111B ; 小车停止左滚动
◆ MOV P2,#11111001B ; 小车右滚动
LCALL K2 ; 调较长时间延时5秒子程序K3
MOV P2,#11111111B ; 小车停止右滚动
七、完整程序清单
ORG 0000H
LJMP MAIN ; 跳到MAIN
ORG 0003H ; 外部中断0入口地址
LJMP BB ; 跳到外部中断0服务子程序首地址BB
ORG 000BH ; T0中断入口地址
LJMP CC ; 跳到T0外部中断服务子程序首地址CC
ORG 0013H ; 外部中断1入口地址
LJMP DD ; 跳到外部中断1服务子程序首地址DD
;◆ 外部中断0设置
MAIN:MOV SP,#30H ; 堆栈指针指向30H
SETB IT0 ; 设置外部中断0为下降沿触发方式
SETB EX0 ; 设置外部中断0分开关接通(中断源允许)
;◆ 外部中断1设置
SETB IT1 ; 设置设置外部中断1为下降沿触发方式
SETB EX1 ; 设置外部中断1分开关接通(中断源允许)
;◆ TO外部中断设置
MOV TMOD,#00000110B; 设置T0方式2为对外部引脚计数功能
SETB ET0 ; 设置T0分开关接通(T0中断源允许)
MOV TL0,#0FFH ; T0装满初值
MOV TH0,#0FFH
SETB TR0 ; 启动T0
;◆ 中断总允许
SETB EA ; 设置3个中断总允许
;◆ 查询哪个按键被按下
AA: JNB P1.0,Z1 ; P1.0=1,顺序执行,P1.0=0,短转移到Z1
JNB P1.1,Z2 ; P1.1=1,顺序执行,P1.1=0,短转移到Z1
JNB P1.2,Z3 ; P1.2=1,顺序执行,P1.2=0,短转移到Z1
JNB P1.3,Z4 ; P1.3=1,顺序执行,P1.3=0,短转移到Z1
JNB P1.4,Z5 ; P1.4=1,顺序执行,P1.4=0,短转移到Z1
JNB P1.5,Z6 ; P1.5=1,顺序执行,P1.5=0,短转移到Z1
SJMP AA ; 跳回AA,继续查询哪个按钮被按下
Z1:LJMP A1 ; 长转移到A1
Z2:LJMP A2 ; 长转移到A2
Z3:LJMP A3 ; 长转移到A3
Z4:LJMP A4 ; 长转移到A4
Z5:LJMP A5 ; 长转移到A5
Z6:LJMP A6 ; 长转移到A6
; 按压发射按钮① 使小车前进
A1: MOV P2,#11111010B ; 小车前进
LCALL K2 ; 延时2秒
MOV P2,#11111111B ; 停止前进
LJMP AA ; 返回AA,继续查询
; 按压发射按钮② 使小车后退
A2: MOV P2,#11110101B ; 小车后退
LCALL K2 ; 延时2秒
MOV P2,#11111111B ; 停止
LJMP AA ; 返回AA,继续查询
; 按压发射按钮③ 使小车左滚动
A3: MOV P2,#11111001B ; 小车左转弯或左滚动
LCALL K2 ; 延时2秒
LCALL K2
MOV P2,#11111111B ; 停止
LJMP AA ; 返回AA,继续查询
; 按压发射按钮④ 使小车右滚动
A4: MOV P2,#11110110B ; 小车右左转弯或右滚动
LCALL K2 ; 延时2秒
LCALL K2
MOV P2,#11111111B ; 停止
LJMP AA ; 返回AA,继续查询
; 按压发射按钮⑤ 使小车走"口"字
; 小车前进左转弯
A5: MOV P2,#11111010B ; 小车前进
LCALL K2 ; 延时2秒
MOV P2,#11111111B ; 停止前进
MOV P2,#11111001B ; 小车左转弯
LCALL K04 ; 延时0.4秒
MOV P2,#11111111B ; 停止
SJMP A5 ; 跳回A5,继续走"口"字
; 按压发射按钮⑥ 使小车走"8"字(请读者自行编写)
; 小车前进,左转弯,共4次
A6:MOV R0,#4
A7: MOV P2,#11111010B ; 小车前进
LCALL K2 ; 延时2秒
MOV P2,#11111111B ; 停止前进
MOV P2,#11111001B ; 小车左转弯
LCALL K04 ; 延时0.4秒
MOV P2,#11111111B ; 停止
DJNZ R0,A7
; 小车前进,右转弯,共4次
MOV R0,#4
A8: MOV P2,#11111010B ; 小车前进
LCALL K2 ; 延时2秒
MOV P2,#11111111B ; 停止前进
MOV P2,#11110110B ; 小车右转弯
LCALL K04 ; 延时2秒
MOV P2,#11111111B ; 停止
DJNZ R0,A8
LJMP A6 ; 跳回A5,继续走"8"字
; 中断服务子程序
; 外部中断0服务子程序
BB: MOV P2,#11110101B ; 小车后退
LCALL D04 ; 延时0.4秒
MOV P2,#11111111B ; 停止
LCALL D04 ; 延时0.4秒
MOV P2,#11110110B ; 小车右转弯
LCALL D04 ; 延时0.4秒
MOV P2,#11111111B ; 停止
LCALL D04 ; 延时0.4秒
CLR TCON.1 ; 去除开关抖动产生的再次中断
RETI ; 返回到断点
; 外部中断1服务子程序
DD: MOV P2,#11110101B ; 小车后退
LCALL D04 ; 延时0.4秒
MOV P2,#11111111B ; 停止
LCALL D04 ; 延时0.4秒
MOV P2,#11111001B ; 小车左转弯
LCALL D04 ; 延时0.4秒
MOV P2,#11111111B ; 停止
LCALL D04 ; 延时0.4秒
CLR TCON.3 ; 去除开关抖动产生的再次中断
RETI ; 返回到断点
; T0中断服务子程序
CC: MOV P2,#11110101B ; 小车后退
LCALL D04 ; 延时0.4秒
MOV P2,#11111111B ; 停止
LCALL D04 ; 延时0.4秒
MOV P2,#11111001B ; 小车左转弯
LCALL D04 ; 延时0.4秒
MOV P2,#11111111B ; 停止
LCALL D04 ; 延时0.4秒
CLR TCON.5 ; 去除开关抖动产生的再次中断
RETI ; 返回到断点
; 延时2秒子程序
K2:MOV R1,#20
B1:MOV R2,#0FFH
B2:MOV R3,#80H
B3:NOP
DJNZ R3,B3
DJNZ R2,B2
DJNZ R1,B1
RET
; 延时0.4秒子程序
K04:MOV R4,#3
E1:MOV R5,#0FFH
E2:MOV R5,#80H
E3:NOP
DJNZ R6,E3
DJNZ R5,E2
DJNZ R4,E1
RET
; 延时0.4秒子程序
D04:MOV R1,#3
D1:MOV R2,#0FFH
D2:MOV R3,#80H
D3:NOP
DJNZ R3,D3
DJNZ R2,D2
DJNZ R1,D1
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -