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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 電子鐘的設(shè)計及仿真

          電子鐘的設(shè)計及仿真

          作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
          一、實現(xiàn)電子鐘計時的基本方法:
          (1) 計數(shù)初值計算:
          把定時器設(shè)為工作方式1,定時時間為50ms,則計數(shù)溢出20次即得時鐘計時最小單位秒,而100次計數(shù)可用軟件方法實現(xiàn)。
          假設(shè)使用T/C0,方式1,50ms定時,fosc=12MHz。
          則初值X滿足(216-X)×1/12MHz×12μs =50000μs
          X=15536→0011110010110000→3CB0H
          (2) 采用中斷方式進(jìn)行溢出次數(shù)累計,計滿20次為秒計時(1秒);
          (3) 從秒到分和從分到時的計時是通過累加和數(shù)值比較實現(xiàn)。




          二、軟件系統(tǒng)設(shè)計
          程序清單:
          ORG 0000H
          AJMP MAIN
          ORG 000BH
          LJMP INTT0

          ORG 0030H
          MAIN: MOV SP, #60H ;確立堆棧區(qū)
          MOV PSW, #00H ;
          MOV R0, #20H ;RAM區(qū)首地址
          MOV R7, #5FH ;RAM區(qū)單元個數(shù)
          QL: MOV @R0, #00H ;RAM清零
          INC R0
          DJNZ R7, QL
          MOV IP, #02H ;IP初始化,優(yōu)先定時器0
          MOV IE, #82H ;IE初始化,
          MOV TMOD, #01H ;定時器0方式1工作
          LCALL PP ;調(diào)P.子程序
          NEXT: LCALL KEY ;按鍵檢測子程序
          JB ACC.0, RUNF ;A鍵按下運行
          LCALL DISP ;調(diào)用顯示子程序
          SJMP NEXT

          RUNF: LCALL OUTT ;調(diào)傳送子程序
          LCALL TIME ;開電子鐘
          JK: LCALL DISP ;調(diào)用顯示子程序
          LCALL KEY ;按鍵檢測子程序
          JZ JK
          LCALL ANKEY
          LCALL DISP ;調(diào)用顯示子程序
          SJMP JK
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;;;;;;;;;;; P點顯示 ;;;;;;;;;;;
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          PP: MOV 37H, #12 ;P點編碼送寄存器
          MOV R0, #30H ;P點編碼送寄存器
          MOV R7, #07H
          PPP: MOV @R0, #10
          INC R0
          DJNZ R7, PPP
          RET
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;;;;;;;;;;; 鍵掃子程序 ;;;;;;;;;;;
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          KEY: LCALL KEYS ;調(diào)鍵值處理子程序
          JZ EXIT ;沒有鍵按下轉(zhuǎn)到返回
          LCALL DISP
          LCALL DISP ;調(diào)顯示去抖動
          LCALL KEYS
          JZ EXIT
          MOV B, 20H ;保存鍵值
          KEYSF: LCALL KEYS ;調(diào)鍵值處理子程序
          JZ KEYY ;鍵釋放,轉(zhuǎn)到恢復(fù)鍵值
          LCALL DISP ;調(diào)顯示子程序延時
          AJMP KEYSF ;等到鍵釋放
          KEYY: MOV A, B ;鍵值送20H單元保存
          EXIT: RET ;返回
          KEYS: MOV P1, #0FFH ;先向P1口寫1
          MOV A, P1 ;P1口值送累加器A
          CPL A ;A值取反
          ANL A, #0FH ;保存P1口的低4位
          MOV 20H, A ;A值送20H保存
          RET
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;;;;;;;;;;; 鍵功能子程序 ;;;;;;;;;;;
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ANKEY: CLR EA ;關(guān)中斷
          CHECK: JB TR0, YXZ ;判斷是否運行
          K0: CJNE A, #01H, K1
          AJMP RUN ;轉(zhuǎn)運行
          K1: CJNE A, #02H, K2
          AJMP KEY1 ;轉(zhuǎn)時調(diào)整
          K2: CJNE A, #04H, K3
          AJMP KEY2 ;轉(zhuǎn)分調(diào)整
          K3: CJNE A, #08H, OUT
          AJMP KEY3 ;轉(zhuǎn)秒調(diào)整

          YXZ: JB ACC.0, STOP
          AJMP OUT

          KEY1: MOV R0, #45H ;時調(diào)整
          LCALL ADD1
          CLR C
          CJNE A, #24H, OUTT
          ACALL CLR0
          AJMP OUTT
          KEY2: MOV R0, #43H ;分調(diào)整
          LCALL ADD1
          CLR C
          CJNE A, #60H, OUTT
          ACALL CLR0
          AJMP OUTT
          KEY3: MOV R0, #41H ;秒調(diào)整
          ACALL ADD1
          CLR C
          CJNE A, #60H, OUTT
          ACALL CLR0
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;;;;;;;;;;; 傳送顯示數(shù)據(jù) ;;;;;;;;;;;
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          OUTT: MOV 30H, 40H ;秒顯示單元41H-42H
          MOV 31H, 41H
          MOV 32H, #11 ; "-"
          MOV 33H, 42H ;分顯示單元43H-44H
          MOV 34H, 43H
          MOV 35H, #11 ; "-"
          MOV 36H, 44H ;時顯示單元44-45H
          MOV 37H, 45H
          RET
          STOP: CLR TR0 ;關(guān)電子鐘并跳出
          RET
          RUN: LCALL TIME ;運行電子鐘
          OUT: SETB EA ;無鍵按下或完成功能跳出
          RET
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;;;;;;;;;;; 運行電子鐘 ;;;;;;;;;;;
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          TIME: SETB EA
          MOV TL0, #0B0H
          MOV TH0, #3CH ;3CB0H
          MOV R4, #20 ;50ms,20次循環(huán)
          SETB TR0 ;啟動定時器0
          RET

          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;;;;;;;;;;; 定時中斷 ;;;;;;;;;;;
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          INTT0: PUSH ACC
          PUSH PSW
          CLR ET0
          CLR TR0
          MOV TL0, #0B0H ;重新設(shè)定定時初值
          MOV TH0, #3CH
          SETB TR0 ;啟動定時器0
          DJNZ R4, OUTT0 ;1秒到
          ADDSS: MOV R4, #14H ;20次計數(shù)
          MOV R0, #41H ;秒十位
          ACALL ADD1 ;加1程序
          CLR C
          CJNE A, #60H, ADDMM ;1分到
          ADDMM: JC OUTT0
          ACALL CLR0
          MOV R0, #43H
          ACALL ADD1 ;加1程序
          CLR C
          CJNE A, #60H, ADDHH ;1小時到
          ADDHH: JC OUTT0
          ACALL CLR0
          MOV R0, #45H
          ACALL ADD1 ;加1程序
          CLR C
          CJNE A, #24H, HOUR ;1天到
          HOUR: JC OUTT0
          ACALL CLR0
          OUTT0: MOV 30H, 40H ;秒顯示單元41H-42H
          MOV 31H, 41H
          MOV 32H, #11 ; "-"
          MOV 33H, 42H ;分顯示單元43H-44H
          MOV 34H, 43H
          MOV 35H, #11 ; "-"
          MOV 36H, 44H ;時顯示單元44-45H
          MOV 37H, 45H
          POP PSW
          POP ACC
          SETB ET0
          RETI


          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;;;;;;;;;;; 時間清零子程序 ;;;;;;;;;;;
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          CLR0: CLR A
          MOV @R0, A
          DEC R0
          MOV @R0, A
          RET
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;;;;;;;;;;; 加一子程序 ;;;;;;;;;;;
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ADD1: MOV A, @R0 ;取十位
          DEC R0
          SWAP A
          ORL A, @R0 ;組合十位與個位
          ADD A, #01H ;加1
          DA A ;十進(jìn)制調(diào)整
          MOV R3, A ;暫存
          ANL A, #0FH ;屏蔽十位
          MOV @R0, A ;放入個位單元
          MOV A, R3 ;取值
          INC R0
          SWAP A
          ANL A, #0FH ;屏蔽個位
          MOV @R0, A ;放入十位單元
          MOV A, R3 ;數(shù)值放入A中等待判斷
          RET

          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;;;;;;;;;;;顯示子程序 30H ;;;;;;;;;;;
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          DISP: MOV R1, #30H ;顯示緩沖存儲單元首地址
          MOV R2, #80H ;從右至左顯示
          DISP1: MOV P2, R2 ;送位控
          MOV A, @R1
          MOV DPTR, #TAB
          MOVC A, @A+DPTR
          MOV P0, A ;送段控
          ACALL DL ;延時
          MOV A, R2
          JB ACC.0, DISP2
          RR A
          INC R1
          MOV R2, A
          AJMP DISP1
          DISP2: RET
          TAB: DB 0C0H, 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH,0CH
          DL: MOV R6, #14H ;顯示延時子程序
          DL1: MOV R7, #19H ;
          DL2: DJNZ R7, DL2
          DJNZ R6, DL1
          RET
          END


          關(guān)鍵詞: 電子鐘設(shè)計仿

          評論


          技術(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); })();