人狗畜禽COMPANY LIMITED|全是肉的高H文〈男男〉|全篇肉高H秘书被C办公室四爱|全黄H全肉共妻|全黄H全肉短篇禁乱NP慕浅浅|全黄H全肉短篇N男男

技術熱線: 4007-888-234
設計開發(fā)

專注差異化嵌入式產品解決方案 給智能產品定制注入靈魂給予生命

開發(fā)工具

提供開發(fā)工具、應用測試 完善的開發(fā)代碼案例庫分享

技術支持

從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創(chuàng)造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產品競爭力

新聞中心

提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)

動態(tài)數碼管掃描顯示的時鐘

更新時間: 2019-03-25
閱讀量:841

動態(tài)數碼管掃描顯示的時鐘
;使用資源:
;1,TMRO定時器。確定顯示的位,及顯示延時。
;2,TMR1定時器。秒信號產生。
;3,PORTA端口。六共陽極位數碼管的位選信號,低電平有效
;4,PORTC端口。數碼管的七段,RC7不用。

;功能說明:
;1.六位數碼管動態(tài)掃描顯示時間(格式為:HHMMSS,24小時制)。
;2.時鐘信號由單片機內部定時器硬件單元編程產生。

;本實戰(zhàn)的目的是讓大家進一步熟悉定時器的編程,多位數碼管動態(tài)掃描顯示的編程。

;硬件接法:
;1.實驗板上撥碼開關S4、S5的所有位必須置ON,其他都可以關閉。
;2.最好把93C46跟24CXX存儲器從板上取下。

;本實例原提供者:pic16論壇會員 leef728 ,在此鳴謝leef728同志共享本實例.
;程序文件名“TIME.ASM"
;程序清單如下:
;************************************
   LIST P=16F877A
   INCLUDE"P16F877A.INC"    
   ERRORLEVEL -302
;***********************************
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC;
;***************文件寄存器定義**************
    CBLOCK 0X20
   WAW
   YIW  
   BAW
   QIW
   GEW
   SHW
   TEMP
   COUNTER
   S3
   DAA   
   STATUS_TMP
   W_TMP
    ENDC
;********************程序開始****************
   ORG  0000H
   NOP                                          ;復位地址
   GOTO MAIN       
   ORG  0004H

;********************中斷處理程序***********
   MOVWF W_TMP
   SWAPF STATUS,W
   CLRF STATUS
   MOVWF STATUS_TMP                             ;以上4條指令為中斷現場保護
   BCF  INTCON,2                                ;清除TMRO中斷標志位
   MOVF TEMP,W                                  ;時間存放單元的地址
   MOVWF FSR
   MOVF INDF,W                                  ;取得某一位的時間值
   CALL BMA                                     ;查表得時間的顯示代碼
   MOVWF PORTC                                  ;送數碼管顯示
   COMF DAA,W                                   ;位碼取反
   MOVWF PORTA                                  ;點亮相應的數碼管
   RLF  DAA,F                                   ;準備點亮下一位
   INCF TEMP,F                                  ;下一時間存放單元地址
   BTFSS DAA,6                                  ;是否顯示完六位
   GOTO RT
   MOVLW 01H                                    ;是,重新開始新一輪顯示
   MOVWF DAA                                   
   MOVLW 20H                                    ;重新獲取時間單元的地址
   MOVWF TEMP
RT  
   SWAPF STATUS_TMP,W                           ;中斷現場恢復  
   MOVWF STATUS
   SWAPF W_TMP,F
   SWAPF W_TMP,W
   MOVLW 0XE0                                   ;賦定時器初值
   MOVWF TMR0
   RETFIE  
 
;*******************主程序開始**************** 
MAIN  
   BANKSEL TRISA                                ;選擇體1
   MOVLW 00H
   MOVWF TRISA                                  ;PORTA設置為輸出
   MOVWF TRISC                                  ;PORTC設置為輸出
   MOVLW 06H
   MOVWF ADCON1                                 ;設置A口為普通數字口
   BANKSEL INTCON
   MOVLW 00H
   MOVWF YIW
   MOVWF WAW
   MOVWF QIW
   MOVWF BAW
   MOVWF SHW
   MOVWF GEW                                    ;以上7條指令清零時間
   MOVWF DAA
   MOVLW 20H
   MOVWF TEMP                                   ;時間存放單元地址

   BSF  STATUS,RP0
   MOVLW 0X05
   MOVWF OPTION_REG                             ;分頻器給TMR0做定時用,且分頻比1:4
   BCF  STATUS,RP0
   BSF  INTCON,7                                ;開啟中斷總允許位GIE
   BSF  INTCON,5                                ;開啟TMRO中斷允許位
   BCF  INTCON,2                                ;清除TMRO中斷標志位
   MOVLW 0XE0                                   ;TMRO賦初值
   MOVWF TMR0

   CLRF DAA                                    
   INCF DAA,F                                   ;顯示位設置
