天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術(shù)熱線: 4007-888-234
設(shè)計(jì)開發(fā)

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

開發(fā)工具

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

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!

新聞中心

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

用三位數(shù)碼管顯示八位AD數(shù)值

更新時(shí)間: 2019-03-26
閱讀量:2342

;************************************
      LIST   P=16F877              ;列表偽指令
      INCLUDE "P16F877.INC"        ;把包含文件含入源程序
;************************************
RTCC  EQU  01H
W_TEMP  EQU  20H
STATUS_TEMP EQU  21H
FLAGS  EQU  22H
TABADD  EQU  23H
DISPBUF_L EQU  24H
DISPBUF_H EQU  25H
DISP1BUF_L EQU  26H
DISP1BUF_H EQU  27H
SOU   EQU  28H
SOUH  EQU  29H
TEMP1  EQU  30H
TEMP2  EQU  31H
CNT   EQU  32H

 

;************************************
        ORG        0000H

 GOTO    START
        ORG        0008H
;-------------------------------------------------
CONVERT   
        MOVWF      PCL              ;W寄存器內(nèi)的7段顯示碼地址放入PC
TABLE                              ;PC執(zhí)行新地址指令, 跳到相對的地址執(zhí)行?               
     RETLW      0C0H           ;0  ;RETLW指令,將七段顯示碼存入W后返回
     RETLW      0F9H       ;1                                
     RETLW      0A4H       ;2
     RETLW      0B0H       ;3
     RETLW      099H       ;4
     RETLW      092H       ;5
     RETLW      082H        ;6
        RETLW      0F8H           ;7
     RETLW      080H       ;8
     RETLW      090H       ;9
;----- -----------------------------------------------

START
        BANKSEL    PORTC            ;選擇同PORTC寄存器相同的體
       CLRF       PORTC            ;PORTC
      MOVLW      B'10000001'     ;選擇:時(shí)鐘時(shí)鐘源為FOSC/8,允許ADC工作
      MOVWF      ADCON0           ;通道AN0,暫時(shí)不啟動轉(zhuǎn)換過程

 

       BANKSEL    OPTION_REG       ;選擇寄存器OPTION_REG的體為當(dāng)前體
      CLRF       TRISC            ;PORTC所有管腳設(shè)為輸出(LED)
       MOVLW      B'00001110'      ;轉(zhuǎn)換結(jié)果左對齊,只選1個(gè)A/D通道RA0/AN0
       MOVWF      ADCON1           ;選擇VDDVSS作參考源
        MOVLW    01H    ;設(shè)置RA0為輸入,其它為輸出
     MOVWF    TRISA
        BANKSEL    PORTC            ;選中同寄存器PORTC的體為當(dāng)前體
;---------------------------------
MAIN    BSF     ADCON0,GO           ;開啟A/D轉(zhuǎn)換過程
  CALL  DELAY
WAIT
        BTFSS   PIR1,ADIF           ;等待A/D轉(zhuǎn)換過程結(jié)束,檢測ADC中斷標(biāo)志位

GOTO   WAIT                ;如果沒有轉(zhuǎn)換結(jié)束,則返回循環(huán)檢測
       MOVF   ADRESH,W            ;如果轉(zhuǎn)換完畢,則把A/D結(jié)果讀到W
     MOVWF  SOU
     CALL    SBTBCD2
        SWAPF  SOU,W               ;顯示值高低位交換,先處理高位
       ANDLW  0FH              ;屏蔽掉高位
        MOVWF   DISPBUF_H          ;存入寄存器
        MOVFW  SOU              ;顯示值低位處理
        ANDLW  0FH              ;屏蔽掉高位
        MOVWF  DISPBUF_L        ;存入寄存器        
       SWAPF  SOUH,W              ;顯示值高低位交換,先處理高位
       ANDLW  0FH              ;屏蔽掉高位
        MOVWF  DISP1BUF_H          ;存入寄存器
        MOVFW  SOUH              ;顯示值低位處理
        ANDLW  0FH              ;屏蔽掉高位
        MOVWF  DISP1BUF_L          ;存入寄存器
     CALL  DISPLAY       
        GOTO  MAIN                ;循環(huán)進(jìn)行A/D轉(zhuǎn)換
