新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用單片機設計15s倒計時器

        用單片機設計15s倒計時器

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

        /*
        跳線設置:默認跳線位置,注意選擇跳線J5要選23端
        程序效果:利用的定時/計數器設計一個15到0,
        按S4后啟動,要求精確顯示到百分之一秒。
        發揮部分:
        1、定時結束后有提示音報警,并可重新定時
        2、定時過程中按獨立鍵盤s5可暫停,按S4繼續
        運行環境:51hei學習板
        */
        ORG 0000H
        LJMP START //主程序必須避開地址000BH
        ORG 000BH //定時器0的中段服務程序,起始地址為000BH
        LJMP IT00
        ORG 0030H
        START: MOV TH0,#0EBH //裝入初始值,定時時間為10ms
        MOV TL0,#64H
        MOV TMOD,#01H //工作方式1
        MOV 33H,#01 //顯示初值為15s
        MOV 32H,#05
        MOV 31H,#00
        MOV 30H,#00
        SETB ET0 //打開定時0
        SETB EA //開總中斷
        LOOP1: JB P3.6,LOOP //判斷高低位,即按鍵KEY0是否按 下
        LCALL DISPLAY //為低,即按鍵按下,延時消抖
        LCALL DISPLAY
        JB P3.6,LOOP //按鍵真的按下,并不是外界的干擾
        SETB TR0 //啟動定時器
        HERE: LCALL DISPLAY //調用顯示
        JB P3.7,LOOP3 //判斷高低,即KEY1按鍵是否按下
        CLR TR0 //按下,關閉定時器,這里并沒有消抖
        LJMP LOOP1 //等待KEY0的按下
        LOOP3: SJMP HERE //KEY1沒有按下,就需顯示
        LOOP: LCALL DISPLAY //KEY1沒有按下,就需顯示
        LJMP LOOP1
        //減10ms子程序
        SUB1: DEC 30H //百分位減1
        MOV A,30H
        CJNE A,#0FFH,LOOP2 //判斷百分位減到0之后是否 再減1
        MOV 30H,#09 //是,裝入初值9
        DEC 31H //十分位減1
        MOV A,31H
        CJNE A,#0FFH,LOOP2 //判斷百分位減到0之后是否 再減1
        MOV 31H,#09
        DEC 32H
        MOV A,32H
        CJNE A,#0FFH,LOOP2
        MOV 32H,#09
        DEC 33H
        MOV A,33H
        CJNE A,#0FFH,LOOP2
        clr P2.2 //從15s減到0s后,驅動
        LCALL DELAY //延時
        LCALL DELAY
        SETB P2.2 //關閉
        MOV 33H,#01 //裝入初值15s
        MOV 32H,#05
        MOV 31H,#00
        MOV 30H,#00
        LOOP2: NOP //空指令
        RET //返回
        //顯示子程序
        DISPLAY: MOV DPTR,#TAB //賦表首地址
        MOV A,#0FBH

        SETB P2.7
        MOV P0,A //亮最左邊的數碼管
        CLR P2.7
        XCH A,R0 //暫存A的值
        MOV A,33H
        MOVC A,@A+DPTR //根據表值查找所需的值
        SETB P2.6
        MOV P0,A //顯示值
        CLR P2.6
        LCALL DELAY //延時
        XCH A,R0 //恢復原值
        RL A //循環左移,為下次做準備
        SETB P2.7
        MOV P0,A
        CLR P2.7
        XCH A,R0
        MOV A,32H
        MOVC A,@A+DPTR
        SETB P2.6
        MOV P0,A
        CLR P2.6
        LCALL DELAY
        XCH A,R0
        RL A

        SETB P2.7
        MOV P0,A
        clr P2.7

        XCH A,R0
        MOV A,31H
        MOVC A,@A+DPTR
        SETB P2.6
        MOV P0,A
        clr P2.6
        LCALL DELAY
        XCH A,R0
        RL A
        SETB P2.7
        MOV P0,A
        clr P2.7
        XCH A,R0
        MOV A,30H
        MOVC A,@A+DPTR
        SETB P2.6
        MOV P0,A
        clr P2.6
        LCALL DELAY
        RET
        TAB: DB 3FH,06H,5BH,4FH,66H ;數碼管顯示的數值
        DB 6DH,7DH,07H,7FH,6FH
        IT00: MOV TH0,#0EBH //裝入初值,時間為10ms
        MOV TL0,#64H
        LCALL SUB1 //減10ms
        RETI //返回
        DELAY: MOV R7,#04 //延時子程序,時間大約為:2us*4*250
        DEL2: MOV R6,#250
        DEL1: DJNZ R6,DEL1
        DJNZ R7,DEL2
        RET
        END //結束

        蜂鳴器相關文章:蜂鳴器原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 定襄县| 井陉县| 龙州县| 林芝县| 杭州市| 道孚县| 盘锦市| 永顺县| 溧水县| 睢宁县| 涟源市| 德阳市| 镇坪县| 威宁| 吉木乃县| 玛曲县| 石柱| 华阴市| 元谋县| 东明县| 本溪市| 满城县| 凭祥市| 昆山市| 西安市| 全南县| 文化| 澜沧| 大方县| 社会| 龙门县| 措勤县| 文水县| 宿迁市| 井研县| 泾阳县| 玛纳斯县| 北京市| 乳源| 武强县| 普兰店市|