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

📄 tr_led.s43

📁 MSP430F133开发板代码包 独立按键(C) 5_1_6_1.c 扫描按键 key.s43 扫描按键(C) key.c ADC 5_1_8.s43 5_1_9_1.s43 I
💻 S43
字号:
;           交通灯程序清单
;用164驱动所有灯以及数码管的显示
;1121为中央控制器
;RAM使用情况:
;显示缓存为200H开始以后的12字节,
;200H~202H为第一块显示模块的显示数据
;203H~205H为第二块显示模块的显示数据
;206H~208H为第三块显示模块的显示数据
;209H~20BH为第四块显示模块的显示数据
;220H为秒计时单元,221H为0.1秒计时单元
;222H为第一块灯模块的时间显示数据,
;223H为第二,224H为第三,225H为第四
;226H为交通灯运行状态标志(一共有9个模块的灯与数码管显示运行状态)
;红绿红 34H      红绿绿 24H+1     绿红绿 48H+1   红红红 70H
;红红绿 60H+1    红黄绿 21H+1     黄红黄 C2H     红红黄 E0H
;红黄红 31H             ;灯的显示码
;4个显示模块,每一个的9盏灯中都有一盏接在第二片164的Q0上
;所以在灯的显示上可能有 “+1 ”,则这个 1 加在第二片164的Q0上
;4个单元来保存是否 +1 :20CH,20DH,20EH,20FH分别对应4个显示模块
;每当绿灯方向计数值减到3时,绿灯闪烁
;用以提醒司机朋友注意
;227H为0.75秒计数器,228H为0.3秒计数器,用于绿灯闪烁
;
;使用红外线检测是否有无违章车辆,使用端口1(P1.2)下降沿中断
;如果有,则输出超高亮度的发光管点亮,示意打开闪光灯拍摄违章车牌号
#include  "msp430x13x.h"

            ORG     0F000h                  ;msp430f1121 FLASH START

RESET       mov.w   #300h,SP                ; Initialize stackpointer
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop WDT
SetupTA     mov.w   #TASSEL1+TACLR,&TACTL   ; SMCLK, clear TAR
SetupC0     mov.w   #CCIE,&CCTL0            ; CCR0 interrupt enabled
            mov.w   #35000,&CCR0            ; 
SetupP1     bis.b   #001h,&P1DIR            ; P1.0 output 
            bis.w   #MC1,&TACTL             ; Start Timer_a in continous mode
            MOV.B   #0FFH,&P2DIR             ;P2.0为数据输出端,P2.1为时钟输出端
            CALL    #INIT_RAM
            CALL    #INIT_P1
            eint         

M           JMP M

    ;定时器中断服务程序
TA0_ISR     CALL    #DIS_12
            INC.B   &221H
                        
            CMP.B   #12,&221H       ;0.075秒  INC  12
            JNZ     TA0END
            MOV.B   #0,&221H        ;1秒
            
            CALL    #TR_CONT
            CALL    #TR_RUN
            CALL    #DATA_TO_DIS
            
            INC.B   &220H           ;加1,220H的内容作为交通灯运行的时间参考
            CMP.B   #106,&220H      ;整个过程为106秒
            JNZ     TA0END
            MOV.B   #0,&220H
TA0END      CALL    #FLASH_TO
            add.w   #60000,&CCR0    ; Add Offset to CCR0
            reti 

                      
;P1口中断服务程序,在非绿灯时间段内,如果有车通过,则开闪光灯
P1_INT      BIC.B   #04H,&P1IFG
            PUSH.B  &226H
            DINT
            PUSH    R15
            MOV     #500,R15
P1_INTLOOP1  DEC     R15            ;延时消除抖动
            JNZ     P1_INTLOOP1
            POP     R15
            BIT.B   #04H,&P1IN
            JZ     P1_INTEND
            
            CLRC                    ;判断是否为禁止通行时段
            SUB.B   #2,&226H        ;运行状态标志小于 5 时允许通行,其他时间不能通行
            JNC     P1_INTEND
           
            BIC.B   #01H,&P1OUT
            BIC.B   #02H,&P1OUT
            PUSH    R15
            MOV     #25000,R15
P1_INTLOOP2  DEC     R15
            JNZ     P1_INTLOOP2
            POP     R15
            NOP
            BIS.B   #02H,&P1OUT
            BIS.B   #1,&P1OUT
P1_INTEND   ADD.B   #2,&226H
            POP.B   &226H
            EINT
            RETI