;***************************************************
DISPLAY

    MOVLW       0FFH
        MOVWF       PORTC             ;先熄滅所有數(shù)碼管以免閃爍
       MOVLW  03EH
  MOVWF  PORTA   
        MOVLW       TABLE
        MOVWF       TABADD           ;將轉(zhuǎn)換表的首地址存入TABADD  
        MOVFW       DISPBUF_L        ;計(jì)數(shù)值(W)與轉(zhuǎn)換表的起始地址相加
  ADDWF  TABADD,W
  CALL  CONVERT
  MOVWF  PORTC
  BCF   PORTA,4
  CALL  DELAY
  BSF   PORTA,4
  MOVFW       DISPBUF_H        ;計(jì)數(shù)值(W)與轉(zhuǎn)換表的起始地址相加
  ADDWF  TABADD,W
  CALL  CONVERT
  MOVWF  PORTC
  BCF   PORTA,5
  CALL  DELAY
  BSF   PORTA,5
  MOVFW       DISP1BUF_L        ;計(jì)數(shù)值(W)與轉(zhuǎn)換表的起始地址相加
  ADDWF  TABADD,W
  CALL  CONVERT
  MOVWF  PORTC
  BCF   PORTA,2
  CALL  DELAY
  BSF   PORTA,2
  RETURN                
;********************SBTBCD2********************

;本程序?qū)崿F(xiàn)單字節(jié)二進(jìn)制數(shù)轉(zhuǎn)化為2字節(jié)壓縮BCD碼。
;入口參數(shù):原二進(jìn)制數(shù)在SOU中。
;出口參數(shù):結(jié)果在SOUH:SOU中。
;占用資源:W,STATUS,023H,024H,025H,028H,029H,兩重堆棧。

 

           IFNDEF       SBTBCD21
            #DEFINE     SBTBCD21
                        
SBTBCD2     MOVF        SOU,W
            MOVWF       TEMP2
            CLRF        SOU
            CLRF        SOUH
            BCF         STATUS,C
            MOVLW       8
            MOVWF       CNT
LOOPC       RLF         TEMP2,F
            RLF         SOU,F

   RLF         SOUH,F
            DECFSZ      CNT,F
            GOTO        ADJDEC         
            RETURN                  ;整個(gè)子程序結(jié)束
ADJDEC      MOVLW       SOU
            MOVWF       FSR
            CALL        ADJBCD      ;調(diào)整SOU
            MOVLW       SOUH
            MOVWF       FSR
            CALL        ADJBCD      ;調(diào)整SOUH
            GOTO        LOOPC
;********************調(diào)整BCD********************
ADJBCD      MOVLW       03H
            ADDWF       INDF,W      ;低四位加3
            MOVWF       TEMP1       ;暫存
            BTFSC       TEMP1,3     ;結(jié)果大于7,
            MOVWF       INDF        ;則存起來
            MOVLW       30H
            ADDWF       INDF,W      ;高四位加3
            MOVWF       TEMP1              
            BTFSC       TEMP1,7     ;結(jié)果大于7,
            MOVWF       INDF        ;則存起來
            RETLW       0
           ENDIF
;**********************************************
DELAY    MOVLW  0FFH
   MOVWF  034H
LP0   NOP
   NOP

 NOP
   NOP
   NOP
   DECFSZ  034H
   GOTO  LP0
   RETURN
;---------------------------------
      END                         ;源程序結(jié)束


联系我们: 丹阳市| 焦作市| 庆城县| 营口市| 麻栗坡县| 固原市| 阳春市| 玉环县| 晋城| 玛纳斯县| 修水县| 西乌| 康定县| 沭阳县| 长岛县| 潞城市| 米脂县| 富宁县| 纳雍县| 灵川县| 惠安县| 冷水江市| 色达县| 登封市| 赤峰市| 孟连| 密山市| 长春市| 瑞安市| 象山县| 休宁县| 乌兰察布市| 长葛市| 涿州市| 杂多县| 崇州市| 贡觉县| 根河市| 砚山县| 琼中| 上犹县|