<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用單片機(jī)設(shè)計15s倒計時器

          用單片機(jī)設(shè)計15s倒計時器

          作者: 時間:2012-11-10 來源:網(wǎng)絡(luò) 收藏

          /*
          跳線設(shè)置:默認(rèn)跳線位置,注意選擇跳線J5要選23端
          程序效果:利用的定時/計數(shù)器設(shè)計一個15到0
          按S4后啟動,要求精確顯示到百分之一秒。
          發(fā)揮部分:
          1、定時結(jié)束后有提示音報警,并可重新定時
          2、定時過程中按獨(dú)立鍵盤s5可暫停,按S4繼續(xù)
          運(yùn)行環(huán)境:51hei學(xué)習(xí)板
          */
          ORG 0000H
          LJMP START //主程序必須避開地址000BH
          ORG 000BH //定時器0的中段服務(wù)程序,起始地址為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 //調(diào)用顯示
          JB P3.7,LOOP3 //判斷高低,即KEY1按鍵是否按下
          CLR TR0 //按下,關(guān)閉定時器,這里并沒有消抖
          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后,驅(qū)動
          LCALL DELAY //延時
          LCALL DELAY
          SETB P2.2 //關(guān)閉
          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 //亮最左邊的數(shù)碼管
          CLR P2.7
          XCH A,R0 //暫存A的值
          MOV A,33H
          MOVC A,@A+DPTR //根據(jù)表值查找所需的值
          SETB P2.6
          MOV P0,A //顯示值
          CLR P2.6
          LCALL DELAY //延時
          XCH A,R0 //恢復(fù)原值
          RL A //循環(huán)左移,為下次做準(zhǔn)備
          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 ;數(shù)碼管顯示的數(shù)值
          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 //結(jié)束

          蜂鳴器相關(guān)文章:蜂鳴器原理


          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();