FLASH_TO    NOP
            PUSH.B  &220H
                        
            CLRC
            SUB.B   #44,&220H       ;45~47秒为前后直行绿灯闪烁时间
            JNC      FLASH_TO1
            
            POP.B   &220H
            PUSH.B  &220H
            CLRC
            SUB.B   #46,&220H
            JNC     FLASH_TO1       ;是否小于47
            
            CMP.B   #1,&226H        ;是否为运行状态1
            JNZ     FLASH_TO1
            BIT.B   #2,&221H        ;是否为0.4秒
            JNZ     FLASH_END1      ;如果都不是 则跳转
            MOV.B   #29H,&206H      ;如果条件满足,则闪烁
            MOV.B   #29H,&200H      ;先写入绿灯不亮的显示码
            JMP     FLASH_TO1
           
FLASH_END1  MOV.B   #21H,&200H  
            MOV.B   #21H,&206H      ;再写入绿灯亮的显示码
            JMP     FLASH_TO1
            
FLASH_TO1   POP.B   &220H
            PUSH.B  &220H
            CLRC
            SUB.B   #61,&220H       ;61~64秒为前后路左右转弯绿灯闪烁时间
            JNC      FLASH_TO2      ;同时也是左右路右转弯绿灯闪烁时间
            
            POP.B   &220H
            PUSH.B  &220H
            CLRC
            SUB.B   #64,&220H
            JNC     FLASH_TO2       ;是否小于64
            
            CMP.B   #4,&226H        ;是否为运行状态4
            JNZ     FLASH_TO2
            BIT.B   #2,&221H        ;是否为0.4秒
            JNZ     FLASH_END2      ;如果都不是 则跳转
   ;         MOV.B   #2BH,&203H
      ;      MOV.B   #2BH,&209H     ;
            MOV.B   #0,&20DH        ;如果条件满足,则闪烁
            MOV.B   #0,&20FH        ;先写入绿灯不亮的显示码
            MOV.B   #2AH,&206H
            MOV.B   #2AH,&200H
            MOV.B   #0,&20CH
            MOV.B   #0,&20EH
            JMP     FLASH_TO2
           
FLASH_END2  MOV.B   #22H,&200H      ;再写入绿灯亮的显示码
            MOV.B   #22H,&206H
            MOV.B   #1,&20CH
            MOV.B   #1,&20EH
            MOV.B   #1,&20DH
            MOV.B   #1,&20FH
 
            JMP     FLASH_TO2
            
FLASH_TO2   POP.B   &220H
            PUSH.B  &220H
            CLRC
            SUB.B   #78,&220H       ;78~81秒为左右路直行绿灯闪烁时间
            JNC      FLASH_TO3
            
            POP.B   &220H
            PUSH.B  &220H
            CLRC
            SUB.B   #81,&220H
            JNC     FLASH_TO3       ;是否小于81
            
            CMP.B   #6,&226H        ;是否为运行状态6
            JNZ     FLASH_TO3
            BIT.B   #2,&221H        ;是否为0.4秒
            JNZ     FLASH_END3      ;如果都不是 则跳转
            MOV.B   #2CH,&203H      ;先写入绿灯不亮的显示码
            MOV.B   #2CH,&209H
            JMP     FLASH_TO3
           
FLASH_END3  MOV.B   #20H,&203H  
            MOV.B   #20H,&209H      ;再写入绿灯亮的显示码
            JMP     FLASH_TO3
            
FLASH_TO3   POP.B   &220H
            RET
            


TR_CONT     CLRC                    ;所有模块上的计数器减一计数
            DADD.B  #99H,&222H
            CLRC    
            DADD.B  #99H,&223H
            CLRC
            DADD.B  #99H,&224H
            CLRC    
            DADD.B  #99H,&225H
            RET

;交通灯的运行
TR_RUN      CMP.B   #0,&220H        ;进行了47秒之后
            JNZ     TR_RUN1
            MOV.B   #20H,&200H      ;第一模块8灯显示值:红绿红
            MOV.B   #47H,&222H      ;        时间计数值
            MOV.B   #0,&20CH        ;        第9灯显示值
            MOV.B   #23H,&203H      ;第二模块:红红红
            MOV.B   #67H,&223H
            MOV.B   #0,&20dH 
            MOV.B   #20H,&206H      ;红绿红
            MOV.B   #47H,&224H
            MOV.B   #0,&20eH 
            MOV.B   #23H,&209H      ;红红红
            MOV.B   #67H,&225H
            MOV.B   #0,&20fH 
            MOV.B   #0,&226H
            
TR_RUN1     CMP.B   #27,&220H       ;进行了47秒之后
            JNZ     TR_RUN2
            MOV.B   #21H,&200H      ;第一模块8灯显示值 :红绿绿
