找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 2827|回復(fù): 1
收起左側(cè)

單片機(jī)交通燈控制 匯編程序

[復(fù)制鏈接]
ID:768523 發(fā)表于 2020-6-3 15:51 | 顯示全部樓層 |閱讀模式
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;跳轉(zhuǎn)到標(biāo)號
        ORG 001BH
        LJMP T1_KK
        ORG 0030H;程序開始單元
MAIN:   MOV R0,#7FH
K_CLR:  MOV @R0,#0
        DJNZ R0,K_CLR;
        MOV TMOD,#11H;選擇定時(shí)器T0工作方式,方式1;T1工作方式,方式1
        SETB IT0;允許T0中斷
        MOV TH0,#3CH;定時(shí)器T0初始化
        MOV TL0,#0B0H
        MOV TH1,#0FFH;定時(shí)器T1的初始化
        MOV TL1,#0CH
        MOV R4,#20;設(shè)置循環(huán)次數(shù)
        MOV IE,#8BH;開中斷
        MOV TIME,#10,定時(shí)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;表示綠燈閃爍是否的標(biāo)志
        SETB TR0;開定時(shí)器0
        CLR  TR1;關(guān)中斷
LOOP:  ACALL DISPLAY;調(diào)用延時(shí)子程序
        ACALL DIODE;調(diào)用延時(shí)子程序
        SJMP LOOP
T0_50:  MOV TL0,#0B0H;重置T0初值
        MOV TH0,#3CH
        DJNZ R4,EXITMM,R4的內(nèi)容減1,不等于0則轉(zhuǎn)移
        MOV R4,#20; 20*50=1000ms=1s
        DEC TIME ;  40-1-1-...-1=?1      
        ;MOV A,TIME; 將時(shí)間送到寄存器R7之中
        ;CJNE A,#00H,EXIT;A與00H比較,不相等則轉(zhuǎn)移至EXIT        
        MOV A,BIAOZHI;將標(biāo)志送到寄存器R7中
        CJNE A,#00H,NEXT1;A與00H比較,不相等則轉(zhuǎn)移至NEXT1
        MOV A,TIME; 將時(shí)間送到寄存器R7之中
        CJNE A,#00H,EXITMM;A與00H比較,不相等則轉(zhuǎn)移至EXUTMM
        MOV BIAOZHI,#01H
        MOV TIME,#15定時(shí)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;將標(biāo)志送到寄存器R7中
        CJNE A,#01H,NEXT2;A與01H比較,不相等則轉(zhuǎn)移至NEXT2
        MOV A,TIME; 將時(shí)間送到寄存器R7之中
        CJNE A,#00H,SS;A與00H比較,不相等則轉(zhuǎn)移至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比較,不相等則轉(zhuǎn)移至NEXT1_10_1SS
NEXT1_10_1:JNC EXITMM
        MOV A,TIME     
        CJNE A,#5,NEXT1_4;A與5比較,不相等則轉(zhuǎn)移至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開始計(jì)數(shù)
        MOV NB_DIODE_YANG,#12H
        SJMP EXIT
        NEXT2: MOV A,BIAOZHI
        CJNE A,#02H,NEXT3;A與02H比較,不相等則轉(zhuǎn)移至NEXT3
        MOV A,TIME
        CJNE A,#00H,SSSS;A與00H比較,不相等則轉(zhuǎn)移至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比較,不相等則轉(zhuǎn)移至NEXT2_10_2SS
NEXT2_10_2:JNC EXIT
        MOV A,TIME
        CJNE A,#5,NEXT2_4;A與5比較,不相等則轉(zhuǎn)移至NEXT2_4SS
NEXT2_4:JNCNEXT2_SHANSHUO
        SJMP NEXT2_YELLOW
NEXT2_SHANSHUO:
         SETB TR1
         CPL F0;
         JB F0,MIE_NEXT2;位操作,F(xiàn)0直接地址為1則轉(zhuǎn)移,不為1則順行
         MOV NB_DIODE_YANG,#24H
         SJMP EXIT
