PIC16f877A AD转换LED显示8位值

来源:本站
导读:目前正在解读《PIC16f877A AD转换LED显示8位值》的相关信息,《PIC16f877A AD转换LED显示8位值》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《PIC16f877A AD转换LED显示8位值》的详细说明。
简介:本文为大家提供一个PIC16f877A AD转换LED显示8位值的代码。

;****************list  p=16f877A    ; list directive to define processor#include <p16f877A.inc> ; processor specific variable definitions__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF;---------------------COUNTER    EQU    20H                    ;计数寄存器COUNT1    EQU    21HCOUNT2    EQU    22HTABADD    EQU    23H                    ;查表地址寄存器DISPBUF    EQU    24H                    ;显示值暂存DISPBUF_H  EQU    25H                    ;显示器高位DISPBUF_L  EQU    26H                    ;显示器低位BUFFER    EQU    27H                    ;BCD十进制结果存放BUFFER1    EQU    28H                    ;BCD转换缓存SUM        EQU    29H                    ;校正+3缓存DIGIT      EQU    2AH                    ;数据显示寄存器HB        EQU    2BH                    ;百位寄存器;--------------------            ORG        0000H                        NOP            GOTO        MAIN            ORG        0005HMAIN;**********************    初始化程序    *********************************                        CLRF        PORTA              CLRF        PORTC            ;初始化IO口                  BSF        STATUS,RP0        ;设置寄存器体1              MOVLW      0EH              ;转换结果左对齐,只选1个A/D通道RA0/AN0              MOVWF      ADCON1            ;选择VDD和VSS作参考源              MOVLW      01H              ;RA0为模拟输入              MOVWF      TRISA            ;RA1~5为输出                      MOVLW      00H              ;RC为LED段输出              MOVWF      TRISC                BCF        STATUS,RP0        ;恢复寄存器体0                MOVLW      0FFH              ;先让数码管全部不显示              MOVWF      PORTC          MOVWF      PORTA              MOVLW      81H              ;选择:时钟时钟源为FOSC/8,允许ADC工作              MOVWF      ADCON0            ;通道AN0,暂时不启动转换过程              CLRF        DISPBUF          ;清显示值                  ;********************************************************************************              ADC                BSF        ADCON0,GO            ;开启A/D转换过程                BTFSS      PIR1,ADIF            ;等待A/D转换过程结束,检测ADC中断标志位                GOTO      ADC                  ;如果没有转换结束,则返回循环检测                MOVF      ADRESH,W              ;仅取高8位,把A/D结果读到W                MOVWF      DIGIT                ;注入显示寄存器          ;********************************  BCD  ********************************              LOOP1                                CALL        DISP            ;调用显示子程序            MOVLW    8          MOVWF    COUNTER      ;循环左移计数器置8            CLRF    BUFFER          ;清除缓冲器          MOVF    DIGIT,W            MOVWF    BUFFER1        LOOP2                    RLF        BUFFER1,1      ;二进制数转换成BCD码(以便显示)            RLF      BUFFER,1            DECFSZ    COUNTER,1      ;左移8次          GOTO    ADJUST          ;          MOVFW    BUFFER          MOVWF    DISPBUF        ;是否有进位(即已达100),如已计数到100则          GOTO    ADC            ;GOTO    MAINADJUST                    MOVLW    3              ;二进制转BCD的调整            ADDWF    BUFFER,W    ;每次移位后都检查低四位LSD+3是否大于7            MOVWF    SUM                      BTFSC    SUM,3          MOVWF    BUFFER          MOVLW    30H          ADDWF    BUFFER,W        ;如果是则再加3,否则不加。          MOVWF    SUM          BTFSC    SUM,7          MOVWF    BUFFER          ;接着再将高四位MSD作相同处理            GOTO    LOOP2;********************************  显示程序  ***************************DISP              CLRF      HB              MOVLW      0C8H                ; 送入199至W,              SUBWF      DIGIT,W            ; F-W                  BTFSC      STATUS,C            ; 检测C是否出现借位              GOTO      HB200              ; F>199,百位数显示2              MOVLW      64H                ; F<199,再送99至W              SUBWF      DIGIT,W            ; F-W              BTFSC      STATUS,C            ; 检测C是否出现借位                    GOTO      HB100              ; 199>F>99,百位数显示1              GOTO      DISP10              ; F<99,百位不显示HB200        MOVLW      2H              MOVWF      HB                  ;百位显示数移入寄存器              GOTO      DISP100HB100        MOVLW      1H              MOVWF      HB                  ;百位显示数移入寄存器              DISP100      MOVLW      0FFH                ;显示百位            MOVWF      PORTC            BCF        PORTA,2              ;RA2为百位显示            BSF        PORTA,5            BSF        PORTA,4            MOVLW      TABLE                ;查表            MOVWF      TABADD            MOVF      HB,W            ADDWF      TABADD,W            CALL      CONVERT            MOVWF      PORTC                ;显示内容送RC            CALL      DELAYDISP10      MOVF      DISPBUF,W        ;显示值低位处理            ANDLW      0FH              ;屏蔽掉高位            MOVWF      DISPBUF_L        ;存入寄存器                        SWAPF      DISPBUF,W        ;显示值高低位交换,先处理高位            ANDLW      0FH              ;屏蔽掉高位            MOVWF      DISPBUF_H        ;存入寄存器            MOVF      HB,W            ADDWF      DISPBUF_H,W      ;如果百位和十位同为零不显示            BTFSC      STATUS,Z            GOTO      DISP01            MOVLW      0FFH              ;显示十位            MOVWF      PORTC            ;先熄灭数码管以免闪烁            BCF        PORTA,5          ;先显示低位            BSF        PORTA,2            BSF        PORTA,4            MOVLW      TABLE            MOVWF      TABADD            ;将转换表的首地址存入TABADD              MOVFW      DISPBUF_H        ;计数值(W)与转换表的起始地址相加            ADDWF      TABADD,W            CALL      CONVERT          ;存入W后调用转换表子程序            MOVWF      PORTC            ;送RB口显示            CALL      DELAY            ;廷时4。7MSDISP01      MOVLW      0FFH              ;同样方法显示个位            MOVWF      PORTC            BCF        PORTA,4            BSF        PORTA,2            BSF        PORTA,5            MOVLW      TABLE            MOVWF      TABADD            MOVFW      DISPBUF_L            ADDWF      TABADD,W            CALL      CONVERT            MOVWF      PORTC            CALL      DELAY            RETLW      0          ;******************************  查表显示  *****************************************CONVERT              MOVWF    PCL            ;将W寄存器内的7段显示码地址放入PCTABLE                                  ;PC执行新地址指令, 跳到相对的地址执行?                        RETLW    0C0H      ;0              RETLW    0F9H      ;1                                          RETLW    0A4H      ;2          RETLW    0B0H      ;3          RETLW    099H      ;4          RETLW    092H      ;5          RETLW    082H      ;6          RETLW    0D8H      ;7          RETLW    080H      ;8          RETLW    090H      ;9;***************************    延时程序    ************************************DELAY                      ;显示廷时常数,廷时时间为3*255*6+6us+4us=4.6ms            MOVLW    06H;6H;      MOVWF    COUNT1L2                MOVLW    0FFH;0FFH;      MOVWF    COUNT2L3                DECFSZ    COUNT2,1                GOTO    L3      DECFSZ    COUNT1,1      GOTO    L2        RETLW    0    ;***********************************************************************              END

提醒:《PIC16f877A AD转换LED显示8位值》最后刷新时间 2024-03-14 01:00:17,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《PIC16f877A AD转换LED显示8位值》该内容的真实性请自行鉴别。