交通灯c语言单片机程序,基于51单片机的一个简单交通灯程序

这是一个比较完整的程序

;*************************************

;file name:  traffic_light.asm

;

;FOUCTION : 实现交通灯的交替控制及特殊情况(如急救车等)通过时 ,通过外中断实现

;

;WRITER   :     守望

;Finish Time: 2010.6.8

;*************************************

North_South_Red    BIT  P1.0

North_South_Yellow BIT  P1.1

North_South_Green BIT  P1.2

East_West_Red  BIT  P1.3

East_West_Yellow BIT  P1.4

East_West_Green  BIT  P1.5

Scd   EQU  30H ;秒

ORG  0000H

JMP  START

ORG  0003H

JMP  INIT0

ORG  000BH

JMP  TIME0

;*************************************

;NAME:  交通灯交替工作控制程序

;

;FOUCTION: 红绿黄交替点亮: 红灯亮33秒钟后绿灯亮27秒,然后闪烁3秒,最后黄灯点亮三秒 ,循环

;

;WRITER  :

;TIME    : 2010.6.8

;*************************************

TIME0:

MOV    TH0,#30H

MOV    TL0,#0B0H

INC    31H

MOV    A,31H

N:     CJNE   A,#20,EXIT         ;判断是否到一秒

MOV    31H,#0

INC    Scd

MOV    A,Scd

CJNE   A,#27,NEXT1  ;判断绿灯是否到27s

SETB   F0

JMP    EXIT

NEXT1: MOV    A,Scd

CJNE   A,#30,NEXT2  ;判断绿灯是否亮30s

CLR    F0

MOV    P1,#0EEH

JMP    EXIT

NEXT2:

MOV    A,Scd

CJNE   A,#33,NEXT3

MOV    P1,#0F3H   ;初始化

NEXT3:

MOV    A,Scd

CJNE   A,#60,NEXT4

SETB   00H

JMP    EXIT

NEXT4: MOV    A,Scd

CJNE   A,#63,NEXT5

CLR    00H

MOV    P1,#0F5H

JMP    EXIT

NEXT5:  MOV    A,Scd

CJNE   A,#66,EXIT

MOV    P1,#0DEH

MOV    Scd,#0

EXIT: RETI

;*************************************

;NAME:  外中断0

;

;FOUCTION: 东西方向出现特殊情况      ?

;  南北红灯亮,东西绿灯亮,延时10s

;WRITER  :

;TIME    : 2010.6.8

;*************************************

INIT0:

PUSH    PSW

PUSH    ACC

CLR EA

MOV R2,P1 ;保存数据

MOV     P1,#0F6H

CALL DELLAY10S

MOV P1,R2 ;恢复

SETB    EA

POP     ACC

POP     PSW

RETI

;*******************主程序初始化部分**************

START:

MOV   Scd,  #00H

MOV   31H,  #00H

MOV   P1,   #0FFH

CLR   00H

CLR   F0

MOV   TMOD, #01H  ;设定定时器1

MOV   IE,   #83H  ;设定中断使能  定时器中断0、外部中断0和1

MOV   SP,   #60H

MOV   TH0,  #30H

MOV   TL0,  #0B0H

SETB  TR0

LOOP:

JNB    F0,N0

CPL    East_West_Green          ;绿灯闪三秒

CALL   DELAY500MS

JMP    N1

N0:

JNB    00H,N1

CPL    North_South_Green          ;绿灯闪三秒

CALL   DELAY500MS

N1:

JMP   LOOP

;************************************

;Name  :  DELAY

;

;Fouction:  delay 10s

;

;Time  :  2010.06.09

;Writer  :

;*************************************

DELLAY10S:

MOV R4,#0BFH

D1:

MOV R6,#0BDH

D0:

MOV R5,#89H

DJNZ R5,$

DJNZ R6,D0

DJNZ R4,D1

NOP

RET

;************************************

;Name  :  DELAY

;

;Fouction:  delay 10s

;

;Time  :  2010.06.17

;Writer  :

;*************************************

DELAY500MS:   ;Delay 0.5s

MOV 57H,#17H

DL1:

MOV 56H,#98H

DL0:

MOV 55H,#46H

DJNZ 55H,$

DJNZ 56H,DL0

DJNZ 57H,DL1

RET

END

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值