⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 交通灯控制.asm

📁 基于51单片机的交通灯控制系统 IDE:Keil uVision2
💻 ASM
字号:
;晶振12M
;CPU:ATMEL89s51/89s52
	
	sec     equ 30h
	sec1    equ 31h
	sec2    equ 32h
	sec3    equ 33h

	ge_bit  equ 34h
	shi_bit equ 35h

	deng1   equ 36h
	deng2   equ 37h
	biaozhi1 equ 38h
	biaozhi2 equ 39h
	
	
	org 0000h
        ljmp start
        org 000bh
        ljmp ET_0
	org 001bh
	ljmp ET_1


         org 0030h
    ET_0:inc sec1             ;sec1每200us就加1
	 RETI

   ET_1:mov th1,#0ffh                ;形成175μ秒中断(200偏低音,100、150偏高音)
        mov tl1,#51h
	cPL p3.7
	RETI

 reflash:mov a,sec1
         mov b,#5
         div ab
         mov sec1,b
         add a,sec2           ;sec2每200us×5=1ms就加1 
         mov b,#100
         div ab
         mov sec2,b
         add a,sec3           ;sec3每1ms×100=0.1s就加1
         mov b,#10
         div ab
	 mov sec3,b
	 cjne a,#1,exit        ;sec每0.1s×10=1就减1
	 dec deng1
	 dec deng2
	 inc sec
	 mov a,sec
	 cjne a,#140,exit
	 mov sec,#00
    exit:ret

  start:mov sec,#00h
        mov sec1,#00h
        mov sec2,#00h
	mov sec3,#00h

	mov deng1,#00h
	mov deng2,#00h
      
        mov sp,#60h
	mov ie,#00h
	
	mov tmod,#12h                        ;T0&T1方式选择 T1方式1,16位计数器;T0方式2,8位自动重装计数器
	mov ip,#02h                          ;设置中断优先级控制T0>T1
        mov th0,#38h                         ;计数器赋初值
        mov tl0,#38h
	mov th1,#0ffh
        mov tl1,#51h
	setb ea
	setb et0                             ;开放总中断和允许T0中断
	setb et1                             ;允许T1中断
        setb tr0                             ;启用t0
	mov p2,#0ffh
	mov p1,#0ffh
	lcall chuli1
	lcall chuli2
	lcall chuli3
	ljmp play0

 chuli1:lcall reflash
        mov a,sec
        cjne a,#60,ca1
    ca1:jc case01            ;绿灯通行时间
        cjne a,#80,ca2
    ca2:jc case02            ;拐弯时间
	ljmp case03           ;红灯继续等待时间 

 chuli2:lcall reflash
        mov a,sec
	cjne a,#80,ca3
    ca3:jc case04
        cjne a,#120,ca4
    ca4:jc case05
	ljmp case06

 
case01:mov deng1,#60
      ret
case02:mov deng1,#20
      ret

case03:mov deng1,#60
      ret

case04:mov deng2,#80
      ret

case05:mov deng2,#40
      ret

case06:mov deng2,#20
      ret


   play0:lcall reflash
         lcall chuli3
         mov p0,#0ffh
         mov a,deng1
         mov b,#10
	 div ab
	 mov ge_bit,b
	 mov shi_bit,a
	 mov dptr,#num1    
         mov a,ge_bit
         movc a,@a+dptr
	 mov p0,a
	 clr p1.7
	 lcall dims 
	 setb p1.7

	 mov a,shi_bit
	 movc a,@a+dptr
	 mov p0,a
	 clr p1.6
	 lcall dims
	 setb p1.6
	 mov a,deng1
	 cjne a,#00h,next1
	 lcall chuli1
   next1:ljmp play1


   play1:lcall reflash
         lcall chuli3
         mov p0,#0ffh
         mov a,deng2
         mov b,#10
	 div ab
	 mov ge_bit,b
	 mov shi_bit,a
	 mov dptr,#num1
         mov a,ge_bit
         movc a,@a+dptr
	 mov p0,a
	 clr p3.4
	 lcall dims
	 setb p3.4

	 mov a,shi_bit
	 movc a,@a+dptr
	 mov p0,a
	 clr p3.3
	 lcall dims
	 setb p3.3
	 mov a,deng2
	 cjne a,#00h,next2
	 lcall chuli2
   next2:ljmp play0

   chuli3:mov a,sec
          cjne a,#55,cs1
      cs1:jc case11
          cjne a,#58,cs2
      cs2:jc case12
	  cjne a,#60,cs3
      cs3:jc case13
	  cjne a,#77,cs4
      cs4:jc case14
	  cjne a,#80,cs5
      cs5:jc case15
	  cjne a,#115,cs6
      cs6:jc case16
	  cjne a,#118,cs7
      cs7:jc case17
	  cjne a,#120,cs8
      cs8:jc case18
	  cjne a,#137,cs9
      cs9:jc case19
          mov p2,#10111011b
          lcall turn2
          ret

case11:mov p2,#10111110b
       ret
case12:mov p2,#10111111b
       lcall grenn1
       ret
case13:mov p2,#10111101b
       ret
case14:mov p2,#10110011b
       ret
case15:mov p2,#10111011b
       lcall turn1
       ret
case16:mov p2,#11101011b
       ret
case17:mov p2,#11111011b
       lcall grenn2
       ret
case18:mov p2,#11011011b
       ret
case19:mov p2,#00111011b
       ret

;绿灯闪1
grenn1:mov a,sec3
       cjne a,#5,re1
   re1:jc er1
       clr p2.0
   er1:ret
;绿灯闪2
grenn2:mov a,sec3
       cjne a,#5,re2
   re2:jc er2
       clr p2.4
   er2:ret
;拐灯闪1
turn1:mov a,sec3
       cjne a,#5,re3
   re3:jc er3
       clr p2.3
   er3:ret
;拐灯闪2
turn2:mov a,sec3
       cjne a,#5,re4
   re4:jc er4
       clr p2.7
   er4:ret

        


;dims是动态扫描七段码时的延时
    dims:mov r5,#0b0h
         djnz r5,$
         ret

   num1:DB        0C0H;0
        DB        0F9H;1
        DB        0A4H;2
        DB        0B0H;3
        DB        099H;4
        DB        092H;5
        DB        082H;6
        DB        0F8H;7
        DB        080H;8
        DB        090H;9



	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -