新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于51單片機的帶時間顯示和緊急控制的交通燈的設計

        基于51單片機的帶時間顯示和緊急控制的交通燈的設計

        作者: 時間:2012-10-26 來源:網絡 收藏

        ;特別說明,本程序僅供單片機愛好者自己學習使用,


        ;不得做為其它商業用途


        ;此程序在硬件上調試通
        ;晶振頻率為11.0592MHZ
        ;用定時器1延時,外部中斷0接
        ;R0為100MS延時常數,R2為狀態延時常數
        ;8279控制數碼管顯示時間
        ;用P1口控制雙色燈
        ;此程序寫于2007-7-6,作者:徐學軍
        Z8279 EQU 0FF82H ;8279 狀態/命令口地址
        D8279 EQU 0FF80H ;8279 數據口地址
        LEDMOD EQU 00H ;左邊輸入 八位字符顯示
        ;外部譯碼鍵掃描方式,雙鍵互鎖
        LEDFEQ EQU 33H ;掃描速率
        LEDCLS EQU 0C1H ;清除顯示 RAM
        LEDWR0 EQU 80H ;設定的將要寫入的顯示RAM地址

        ORG 0000H
        LJMP START
        ORG 0003H ;INT 0 中斷入口地址
        LJMP INT_0
        ORG 001BH ;T1中斷入口地址
        LJMP INT_T1
        ORG 0040H
        START:
        MOV SP,#60H
        MOV TMOD,#10H ;置T1為方式1
        SETB EX0 ;INT 0 中斷有效
        SETB IT0
        SETB EA
        MOV TL1,#00H ;延時50mS常數
        MOV TH1,#4cH
        MOV R0,#2 ;延時100mS常數
        SETB TR1 ;啟動T1
        SETB ET1
        setb pt1 ;必須設置定時器1的中斷優先級高于外部中斷0
        LCALL INIT8279 ;初始化8279



        LCALL STATUS0 ;初始狀態(都是紅燈)
        CIRCLE:
        LCALL STATUS1 ;南北綠燈,東西紅燈
        LCALL STATUS2 ;南北綠燈閃轉黃燈,東西紅燈
        LCALL STATUS3 ;南北紅燈,東西綠燈
        LCALL STATUS4 ;南北紅燈,東西綠燈閃轉黃燈
        LJMP CIRCLE
        INT_0:
        PUSH PSW ;保護現場
        PUSH 2
        PUSH 90H
        clr ex0
        MOV P1,#0FH ;南北,東西都亮紅燈
        MOV R2,#100 ;延時10秒
        LCALL DELAY_DISPLAY
        setb ex0
        POP 90H ;恢復現場
        POP 2
        POP PSW
        RETI
        INT_T1:
        PUSH ACC
        PUSH PSW
        CLR TR1
        MOV TL1,#00H ;延時 50mS 常數
        MOV TH1,#4CH
        SETB TR1
        DJNZ R0,EXIT
        MOV R0,#2 ;延時 100ms常數
        DEC R2
        EXIT:
        POP PSW
        POP ACC
        RETI

        STATUS0: ;南北紅燈,東西紅燈
        MOV P1,#0FH
        MOV R2,#10 ;延時1秒
        LCALL DELAY_DISPLAY
        RET
        STATUS1: ;南北綠燈,東西紅燈
        MOV P1,#96H ;南北綠燈,東西紅燈
        MOV R2,#200 ;延時20秒
        LCALL DELAY_DISPLAY
        RET
        STATUS2: ;南北綠燈閃轉黃燈,東西紅燈
        MOV R3,#03H ;綠燈閃3次
        FLASH:
        MOV P1,#9FH
        MOV R2,#03H
        LCALL DELAY_DISPLAY
        MOV P1,#96H
        MOV R2,#03H
        LCALL DELAY_DISPLAY
        DJNZ R3,FLASH
        MOV P1,#06H ;南北黃燈,東西紅燈
        MOV R2,#10 ;延時1秒
        LCALL DELAY_DISPLAY
        RET
        STATUS3: ;南北紅燈,東西綠燈
        MOV P1,#69H
        MOV R2,#200 ;延時20秒
        LCALL DELAY_DISPLAY
        RET
        STATUS4: ;南北紅燈,東西綠燈閃轉黃燈
        MOV R3,#03H ;綠燈閃3次
        FLASH1:
        MOV P1,#6FH
        MOV R2,#03H
        LCALL DELAY_DISPLAY
        MOV P1,#69H
        MOV R2,#03H
        LCALL DELAY_DISPLAY
        DJNZ R3,FLASH1
        MOV P1,#09H ;南北紅燈,東西黃燈
        MOV R2,#10 ;延時1秒
        LCALL DELAY_DISPLAY
        NOP
        RET
        INIT8279: ;8279初始化子程序
        PUSH DPH ;保存現場
        PUSH DPL
        PUSH ACC
        LCALL DELAY ;延時
        MOV DPTR ,#Z8279
        MOV A,#LEDMOD ;置8279工作方式
        MOVX @DPTR,A
        MOV A,#LEDFEQ ;置鍵盤掃描速率
        MOVX @DPTR,A
        MOV A,#LEDCLS ;清除 LED 顯示
        MOVX @DPTR,A
        LCALL DELAY ;延時
        POP ACC ;恢復現場
        POP DPL
        POP DPH
        RET
        ;顯示字符子程序
        ;輸入: R4,位置 R5,值
        DISLED:
        PUSH DPH ;保存現場
        PUSH DPL
        PUSH ACC
        MOV A,#LEDWR0 ;置顯示起始地址
        ADD A,R4 ;加位置偏移量
        MOV DPTR,#Z8279
        MOVX @DPTR,A ;設定顯示位置
        MOV DPTR,#LEDSEG ;置顯示常數表起始位置
        MOV A,R5
        MOVC A,@A+DPTR ;查表
        MOV DPTR,#D8279
        MOVX @DPTR,A ;顯示數據
        POP ACC ;恢復現場
        POP DPL
        POP DPH
        RET
        DELAY: ;延時子程序
        PUSH 0 ;保存現場
        PUSH 1
        MOV 0,#0H
        DELAY1:
        MOV 1,#0H
        DJNZ 1,$
        DJNZ 0,DELAY1
        POP 1 ;恢復現場
        POP 0
        RET

        DELAY_DISPLAY: ;延時和顯示時間子程序
        PUSH 1
        PUSH 0
        push acc
        loopwait: mov b,#10
        mov a,2
        div ab
        mov b,#10
        div ab
        mov r4,#1
        mov r5,a
        LCALL DISLED ;顯示秒高位
        mov r4,#0
        mov r5,b
        LCALL DISLED ;顯示秒低位
        mov a,2
        jnz loopwait ;延時等待
        pop acc
        POP 0
        POP 1
        RET
        LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
        DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
        END



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 镇江市| 腾冲县| 什邡市| 军事| 渭南市| 沙洋县| 双江| 晋江市| 蒲江县| 玉屏| 兴和县| 万载县| 新泰市| 东方市| 南雄市| 梅州市| 蓬安县| 蓬溪县| 巨野县| 铜鼓县| 三河市| 屯留县| 乌鲁木齐市| 辽阳县| 萨迦县| 栖霞市| 故城县| 奉节县| 柏乡县| 乌恰县| 永春县| 石棉县| 苗栗县| 浦北县| 吉隆县| 阳原县| 波密县| 仁布县| 鲁甸县| 文昌市| 汉川市|