新聞中心

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

        單片機倒計時定時器

        作者: 時間:2016-11-18 來源:網絡 收藏
        這里我們先要安裝好51試驗板上的兩個輕觸按鈕開關,我們采用的是獨立式按鈕開關,也就是說將開關直接連接到電源的地和單片機的對應引腳之間,這里K1接到單片機的P3.6引腳,K2接到P3.7正常情況下單片機的P3.6P3.7都被程序初始化時置1當有按鍵按下時對應的單片機引腳被按鈕開關下拉為0,這種方法比較直觀,而且比較簡單,在按鍵數量不多的場合下使用很廣泛

        因為機械開關開關時有抖動,所以需要在程序中加一個軟件去抖動程序,它的工作原理如下:當單片機檢測到有按鍵被按下后立即執行一個10毫秒的延時程序,然后再在檢測該引腳是否仍然為閉合狀態?如果仍然為閉合說明確認該鍵被按下立即執行相應的處理程序,否則可能是干擾,丟棄這次檢測結果

        本文引用地址:http://www.104case.com/article/201611/315610.htm

        接下來我們再安裝一個四位的撥碼開關,就是圖中紅色的開關,它相當于四個裝在一起的撥動開關,當開關撥到"ON"一側時,對應的那路就會接通,反之斷開.它在單片機中一般用于設置初始參數,而且不經常改變的場合這里因為單片機引腳資源不夠,所以我們只使用了撥碼開關的第234位,第1位閑置三個開關可以邏輯組合出8種狀態,所以我們能夠方便靈活地預置多達7種的倒計時時間

        最后我們來安裝兩個繼電器和相關電路,有了繼電器我們的實驗板不再僅僅是做做實驗而已,可以用于控制一些負載,比如說:充電器,洗衣機,電風扇等,使我們的實驗板的實用功能大大增強,這也是電子制作實驗室網站的單片機實驗板和其他公司的產品不同的地方

        這里繼電器由相應的S8050三極管來驅動,開機時,單片機初始化后的P2.3/P2.4為高電平,+5伏電源通過電阻使三極管導通,所以開機后繼電器始終處于吸合狀態,如果我們在程序中給單片機一條:CLRP2.3或者CLRP2.4的指令的話,相應三極管的基極就會被拉低到零伏左右,使相應的三極管截至,繼電器就會斷電釋放,每個繼電器都有一個常開轉常閉的接點,便于在其他電路中使用,繼電器線圈兩端反相并聯的二極管是起到吸收反向電動勢的功能,保護相應的驅動三極管,這種繼電器驅動方式硬件結構比較簡單

        ;電子制作實驗室http://www.xie-gang.com/
        ;可設定時間的倒計時定時器,可選擇5/15/20/30/35/45/50分鐘倒計時
        ;倒計時時間由四位撥碼開關的2/3/4位來控制,
        ;第2位表示5分鐘,第3位表示15分鐘,第4位表示30分鐘,
        ;通過不同的組合可以產生5/15/20/30/35/45/50分鐘倒計時
        ;P1.0口的外接的發光二極管為狀態LED,定時未開始時LED常亮,定時過程中LED閃爍
        ;K1為開始按鈕,K2為停止按鈕

        a_bitequ20h;數碼管個位數存放內存位置
        b_bitequ21h;數碼管十位數存放內存位置
        tempequ22h;計數器數值存放內存位置

        ;開機初始化
        MOVP3,#0FFH;對P3口初始化,設置為高電平,用于按鍵輸入
        MOVP0,#0FFH;使顯示時間數碼管熄滅
        CLRP1.0;點亮LED指示燈

        ;等待鍵盤輸入
        START:JBP3.6,$;循環判斷開始按鈕K1是否按下?
        ACALLDELAY10;延時10毫秒觸點消抖
        JBP3.6,START;如果是干擾就返回
        JNBP3.6,$;等待按鍵松開

        ;讀撥碼開關的狀態,獲得倒計時時間
        SET:MOVA,#0;首先對A清零
        JBP2.0,A1;判斷撥碼開關的第2位是否接通,接通就對A加5
        ADDA,#5
        A1:JBP2.1,A2;判斷撥碼開關的第3位是否接通,接通就對A加15
        ADDA,#15
        A2:JBP2.2,A3;判斷撥碼開關的第4位是否接通,接通就對A加30
        ADDA,#30
        A3:MOVTEMP,A
        ;這時TEMP中的值就是倒計時時間

        ;數碼管顯示定時時間的程序
        display:CLRP2.4;使繼電器1釋放,開始定時(開機時繼電器處于吸合狀態)
        CLRP2.3;使繼電器2釋放,開始定時(開機時繼電器處于吸合狀態)
        MOVR2,#120
        AB:MOVR3,#250
        TIME1:mova,temp;將temp中的十六進制數轉換成10進制
        movb,#10;10進制/10=10進制
        divab
        movb_bit,a;十位在a
        mova_bit,b;個位在b

        movdptr,#numtab;指定查表啟始地址
        movr0,#4
        dpl1:movr1,#250;
        dplop:mova,a_bit;取個位數
        MOVCA,@A+DPTR;查個位數的7段代碼
        movp0,a;送出個位的7段代碼
        clrp2.7;開個位顯示
        ACALLDELY1;顯示1毫秒
        setbp2.7;關閉個位顯示,防止鬼影
        mova,b_bit;取十位數
        MOVCA,@A+DPTR;查十位數的7段代碼
        movp0,a;送出十位的7段代碼
        clrp2.6;開十位顯示
        ACALLDELY1;顯示1毫秒
        setbp2.6;關閉十位顯示,防止鬼影

        ;插入一段判斷定時過程中是否有按鍵輸入的程序段
        C1:JBP3.6,B1
        ACALLDELAY10;延時10毫秒消抖
        JBP3.6,C1
        JNBP3.6,$;等待按鍵松開
        AJMPSET
        B1:JBP3.7,M33
        ACALLDELAY10;延時10毫秒消抖
        JBP3.7,B1
        JNBP3.7,$;等待按鍵松開
        AJMPOVER

        M33:djnzr3,TIME1;2毫秒循環執行250次,時間約0.5秒
        CPLP1.0;使LED每1秒閃爍一次
        djnzr2,AB;循環執行120次,時間為1分鐘

        DECTEMP;滿一分鐘對定時時間減1
        MOVA,TEMP
        JNZDISPLAY;判斷TEMP的數值是否為0?不為0循環

        ;結束定時
        OVER:CLRP1.0;LED指示燈常亮
        SETBP2.4;繼電器1吸合,定時結束,退回到開機時的狀態
        SETBP2.3;繼電器2吸合,定時結束,退回到開機時的狀態
        AJMPSTART;退到開機初始化狀態

        ;1毫秒延時子程序
        DELY1:MOVR4,#2
        D1:MOVR5,#248
        DJNZR5,$
        DJNZR4,D1
        RET

        ;10毫秒延時子程序
        DELAY10:MOVR4,#20
        D2:MOVR5,#248
        DJNZR5,$
        DJNZR4,D2
        RET

        ;實驗板上的7段數碼管0~9數字的共陰顯示代碼
        numtab:DB0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH

        end



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 新乐市| 孟津县| 丹江口市| 青神县| 南丹县| 卢龙县| 凤阳县| 阳信县| 黄大仙区| 东台市| 龙南县| 甘洛县| 新沂市| 宝丰县| 浮山县| 唐山市| 新竹市| 梧州市| 乡宁县| 南投市| 兴仁县| 东阳市| 班戈县| 蓬莱市| 祥云县| 嘉兴市| 阿坝县| 阿尔山市| 大荔县| 金华市| 瓮安县| 和硕县| 旌德县| 易门县| 达日县| 恭城| 江达县| 西充县| 平舆县| 株洲市| 凤凰县|