;**************************************************************
KS  
   CALL DELAY                                   ;調用200ms定時程序
   CALL DELAY
   CALL DELAY
   CALL DELAY
   CALL DELAY                                   ;調用5次,剛好1s
   INCF GEW,F
   MOVF GEW,W                                   ;判斷秒的個位是否夠10
   XORLW .10
   BTFSS STATUS,Z
   GOTO KS                                      ;是,秒的個位清0,秒的十位加1
   INCF SHW,F                                   
   CLRF GEW
   CLRF STATUS
   MOVF SHW,W
   XORLW .6                                     ;判斷秒的十位是否為6(1分鐘60秒)
   BTFSS STATUS,Z
   GOTO KS
   INCF BAW,F                                   ;是,秒的十位清0,分的個位加1
   CLRF SHW
   CLRF STATUS
   MOVF BAW,W
   XORLW .10                                    ;判斷分的各位是否夠10
   BTFSS STATUS,Z
   GOTO KS
   INCF QIW,F                                   ;是,分的個位清0,分的十位加1
   CLRF BAW
   CLRF STATUS
   MOVF QIW,W
   XORLW .6                                     ;判斷分的十位是否夠6(1小時60分)
   BTFSS STATUS,Z
   GOTO KS
   INCF WAW,F                                   ;是,分的十位清0,時的個位加1
   CLRF QIW
   CLRF STATUS
   MOVF WAW,W
   XORLW .4                                     ;判斷時的個位是否夠4(24小時制)
   BTFSS STATUS,Z
   GOTO KS
   INCF YIW,F                                   ;是,時的個位清0,時的十位加1
   CLRF WAW
   CLRF STATUS
   MOVF YIW,W
   XORLW .2                                     ;判斷時的十位是否夠2
   BTFSS STATUS,Z
   GOTO KS
  
   CLRF GEW                                     ;是,使時間回到00-00-00
   CLRF SHW
   CLRF BAW
   CLRF QIW
   CLRF WAW
   CLRF YIW
   GOTO KS                                      ;循環(huán)顯示
;**************************200ms延時程序********************
DELAY 
   NOP
   BANKSEL PIE1
   BCF  PIE1,0                                  ;禁止TMR1中斷
   BANKSEL T1CON
   MOVLW 24H                                    ;TMR1分頻1:4
   MOVWF T1CON
   BCF  PIR1,0
   MOVLW 0X3C
   MOVWF TMR1H
   MOVLW 0XB0
   MOVWF TMR1L                                  ;TMR1賦初值0X3CB0
   BSF  T1CON,0
LOP
   BTFSS PIR1,0                                 ;查詢是否定時時間到
   GOTO LOP
   RETURN
 
;**********************************************************
BMA
   ADDWF PCL,F                                 ;考察偏移量     
   RETLW 0XC0                                  ;"0" 編碼
   RETLW 0XF9                                  ;"1" 編碼
   RETLW 0XA4                                  ;"2" 編碼
   RETLW 0XB0                                  ;"3" 編碼
   RETLW 0X99                                  ;"4" 編碼
   RETLW 0X92                                  ;"5" 編碼
   RETLW 0X82                                  ;"6" 編碼
   RETLW 0XF8                                  ;"7" 編碼
   RETLW 0X80                                  ;"8" 編碼
   RETLW 0X98                                  ;"9" 編碼
   RETLW 0XFF

;**********************************************************
  END                                          ;源程序結束
;***********************************************************
;    進入該實戰(zhàn)演練的工序流程如下:
;    1.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的”記事本”
;   這個為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過有兩點需要注意,一是注釋前面的
;   分號”;”必須用西文半角輸入;二是必須用”.asm”擴展名存儲到事先建立的一個專用子目錄下.
;    2.打開MPLAB集成開發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開始>程序>Microchip MPLAB>MPLAB命令,啟動MPLAB
;   并進入MPLAB的桌面.
;    3.創(chuàng)建項目:選用菜單File>New或Project>New Project,在事先建立的一個專用子目錄下創(chuàng)建一個新項目,將
;   用記事本創(chuàng)建的源文件加入到該項目中.
;    4.建立項目中的目標文件:選擇菜單Project >Build All(項目>建立所有文件),MPLAB將自動調用MPASM將項目
;   文件管理下的源文件(.asm)匯編成十六進制的目標文件(.hex).


临洮县| 柳江县| 盐城市| 北川| 东乡县| 通渭县| 石柱| 临汾市| 江华| 富锦市| 石棉县| 江阴市| 龙海市| 东乌珠穆沁旗| 罗平县| 庄浪县| 海晏县| 务川| 博湖县| 台南县| 新和县| 贵港市| 商洛市| 儋州市| 九龙坡区| 资阳市| 连城县| 开化县| 益阳市| 陆河县| 双鸭山市| 玉溪市| 凌源市| 广西| 濮阳县| 克山县| 县级市| 巴彦县| 汝城县| 堆龙德庆县| 宜阳县|