MIE_NEXT2:MOV NB_DIODE_YANG,#00H
         SJMP EXIT
NEXT2_YELLOW:
        SETB TR1;允許T1開始計(jì)時(shí)
        MOV NB_DIODE_YANG,#12H
        SJMP EXIT
NEXT3:  MOV A,BIAOZHI
        CJNE A,#03H,EXIT;A與03H比較,不相等則轉(zhuǎn)移至EXIT
        CLR TR1;停止計(jì)時(shí)
        MOV A,TIME
        CJNE A,#01H,NEXT4_N;A與01H比較,不相等則轉(zhuǎn)移至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;調(diào)用延時(shí)子程序
        ACALL DELAY;調(diào)用延時(shí)子程序
        ACALL DELAY;調(diào)用延時(shí)子程序
        ACALL DELAY;調(diào)用延時(shí)子程序
        ACALL DELAY;調(diào)用延時(shí)子程序
        ACALL DELAY;調(diào)用延時(shí)子程序
        JB P3.2,STOP_H;位操作,P3.2口直接地址為1則轉(zhuǎn)移,不為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;定時(shí)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,商的整數(shù)送A,余數(shù)送B
        MOV DISP_H,A
        MOV DISP_L,B;LED數(shù)字顯示,十位與個(gè)位分離
        RET
DISPLAY:ACALL DISP_PRO;調(diào)用DISP_PRO子程序
        MOV P2,#00H      ;關(guān)發(fā)光二極管
        MOV DPTR,#DISP_TAB
        MOV A,DISP_H   ;十位
        CJNE A,#00H,N_DISPLAY;A與00H比較,不相等則轉(zhuǎn)移至SS
        SJMP M_DISPLAY;跳轉(zhuǎn)
N_DISPLAY:MOVCA,@A+DPTR
        MOV P1,A;將累加器A中的數(shù)送到P1口
        MOV P0,#0AAH;將0AAH送到P0口
        ACALL DELAY;調(diào)用延時(shí)子程序
M_DISPLAY:MOVA,DISP_L   ;個(gè)位
        MOVC A,@A+DPTR
        MOV P1,A;將累加器A中的數(shù)送到P1口
        MOV P0,#55H,將55H送到P0口   
        ACALL DELAY調(diào)用延時(shí)子程序
        RET
DIODE:  MOV P0,#00H  ;關(guān)LED
        MOV P1,NB_DIODE_YANG; 將NB_DIODE_YANG里的內(nèi)容送到P1口
        MOV P2,NB_DIODE_YIN; 將NB_DIODE_YIN里的內(nèi)容送到P2口      
        ACALL DELAY;調(diào)用延時(shí)子程序
RETDIODE:  MOV P0,#00H  ;關(guān)LED
        MOV P1,NB_DIODE_YANG; 將NB_DIODE_YANG里的內(nèi)容送到P1口
        MOV P2,NB_DIODE_YIN; 將NB_DIODE_YIN里的內(nèi)容送到P2口      
        ACALL DELA;Y調(diào)用延時(shí)子程序
  MOV P1,DX_DIODE_YANG; 將DX_DIODE_YANG里的內(nèi)容送到P1口
        MOV P2,DX_DIODE_YIN;將DX_DIODE_YIN里的內(nèi)容送到P2口
        ACALL DELAY調(diào)用延時(shí)子程序
        RET
  MOV P1,DX_DIODE_YANG; 將DX_DIODE_YANG里的內(nèi)容送到P1口
        MOV P2,DX_DIODE_YIN;將DX_DIODE_YIN里的內(nèi)容送到P2口
        ACALL DELAY;調(diào)用延時(shí)子程序
        RET
DELAY:  MOV R7,#2
DEL:    MOV R6,#0FAH
        DJNZ R6,$;延時(shí)T=2*250*4=2ms
        DJNZ R7,DEL
        RET
DISP_TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;LED查表
        END
回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2020-6-5 04:16 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表