?? 多功能遙控小車的硬件軟件設計程序.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 + -