?? 國(guó)旗升降控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).txt
INC R7
INC R7
INC R7
MOV A,R2
JNB ACC.3,KND
RL A
MOV R2,A
AJMP LK4
KND: AJMP KEY1 ;無(wú)鍵按下一直掃描
;---------------------------------------
;---------------------------------------
KS1: MOV DPTR,#A8255 ;鍵盤(pán)全掃描
MOV A,#00H
MOVX @DPTR,A
INC DPTR
INC DPTR
MOVX A,@DPTR
CPL A
ANL A,#0FFH
NOP
NOP
RET
;----------------------------------
DIS8SHAN: ;開(kāi)機(jī)自檢 8閃現(xiàn)3次
MOV R0,#03
LP2: MOV 78H,#08H
MOV 79H,#08H
MOV 7AH,#08H
MOV 7bH,#08H
MOV 7CH,#08H
MOV 7DH,#08H
MOV 7EH,#08H
MOV 7FH,#08H
LCALL DIS
LCALL DIS
LCALL DIS
LCALL DIS
LCALL DISLED
DJNZ R0,LP2
RET
;-------------------------------------------------------------
DIS: SETB RS1 ;顯示子程序
CLR RS0
MOV R0,#78H
DS0: MOV R3, #0FEH
MOV A,R3
DS1:
MOV DPTR,#0FF7CH
MOVX @DPTR,A
INC DPTR
ADD A,#1FH
MOVC A,@A+PC
MOVX @DPTR,A
NOP
NOP
ACALL DL1
;NOP
;NOP
INC R0
MOV A,R3
NOP
JNB ACC.7,LD1
NOP
RL A
MOV R3,A
;NOP
;NOP
AJMP DS1
;NOP
;NOP
AJMP MAIN
LD1: CLR RS1
MOV MTD,#10H
LCALL WRE2PROM
RET
NOP
NOP
AJMP MAIN
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH ;0,1,2,3,4,5,6,7,8
DB 6FH,77H,7CH,39H,5EH,79H,71H,1EH,31H,00H,3EH ;9,A,B,C,D,E,F,J,R,滅,U
DL1: MOV R7,#04H
DL: MOV R6,#0FFH
DL0: DJNZ R6,DL0
DJNZ R7,DL
NOP
NOP
RET
NOP
NOP
LJMP MAIN
DISLED:MOV 78H,#12H ;8位滅顯
MOV 79H,#12H
MOV 7bH,#12H
MOV 7CH,#12H
MOV 7DH,#12H
MOV 7EH,#12H
MOV 7FH,#12H
LCALL DIS
RET
DELAY: MOV R1,#03H ;延時(shí)子程序
DELAY2:
PUSH 0 ;保存現(xiàn)場(chǎng)
PUSH 1
MOV 0,#0H
DELAY1:
MOV 1,#0H
DJNZ 1,$
DJNZ 0,DELAY1
POP 1 ;恢復(fù)現(xiàn)場(chǎng)
POP 0
DJNZ R1,DELAY2
RET
;---------------------------------------
;I2C總線(xiàn)使用軟件包
;---------------------------------------
WRE2PROM:
PUSH DPH
PUSH DPL
PUSH ACC
MOV SLA,#SLAW
MOV NUMBYT,#04H
LCALL WRNBYT
POP ACC
POP DPL
POP DPH
RET;---------------------------------------
RDE2PROM:
PUSH DPH
PUSH DPL
PUSH ACC
MOV SLA,#SLAW
MOV NUMBYT,#1
LCALL WRNBYT
MOV SLA,#SLAR
MOV NUMBYT,#3
LCALL RDNBYT
POP ACC
POP DPL
POP DPH
RET
STA: SETB VSDA ;啟動(dòng)
SETB VSCL
NOP
NOP
CLR VSDA
NOP
NOP
CLR VSCL
RET
;----------------------------------------
SETB VSCL
NOP
NOP
SETB VSDA
NOP
NOP
CLR VSDA
CLR VSCL
RET
;----------------------------------------
MACK: CLR VSDA ;發(fā)送應(yīng)答位
SETB VSCL
NOP
NOP
CLR VSCL
SETB VSDA
RET
;----------------------------------------
MNACK: SETB VSDA ;發(fā)送非應(yīng)答位
SETB VSCL
NOP
NOP
CLR VSCL
CLR VSDA
RET
;-----------------------------------------
CACK: ;應(yīng)答位檢查 正確F0為0 否則為1
SETB VSDA ;置VSDA為輸入方式
SETB VSCL ;置VSDA為數(shù)據(jù)有效
CLR F0 ;預(yù)設(shè)F0=0
MOV C,VSDA ;輸入VSDA引腳狀態(tài)
JNC CEND ;檢查VSDA引腳狀態(tài),正常應(yīng)答轉(zhuǎn)CEND,且F0為0
SETB F0 ;無(wú)正常應(yīng)答,F(xiàn)0為1
CEND: CLR VSCL ;子程序結(jié)束使VSCL為0
RET
;----------------------------------------
WRBYT: ;寫(xiě)一個(gè)字節(jié)
MOV R0,#08H ;8位數(shù)據(jù)長(zhǎng)度送R0
WLP: RLC A ;發(fā)送數(shù)據(jù)左移 發(fā)送位進(jìn)C
JC WR1 ;判斷發(fā)送1 0 發(fā)送1進(jìn)WR1
AJMP WRO ;發(fā)送0進(jìn)WR0
WLP1: DJNZ R0,WLP ;8位發(fā)送完?未完轉(zhuǎn)WLP
RET ;8位發(fā)送結(jié)束
WR1: SETB VSDA ;發(fā)送1程序段
SETB VSCL
NOP
NOP
CLR VSCL
CLR VSDA
AJMP WLP1
WRO: CLR VSDA ;發(fā)送0程序段
SETB VSCL
NOP
NOP
CLR VSCL
AJMP WLP1
;----------------------------------------
RDBYT: ;讀一個(gè)字節(jié)
MOV R0,#08H ;8位數(shù)據(jù)長(zhǎng)度送R0
RLP: SETB VSDA ;置VSDA為輸入方式
SETB VSCL ;置VSDA為數(shù)據(jù)有效
MOV C,VSDA ;讀入VSDA狀態(tài)
MOV A,R2 ;讀入0程序段 由C拼裝入R2中
RLC A
MOV R2,A
CLR VSCL ;使VSCL為零 可繼續(xù)接收數(shù)據(jù)位
DJNZ R0,RLP ;8位讀完否 未讀完轉(zhuǎn)RLP
RET
;-----------------------------------------
;寫(xiě)N個(gè)字節(jié)數(shù)據(jù) MTD:發(fā)送數(shù)據(jù)緩沖區(qū)首址 SLA:寫(xiě)入24C02的緩沖區(qū)首址 NUMBYT:發(fā)送數(shù)據(jù)個(gè)數(shù)
;-----------------------------------------
WRNBYT:
MOV R3,NUMBYT
LCALL STA ;啟動(dòng)I2C總線(xiàn)
MOV A,SLA ;發(fā)送SLA字節(jié)
LCALL WRBYT
LCALL CACK ;檢查應(yīng)答位
JB F0,WRNBYT ;若非應(yīng)答位,則重發(fā)
MOV R1,#MTD
WRDA: MOV A,@R1
LCALL WRBYT
LCALL CACK
JB F0,WRNBYT
INC R1
DJNZ R3,WRDA
LCALL STOP
RET
;---------------------------------------
;讀N個(gè)字節(jié)子程序 MRD:接受數(shù)據(jù)緩沖區(qū)首址 SLA:讀入24C02的緩沖區(qū)首址 NUMBYT:發(fā)送數(shù)據(jù)個(gè)數(shù)
;---------------------------------------
RDNBYT: ;讀N個(gè)字節(jié)子程序
MOV R3,NUMBYT
LCALL STA ;啟動(dòng)I2C總線(xiàn)
MOV A,SLA ;發(fā)送尋址字節(jié)
LCALL WRBYT
LCALL CACK ;檢查應(yīng)答位
JB F0,RDNBYT ;非正常應(yīng)答時(shí)重新開(kāi)始
RDN: MOV R1,#MRD ;接受數(shù)據(jù)緩沖區(qū)首址入R1
RDN1: LCALL RDBYT ;讀入一個(gè)字節(jié)進(jìn)接受數(shù)據(jù)緩沖區(qū)
MOV @R1,A
DJNZ R3,ACK ;N個(gè)字節(jié)讀完否 未完轉(zhuǎn)ACK
LCALL MNACK ;N個(gè)字節(jié)讀完 發(fā)送非應(yīng)答位/A
LCALL STOP ;發(fā)送停止信號(hào)
RET ;子程序結(jié)束
ACK: LCALL MACK ;發(fā)送應(yīng)答位
INC R1 ;指向下一個(gè)接受數(shù)據(jù)緩沖區(qū)單元
SJMP RDN1 ;轉(zhuǎn)向下一個(gè)字節(jié)數(shù)據(jù)
;----------------------------------------
;I2C總線(xiàn)程序包結(jié)束
;----------------------------------------
MUSIC:
PUSH ACC
PUSH B
SETB RS0
CLR RS1
MUSIC0:
NOP
MOV DPTR,#DAT ;表頭地址送DPTR
MOV 25H,#00H ;中斷計(jì)數(shù)器清0
MOV B,#00H ;表序號(hào)清0
MUSIC1:
NOP
CLR A
MOVC A,@A+DPTR ;查表取代碼
JZ END0 ;是00H,則結(jié)束
CJNE A,#0FFH,MUSIC5
LJMP MUSIC3
MUSIC5:
NOP
MOV R6,A
INC DPTR
MOV A,B
MOVC A,@A+DPTR ;取節(jié)拍代碼送R7
CJNE A,#00h,con
LJMP ED1
CON:MOV R7,A
SETB TR0 ;啟動(dòng)計(jì)數(shù)
MUSIC2:
NOP
CPL P3.2
MOV A,R6
MOV R3,A
LCALL DEL
MOV A,R7
CJNE A,25H,MUSIC2 ;中斷計(jì)數(shù)器(20H)=R7否?
;不等,則繼續(xù)循環(huán)
MOV 25H,#00H ;等于,則取下一代碼
INC DPTR
; INC B
LJMP MUSIC1
MUSIC3:
NOP
CLR TR0 ;休止100毫秒
MOV R2,#0DH
MUSIC4:
NOP
MOV R3,#0FFH
LCALL DEL
DJNZ R2,MUSIC4
INC DPTR
LJMP MUSIC1
END0:
NOP
NOP
DAT:
db 40h,22h,30h,42h,30h,22h,30h,22h,30h,12h,40h,22h,39h,12h,37h,12h
db 30h,42h,30h,62h,26h,22h,30h,22h,2bh,12h,26h,12h,20h,42h,20h,42h
db 26h,22h,26h,12h,30h,22h,26h,12h,20h,22h,26h,12h,2bh,42h,2bh,82h
db 1ch,42h,20h,42h,2bh,42h,26h,42h,20h,22h,26h,42h,20h,22h,26h,22h
db 2bh,12h,26h,12h,30h,42h,26h,82h,40h,22h,39h,12h,30h,22h,30h,22h
db 26h,22h,26h,12h,20h,22h,20h,22h,2bh,22h,2bh,12h,2bh,12h,39h,42h
db 2bh,42h,40h,22h,30h,42h,30h,22h,26h,42h,26h,22h,20h,82h,30h,22h
db 26h,12h,20h,22h,20h,22h,1ch,40h,20h,40h,26h,22h,30h,12h,20h,22h
db 20h,22h,20h,22h,26h,42h,30h,42h,40h,42h,30h,42h,26h,22h,30h,12h
db 20h,22h,20h,22h,20h,22h,26h,42h,30h,42h,40h,42h,30h,42h,40h,42h
db 30h,42h,40h,42h,30h,42h,30h,82h,00h
ED1:
POP B
POP ACC
CLR RS0
RET
DEL:
NOP
DEL3:
MOV R4,#02H
DEL4:
NOP
DJNZ R4,DEL4
NOP
DJNZ R3,DEL3
RET
;------------------------------------
;正轉(zhuǎn)調(diào)速程序
ZTIAO:
MOV SPEEDH,#2FH
MOV SPEEDL,#35H
XHUAN0: CLR P1.1
SETB P1.0
LCALL DIS
MOV A,SPEEDH
DEC A
MOV 60H,A
CJNE A,#00H,XHUAN0
XHUAN1: SETB P1.1
SETB P1.0
LCALL DIS
MOV A,SPEEDL
DEC A
MOV 61H,A
CJNE 61H,#00H,XHUAN1
RET
;反轉(zhuǎn)調(diào)速程序
FTIAO:
MOV SPEEDH,#2FH
MOV SPEEDL,#35H
XHAN3: CLR P1.0
SETB P1.1
LCALL DIS
MOV A,SPEEDH
DEC A
MOV 60H,A
CJNE A,#00H,XHUN3
XHUAN4: SETB P1.1
SETB P1.0
LCALL DIS
MOV A,SPEEDL
DEC A
MOV 61H,A
CJNE 61H,#00H,XHUAN4
RET
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -