找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2343|回复: 1
收起左侧

单片机交通灯控制 汇编程序

[复制链接]
ID:768523 发表于 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;跳转到标号
        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
回复

使用道具 举报

ID:1 发表于 2020-6-5 04:16 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表