;             MOV.B   #47H,&222H    ;时间计数值不变,延续
            MOV.B   #1,&20CH        ;        第9灯显示值
            MOV.B   #24H,&203H      ;第二模块: 红绿绿
;             MOV.B   #67H,&223H
            MOV.B   #1,&20dH 
            MOV.B   #21H,&206H      ;第三模块:红红绿
;             MOV.B   #47H,&224H
            MOV.B   #1,&20eH 
            MOV.B   #24H,&209H      ;第四模块:红红绿
;             MOV.B   #67H,&225H
            MOV.B   #01,&20fH  
            MOV.B   #1,&226H
                 
TR_RUN2     CMP.B   #47,&220H       ;进行了47秒之后
            JNZ     TR_RUN3
            MOV.B   #25H,&200H      ;第一模块8灯显示值 :红黄绿
            MOV.B   #2H,&222H       ;时间计数值 黄灯显示时间
            MOV.B   #1,&20CH        ;        第9灯显示值
            MOV.B   #24H,&203H      ;第二模块: 红红绿
;             MOV.B   #67H,&223H
            MOV.B   #1,&20dH 
            MOV.B   #25H,&206H      ;第三模块:红黄绿
            MOV.B   #2H,&224H
            MOV.B   #1,&20eH 
            MOV.B   #24H,&209H      ;第四模块
;             MOV.B   #67H,&225H
            MOV.B   #01,&20fH  
            MOV.B   #2,&226H            
TR_RUN3                 
TR_RUN4     CMP.B   #49,&220H       ;进行了47秒之后
            JNZ     TR_RUN5
            MOV.B   #22H,&200H      ;第一模块8灯显示值:绿红绿
            MOV.B   #16H,&222H      ;时间计数值 黄灯显示时间
            MOV.B   #1,&20CH        ;        第9灯显示值
            MOV.B   #24H,&203H      ;第二模块: 红红绿
;             MOV.B   #67H,&223H
            MOV.B   #1,&20dH 
            MOV.B   #22H,&206H      ;第三模块:绿红绿
            MOV.B   #16H,&224H
            MOV.B   #1,&20eH 
            MOV.B   #24H,&209H      ;第四模块
;             MOV.B   #67H,&225H
            MOV.B   #01,&20fH  
            MOV.B   #4,&226H
            
TR_RUN5     CMP.B   #65,&220H       ;进行了65秒之后
            JNZ     TR_RUN6
            MOV.B   #26H,&200H      ;第一模块8灯显示值:黄红黄
            MOV.B   #2H,&222H       ;时间计数值 黄灯显示时间
            MOV.B   #0,&20CH        ;        第9灯显示值
            MOV.B   #27H,&203H      ;第二模块: 红红黄
;             MOV.B   #67H,&223H
            MOV.B   #1,&20dH 
            MOV.B   #26H,&206H      ;第三模块
            MOV.B   #2H,&224H
            MOV.B   #0,&20eH 
            MOV.B   #27H,&209H      ;第四模块:红红黄
;             MOV.B   #67H,&225H
            MOV.B   #01,&20fH  
            MOV.B   #5,&226H
            
TR_RUN6     CMP.B   #67,&220H       ;进行了67秒之后
            JNZ     TR_RUN7
            MOV.B   #23H,&200H      ;第一模块8灯显示值:红红红
            MOV.B   #37H,&222H      ;时间计数值 黄灯显示时间
            MOV.B   #0,&20CH        ;        第9灯显示值
            MOV.B   #20H,&203H      ;第二模块: 红绿红
            MOV.B   #15H,&223H
            MOV.B   #0,&20dH 
            MOV.B   #23H,&206H      ;第三模块
            MOV.B   #37H,&224H
            MOV.B   #0,&20eH 
            MOV.B   #20H,&209H      ;第四模块
            MOV.B   #15H,&225H
            MOV.B   #0,&20fH  
            MOV.B   #6,&226H
            
TR_RUN7     CMP.B   #82,&220H       ;进行了82秒之后
            JNZ     TR_RUN8
            MOV.B   #23H,&200H      ;第一模块8灯显示值:红红红
  ;           MOV.B   #37H,&222H    ;时间计数值 黄灯显示时间
            MOV.B   #0,&20CH        ;        第9灯显示值(亮与熄)
            MOV.B   #28H,&203H      ;第二模块: 红黄红
            MOV.B   #2H,&223H
            MOV.B   #0,&20dH 
            MOV.B   #23H,&206H      ;第三模块
   ;

⌨️ 快捷键说明

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