J6---P0
;J7---P2
;J5---P1
;BUZZ----P3.0
;STOP----INT0;定義各引腳
DISP_LEQU 52H
DISP_HEQU 51H
TIME EQU 50H
DIODE_BUSEQU 53H
DIODE_WEIEQU 54H
BIAOZHI EQU 55H
NB_DIODE_YANGEQU 56H
NB_DIODE_YIN EQU 57H
DX_DIODE_YANGEQU 58H
DX_DIODE_YIN EQU 59H
TEM_TIME EQU 5AH
TEM_BIAOZHI EQU 5BH
TEM_NB_DIODE_YANGEQU 5CH
TEM_NB_DIODE_YIN EQU 5DH
TEM_DX_DIODE_YANGEQU 5EH
TEM_DX_DIODE_YIN EQU 5FH
ORG0
AJMPMAIN
ORG0003H
LJMPSTOP
ORG000BH;中斷向量地址
AJMPT0_50;跳轉到標號
ORG 001BH
LJMP T1_KK
ORG 0030H;程序開始單元
MAIN: MOV R0,#7FH
K_CLR: MOV @R0,#0
DJNZ R0,K_CLR;
MOV TMOD,#11H;選擇定時器T0工作方式,方式1;T1工作方式,方式1
SETB IT0;允許T0中斷
MOV TH0,#3CH;定時器T0初始化
MOV TL0,#0B0H
MOV TH1,#0FFH;定時器T1的初始化
MOV TL1,#0CH
MOV R4,#20;設置循環次數
MOV IE,#8BH;開中斷
MOV TIME,#10,定時10s
MOV NB_DIODE_YANG,#09H
MOV NB_DIODE_YIN,#33H
MOV DX_DIODE_YANG,#09H
MOV DX_DIODE_YIN,#0CCH
MOV BIAOZHI,#00H
CLR F0;表示綠燈閃爍是否的標志
SETB TR0;開定時器0
CLR TR1;關中斷
LOOP: ACALL DISPLAY;調用延時子程序
ACALL DIODE;調用延時子程序
SJMP LOOP
T0_50: MOV TL0,#0B0H;重置T0初值
MOV TH0,#3CH
DJNZ R4,EXITMM,R4的內容減1,不等于0則轉移
MOV R4,#20; 20*50=1000ms=1s
DEC TIME ; 40-1-1-...-1=?1
;MOV A,TIME; 將時間送到寄存器R7之中
;CJNE A,#00H,EXIT;A與00H比較,不相等則轉移至EXIT
MOV A,BIAOZHI;將標志送到寄存器R7中
CJNE A,#00H,NEXT1;A與00H比較,不相等則轉移至NEXT1
MOV A,TIME; 將時間送到寄存器R7之中
CJNE A,#00H,EXITMM;A與00H比較,不相等則轉移至EXUTMM
MOV BIAOZHI,#01H
MOV TIME,#15定時15S
MOV NB_DIODE_YANG,#24H
MOV NB_DIODE_YIN,#33H
MOV DX_DIODE_YANG,#09H
MOV DX_DIODE_YIN,#0CCH
SJMP EXITMM
NEXT1: MOV A,BIAOZHI;將標志送到寄存器R7中
CJNE A,#01H,NEXT2;A與01H比較,不相等則轉移至NEXT2
MOV A,TIME; 將時間送到寄存器R7之中
CJNE A,#00H,SS;A與00H比較,不相等則轉移至SS
CLR TR1
MOV BIAOZHI,#02H
MOV TIME,#13
MOV NB_DIODE_YANG,#24H
MOV NB_DIODE_YIN,#0CCH
MOV DX_DIODE_YANG,#09H
MOV DX_DIODE_YIN,#33H
SJMP EXITMM
SS: MOV A,TIME
CJNE A,#10,NEXT1_10_1;A與10比較,不相等則轉移至NEXT1_10_1SS
NEXT1_10_1:JNC EXITMM
MOV A,TIME
CJNE A,#5,NEXT1_4;A與5比較,不相等則轉移至NEXT1_4
NEXT1_4:JNCNEXT1_SHANSHUO
SJMP NEXT1_YELLOW
NEXT1_SHANSHUO:
SETB TR1
CPL F0
JB F0,MIE_NEXT1
MOV NB_DIODE_YANG,#24H
EXITMM: LJMP EXIT
MIE_NEXT1:MOVNB_DIODE_YANG,#00H
SJMP EXIT
NEXT1_YELLOW:SETBTR1;允許T1開始計數
MOV NB_DIODE_YANG,#12H
SJMP EXIT
NEXT2: MOV A,BIAOZHI
CJNE A,#02H,NEXT3;A與02H比較,不相等則轉移至NEXT3
MOV A,TIME
CJNE A,#00H,SSSS;A與00H比較,不相等則轉移至SSSS
MOV BIAOZHI,#01H
MOV TIME,#15
CLR TR1
MOV NB_DIODE_YANG,#24H
MOV NB_DIODE_YIN,#33H
MOV DX_DIODE_YANG,#09H
MOV DX_DIODE_YIN,#0CCH
SJMP EXIT
SSSS: MOV A,TIME
CJNE A,#10,NEXT2_10_2;A與10比較,不相等則轉移至NEXT2_10_2SS
NEXT2_10_2:JNC EXIT
MOV A,TIME
CJNE A,#5,NEXT2_4;A與5比較,不相等則轉移至NEXT2_4SS
NEXT2_4:JNCNEXT2_SHANSHUO
SJMP NEXT2_YELLOW
NEXT2_SHANSHUO:
SETB TR1
CPL F0;
JB F0,MIE_NEXT2;位操作,F0直接地址為1則轉移,不為1則順行
MOV NB_DIODE_YANG,#24H
SJMP EXIT
MIE_NEXT2:MOV NB_DIODE_YANG,#00H
SJMP EXIT
NEXT2_YELLOW:
SETB TR1;允許T1開始計時
MOV NB_DIODE_YANG,#12H
SJMP EXIT
NEXT3: MOV A,BIAOZHI
CJNE A,#03H,EXIT;A與03H比較,不相等則轉移至EXIT
CLR TR1;停止計時
MOV A,TIME
CJNE A,#01H,NEXT4_N;A與01H比較,不相等則轉移至NEXT4_N
MOV TIME,TEM_TIME
MOV BIAOZHI,TEM_BIAOZHI
MOV NB_DIODE_YANG,TEM_NB_DIODE_YANG
MOV NB_DIODE_YIN,TEM_NB_DIODE_YIN
MOV DX_DIODE_YANG,TEM_DX_DIODE_YANG
MOV DX_DIODE_YIN,TEM_DX_DIODE_YIN
SJMP EXIT
NEXT4_N:MOV NB_DIODE_YANG,#09H
MOV DX_DIODE_YANG,#09H
EXIT: RETI
T1_KK:MOV TL1,#00H
MOV TH1,#0FFH
CPL P3.0;開蜂鳴器
RETI
STOP: CLR EA;
JB P3.2,STOP_H
ACALL DELAY;調用延時子程序
ACALL DELAY;調用延時子程序
ACALL DELAY;調用延時子程序
ACALL DELAY;調用延時子程序
ACALL DELAY;調用延時子程序
ACALL DELAY;調用延時子程序
JB P3.2,STOP_H;位操作,P3.2口直接地址為1則轉移,不為1則順行
MOV TEM_TIME,TIME
MOV TEM_BIAOZHI,BIAOZHI
MOV TEM_NB_DIODE_YANG,NB_DIODE_YANG
MOV TEM_NB_DIODE_YIN,NB_DIODE_YIN
MOV TEM_DX_DIODE_YANG,DX_DIODE_YANG
MOV TEM_DX_DIODE_YIN,DX_DIODE_YIN
MOV TIME,#15;定時15s
MOV BIAOZHI,#03H
MOV NB_DIODE_YANG,#09H
MOV DX_DIODE_YANG,#09H
STOP_H:SETBEA
RETI
DISP_PRO:MOV A,TIME
MOV B,#10
DIV AB;A除以B,商的整數送A,余數送B
MOV DISP_H,A
MOV DISP_L,B;LED數字顯示,十位與個位分離
RET
DISPLAY:ACALL DISP_PRO;調用DISP_PRO子程序
MOV P2,#00H ;關發光二極管
MOV DPTR,#DISP_TAB
MOV A,DISP_H ;十位
CJNE A,#00H,N_DISPLAY;A與00H比較,不相等則轉移至SS
SJMP M_DISPLAY;跳轉
N_DISPLAY:MOVCA,@A+DPTR
MOV P1,A;將累加器A中的數送到P1口
MOV P0,#0AAH;將0AAH送到P0口
ACALL DELAY;調用延時子程序
M_DISPLAY:MOVA,DISP_L ;個位
MOVC A,@A+DPTR
MOV P1,A;將累加器A中的數送到P1口
MOV P0,#55H,將55H送到P0口
ACALL DELAY調用延時子程序
RET
DIODE: MOV P0,#00H ;關LED
MOV P1,NB_DIODE_YANG; 將NB_DIODE_YANG里的內容送到P1口
MOV P2,NB_DIODE_YIN; 將NB_DIODE_YIN里的內容送到P2口
ACALL DELAY;調用延時子程序
RETDIODE: MOV P0,#00H ;關LED
MOV P1,NB_DIODE_YANG; 將NB_DIODE_YANG里的內容送到P1口
MOV P2,NB_DIODE_YIN; 將NB_DIODE_YIN里的內容送到P2口
ACALL DELA;Y調用延時子程序
MOV P1,DX_DIODE_YANG; 將DX_DIODE_YANG里的內容送到P1口
MOV P2,DX_DIODE_YIN;將DX_DIODE_YIN里的內容送到P2口
ACALL DELAY調用延時子程序
RET
MOV P1,DX_DIODE_YANG; 將DX_DIODE_YANG里的內容送到P1口
MOV P2,DX_DIODE_YIN;將DX_DIODE_YIN里的內容送到P2口
ACALL DELAY;調用延時子程序
RET
DELAY: MOV R7,#2
DEL: MOV R6,#0FAH
DJNZ R6,$;延時T=2*250*4=2ms
DJNZ R7,DEL
RET
DISP_TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;LED查表
END
|