新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機倒計時發(fā)聲器

        51單片機倒計時發(fā)聲器

        作者: 時間:2016-12-01 來源:網(wǎng)絡 收藏


        SW EQU P1.0; 按鈕開關(guān)指定為P1.0位
        BUZZER EQU P3.7; 喇叭指定為P3.7位
        ORG 00H; 程序起始地址00H開始

        START:
        CLR BUZZER ;清零喇叭位為低電平(關(guān)閉喇叭)
        MOV P0,#88H ; 給2個74譯碼器都發(fā)送88,,88為BCD碼
        NOP
        NOP
        JB SW,$ ;判斷按鈕是否按下,當SW==1時,程序一直跳到$這里T原地不動,當按鍵按下時,SW==0則進入下面
        NOP
        NOP
        NOP ; 稍微延時
        JNB SW,$ ; 判斷按鍵是否松開

        MOV R3,#10 ; 在一秒內(nèi)判斷是否雙擊
        D1:
        MOV R4,#200
        D2:
        MOV R5,#250
        DJNZ R5,$
        JNB SW,TIMER ; 如果按鍵按下,則進入另外一直記時狀態(tài)
        DJNZ R4,D2
        DJNZ R3,D1

        MOV R1,#21 ; 倒計時初始值21

        COUNTDOWN:
        DEC R1 ; R1自減1
        MOV A,R1 ; R1復值給累加器A
        MOV B,#10 ; 寄存器B賦值10
        DIV AB ; 累加器A除以寄存器B,商存A,余存B
        SWAP A ; A的高低4位互換 ,目的用于譯碼器顯示,有2個譯碼器,所以要區(qū)分R1中的高位和低位
        ORL A,B ; A=A+B做或操作
        MOV P0,A ; 輸出到譯碼器從而顯示到數(shù)碼管
        CALL DELAY ; 延時1秒
        CJNE A,#00H,COUNTDOWN ;如果累加器A不等于00H則跳轉(zhuǎn)到COUNTDOWN,即一直倒計時直到A減到0
        SETB BUZZER ; 計數(shù)到0喇叭發(fā)聲
        CALL DELAY
        JMP START ;跳到開始處從頭開始

        TIMER:
        MOV A,#00H
        LOOP:
        MOV P0,A ;數(shù)碼管顯示數(shù)A
        CALL DELAY
        ADD A,#1 ;累加器加1操作
        DA A ; 十進制調(diào)整
        CJNE A,#21H,LOOP; 判斷是否計時到21
        SETB BUZZER
        CALL DELAY
        JMP START

        DELAY: 延時1秒子程序
        MOV R3,#10
        D3:
        MOV R4,#200
        D4:
        MOV R5,#250
        DJNZ R5,$
        DJNZ R4,D4
        DJNZ R3,D3
        RET ; 子程序結(jié)束標志

        END

        上一頁 1 2 下一頁

        關(guān)鍵詞: 51單片機倒計時發(fā)聲

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 安泽县| 崇信县| 日土县| 富锦市| 五家渠市| 墨竹工卡县| 舒兰市| 大竹县| 五河县| 郴州市| 来宾市| 武邑县| 杭锦旗| 谷城县| 钟山县| 洛川县| 荥经县| 洪雅县| 黄冈市| 日照市| 阜宁县| 曲周县| 津南区| 大荔县| 马关县| 临清市| 泰州市| 临洮县| 耒阳市| 高淳县| 大厂| 县级市| 友谊县| 凤庆县| 乌拉特中旗| 独山县| 叶城县| 藁城市| 安新县| 西乌珠穆沁旗| 郴州市|