?? dc motor1.asm
字號:
;4*4行列鍵盤及8位LED數(shù)碼管程序,LED采用2片164譯碼,占用3個I/O口,鍵盤采用線掃描法。
;IT0用于控制脈沖頻率;IT1用于控制占空比
;TH0,TL0:(65535-X)*2*10(-6)=T (12MHz) 默認為f=20Hz ,T=50ms ,TH0=0x9e,TL0=0x57
;共分了10個擋,由0~9十個數(shù)字鍵控制,默認占空比為10%,即高電平時間為50ms/10=5ms,TH1=0xf6,TL1=0x3b
LED EQU 30H ;30H~37H為顯存
KEY EQU 38H ;KEY為鍵號
DANG EQU 39H ;
R_NH EQU 3AH ;
R_NL EQU 3BH
SPEED EQU 32H
R_E EQU 20H.0 ;
ORG 0000H
LJMP START
ORG 000BH
AJMP IT0R
ORG 001BH
AJMP IT1R
IT0R:
CLR TR0
MOV TH0,#9EH
MOV TL0,#57H
SETB P2.3
SETB TR0
SETB TR1
RETI
IT1R:
CLR TR1
MOV TH1,R_NH
MOV TL1,R_NL
CLR P2.3
RETI
START: ; 程序初始化
MOV SP,#60H
CLR R_E
CLR P2.0
CLR P2.1
CLR P2.3
MOV R0,#LED ;使8個LED處于全滅狀態(tài)(無數(shù)據(jù))
MOV R1,#8
MOV A,#0FFH
START1:
MOV @R0,A
INC R0
DJNZ R1,START1
MOV R_NH,#0F6H
MOV R_NL,#3BH
MOV TMOD,#11H
MOV TH0,#9EH
MOV TL0,#57H
MOV TH1,#0F6H
MOV TL1,#3BH
MOV DANG,#1
MOV 32H,#0
MOV 33H,#0
MOV 34H,#0
MOV 35H,#0
MOV 36H,#0
SETB ET0
SETB ET1
SETB EA
MAIN:
MOV P1,#0F0H ;鍵盤初始化
ACALL CHECK ;檢測是否有鍵按下
JNZ WAIT_KEY ;若有鍵,則進行去抖處理
ACALL DISP ;調(diào)用顯示子程序
SJMP MAIN
WAIT_KEY:
ACALL DISP ;去抖處理
ACALL DELAY
CLR A
ACALL CHECK
JNZ FINDKEY ;若有鍵按下,則轉(zhuǎn)入計算鍵號
SJMP MAIN ;
CHECK:
MOV A,P1 ;按鍵檢測
CPL A
ANL A,#0F0H
SWAP A
RET
FINDKEY: ;計算鍵號
MOV R0,#00H
CLR C
CR1:
RRC A
INC R0
JNC CR1
DEC R0 ;得出第幾行
MOV A,R0
MOV B,#04
MUL AB
MOV R1,A ;得出行號
MOV P1,#0FEH ;利用線掃描法求列號
ACALL CHECK
JNZ K1
MOV P1,#0FDH
ACALL CHECK
JNZ K2
MOV P1,#0FBH
ACALL CHECK
JNZ K3
MOV P1,#0F7H
ACALL CHECK
JNZ K4
AJMP MAIN
K1:
MOV A,#00H ;計算列號
AJMP KEND
K2:
MOV A,#01H
AJMP KEND
K3:
MOV A,#02H
AJMP KEND
K4:
MOV A,#03H
KEND:
ADD A,R1
MOV KEY,A ;得出鍵號,放入KEY
ACALL INIT_KEY
K15: ;根據(jù)鍵號轉(zhuǎn)入對應的處理程序
CJNE A,#15,K14
AJMP FUN15
K14:
CJNE A,#14,K13
AJMP FUN14
K13:
CJNE A,#13,K12
AJMP FUN13
K12:
CJNE A,#12,K11
AJMP FUN12
K11:
CJNE A,#11,K10
AJMP FUN11
K10:
CJNE A,#10,K09
AJMP FUN10
K09:
CJNE A,#9,K08
AJMP FUN9
K08: ACALL KEY_NUM
AJMP WAIT_KEY_UP
FUN15:
NOP
AJMP WAIT_KEY_UP
FUN14:
NOP
AJMP WAIT_KEY_UP
FUN13:
DEC R_NL
MOV A,R_NL
CJNE A,#0FFH,A1
DEC R_NH
A1:MOV A,R_NH
CJNE A,#0,A2
MOV A,R_NL
CJNE A,#0,A2
CLR TR0
CLR TR1
CLR P2.3
CLR R_E
A2:ACALL GETSPEED
AJMP WAIT_KEY_UP
FUN12:
INC R_NL
MOV A,R_NL
CJNE A,#0,B1
INC R_NH
B1:MOV A,R_NH
CJNE A,#9EH,B2
MOV A,R_NL
CJNE A,#57H,B2
MOV R_NH,#9EH
MOV R_NL,#57H
B2:ACALL GETSPEED
AJMP WAIT_KEY_UP
FUN11:
NOP
AJMP WAIT_KEY_UP
FUN10:
JB R_E,C1
SETB TR0
SETB TR1
SETB R_E
MOV A,DANG
CJNE A,#0AH,C2
MOV DANG,#1
C2:ACALL GETSPEED
AJMP WAIT_KEY_UP
C1:CLR R_E
CLR TR1
CLR TR0
CLR P2.3
MOV LED,#0FH
MOV SPEED,#0
MOV SPEED+1,#0
MOV SPEED+2,#0
MOV SPEED+3,#0
MOV SPEED+4,#0
AJMP WAIT_KEY_UP
FUN9:
CLR TR1
CLR TR0
SETB R_E
SETB P2.3
MOV DANG,#0AH
MOV SPEED,#0FH
MOV SPEED+1,#0FH
MOV SPEED+2,#0FH
MOV SPEED+3,#0FH
MOV SPEED+4,#0FH
AJMP WAIT_KEY_UP
KEY_NUM:
MOV A,KEY
MOV DANG,A
INC DANG
PUSH A
MOV DPTR,#SPEEDH
MOVC A,@A+DPTR
MOV R_NH,A
POP A
MOV DPTR,#SPEEDL
MOVC A,@A+DPTR
MOV R_NL,A
ACALL GETSPEED
AJMP WAIT_KEY_UP
INIT_KEY:
RET
WAIT_KEY_UP: ;等待鍵起
ACALL DISP
ACALL CHECK ;不斷調(diào)用DISP,直到鍵起
JZ COMBACK
SJMP WAIT_KEY_UP
COMBACK:AJMP MAIN
DISP1:
MOV LED,#0FH
AJMP DIS
DISP:
JNB R_E,DISP1
MOV LED,DANG ;顯示子程序
DIS:MOV R1,#00H
MOV R2,#08H
MOV R5,#7FH
LOOP:MOV R0,#LED ;動態(tài)顯示LED
MOV A,R0
ADD A,R1
MOV R0,A
MOV A,@R0
ACALL SENDDATA
MOV A,R5
RR A
MOV R5,A
INC R1
ACALL DELAY
DJNZ R2,LOOP
CLR P2.2
SETB P2.2
RET
DELAY:MOV R6,#10H ;延時
DELAY1:
MOV R7,#1FH
DJNZ R7,$
DJNZ R6,DELAY1
RET
SENDDATA:
MOV DPTR,#LEDCODE
MOVC A,@A+DPTR
CJNE R1,#03,S1
ORL A,#80H
S1:MOV B,R5
SENDDATA1:
MOV R3,#08
SEND1:RRC A
MOV P2.2,C
PUSH A
MOV A,B
RRC A
MOV P2.1,C
MOV B,A
POP A
CPL P2.0
CPL P2.0
DJNZ R3,SEND1
RET
GETSPEED:
CLR C
MOV R7,R_NL
MOV R6,R_NH
MOV A,#0FFH
SUBB A,R6
MOV R6,A
MOV A,#0FFH
SUBB A,R7
MOV R7,A
MOV B,#2
MUL AB
MOV R7,A
MOV A,R6
PUSH B
MOV B,#2
MUL AB
POP B
ADD A,B
MOV R6,A
CLR C
MOV B,#16
CLR A
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H
HB3:
MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A
DJNZ R2,HB3
MOV A,R5
ANL A,#0FH
MOV SPEED+4,A
MOV A,R5
ANL A,#0F0H
SWAP A
MOV SPEED+3,A
MOV A,R4
ANL A,#0FH
MOV SPEED+2,A
MOV A,R4
ANL A,#0F0H
SWAP A
MOV SPEED+1,A
MOV SPEED,R3
RET
LEDCODE:
DB 3FH
DB 06H,5BH,4FH
DB 66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H
SPEEDH:
DB 0F6H,0ECH,0E2H,0D8H,0CFH,0C5H,0BBH,0B1H,0A8H,9EH
SPEEDL:
DB 3BH,77H,0B3H,0EFH,2BH,67H,0A3H,0DFH,1BH,57H
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -