国产精品无码一区二区三区A片_无码狠狠躁久久久久久久91_国产精品久久久久久久_国产99九九久久无码熟妇_国产人妻精品久久久久野外_久久夜色精品国产欧美乱极品_91精品国产色综合久久不卡98口_精品人妻系列无码人妻免费视频

技術(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)造無限潛能!

新品推廣

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

新聞中心

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

實(shí)戰(zhàn)九:兩位數(shù)碼動態(tài)顯示實(shí)驗(yàn)

更新時間: 2019-01-05
閱讀量:734

;本例說明動態(tài)顯示二位數(shù)碼管的方法,其實(shí)動態(tài)顯示數(shù)碼管是利用人眼的暫留效應(yīng),即

;輪流讓需顯示的多個數(shù)碼管分別各顯示一段時間,有的朋友可能會問:這樣不是可以看到

;數(shù)碼管在閃爍?不,只要你的掃描速度夠快,人眼是看不到閃爍的,也不是非??旎旧闲∮?/p>

;10MS就可以了,

;程序中使用一個寄存器(DIGIT)作計(jì)數(shù)器,然后將計(jì)數(shù)結(jié)果輸出顯示。

;因?yàn)閿?shù)碼管只能顯示0-9的十進(jìn)制輸出,所以計(jì)數(shù)器DIGIT需轉(zhuǎn)換成十進(jìn)制再輸出,程序中將

;涉及到將十六進(jìn)制轉(zhuǎn)成十進(jìn)制BCD碼的方法。二進(jìn)制調(diào)整為BCD碼的方法是將二進(jìn)制碼左移8次

;每次移位后都檢查低四位LSD+3是否大于7,如果是則再加3,否則不加。接著再將高四位MSD作相同處理

;本程序的功能是:程序復(fù)位后,數(shù)碼管從0開始顯示數(shù)字,直到99,然而又從0到99循環(huán)顯示

;燒寫時應(yīng)注意:配置位已經(jīng)在程序中寫明,加載HEX文件時會自動加載,燒寫時不用再手動設(shè)置配置位。

;實(shí)驗(yàn)時請注意套件跳線選擇

;*

LIST P=16F84A,R=DEC ;定義器件為16F84,默認(rèn)數(shù)制為十進(jìn)制

;—————————————————————————————-

__CONFIG B’11111111110001’;_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC

                                          ;沒有代碼保護(hù)

                                          ;看門狗關(guān)閉

                                          ;上電廷時器開啟

                                          ;振蕩器模式為XT

;——————————-

PC EQU 02H ;變量單元定義

STATUS EQU 03H

PORTA EQU 05H

PORTB EQU 06H

TRISA EQU 5H

TRISB EQU 6H

;———————————-STATUS

RP0 EQU 5

;——————————-

COUNTER EQU 10H

COUNT1 EQU 11H

COUNT2 EQU 12H

TABADD EQU 13H

DISPBUF EQU 14H ;顯示值暫存

DISPBUF_H EQU 15H ;顯示器高位

DISPBUF_L EQU 16H ;顯示器低位

BUFFER EQU 17H

BUFFER1 EQU 18H

SUM EQU 19H

DIGIT EQU 1AH ;0-99計(jì)數(shù)器

;——————————

           ORG 0000H

MAIN

           CLRF        PORTA

           CLRF        PORTB   ;初始化IO口



           BSF         STATUS,RP0 ;設(shè)置寄存器體1

           MOVLW       00000000B  ;將所有IO口設(shè)置為輸出

           MOVWF       TRISA 

           MOVWF       TRISB  

           BCF         STATUS,RP0  ;恢復(fù)寄存器體0



            MOVLW       0FFH       ;先讓數(shù)碼管全部不顯示

            MOVWF       PORTB

              CLRF           DIGIT      ;顯示計(jì)數(shù)器清0

            CLRF        DISPBUF    ;清顯示值

LOOP1

            MOVLW       22

            MOVWF       COUNTER    ;計(jì)數(shù)器0.2秒鐘加1   22*9.2MS=0.2s

LOOP1_1

            CALL        DISP       ;調(diào)用顯示子程序

            DECFSZ      COUNTER,1   ;顯示0.2秒鐘

            GOTO        LOOP1_1

      INCF           DIGIT,1       ;計(jì)數(shù)器加1

      MOVLW        8

      MOVWF        COUNTER          ;循環(huán)左移計(jì)數(shù)器置8

      CLRF           BUFFER          ;清除緩沖器

      MOVF           DIGIT,W   

      MOVWF        BUFFER1         

LOOP2

            RLF            BUFFER1,1         ;二進(jìn)制數(shù)轉(zhuǎn)換成BCD碼(以便顯示)

      RLF          BUFFER,1

      DECFSZ       COUNTER,1          ;左移8次

      GOTO           ADJUST             ;

      MOVFW           BUFFER

      MOVWF        DISPBUF         ;是否有進(jìn)位(即已達(dá)100),如已計(jì)數(shù)到100則

      SKPC                        ;從0開始再計(jì)數(shù)顯示(顯示00~99)

      GOTO           LOOP1

      GOTO           MAIN

ADJUST

            MOVLW        3               ;二進(jìn)制轉(zhuǎn)BCD的調(diào)整

      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

;- ————————————————————-

DELAY ;顯示廷時常數(shù),廷時時間為32556+6us+4us=4.6ms

            MOVLW        6

      MOVWF        COUNT1

L2

        MOVLW        255

      MOVWF        COUNT2

L3

            DECFSZ       COUNT2,1        

        GOTO           L3

      DECFSZ       COUNT1,1

      GOTO           L2

        RETLW        0

;—————————— —————————————————

DISP

         SWAPF      DISPBUF,W         ;顯示值高低位交換,先處理高位

         ANDLW      0FH               ;屏蔽掉高位

         MOVWF      DISPBUF_H         ;存入寄存器

         MOVFW      DISPBUF           ;顯示值低位處理

         ANDLW      0FH               ;屏蔽掉高位

         MOVWF      DISPBUF_L         ;存入寄存器

         MOVLW      0FFH

         MOVWF      PORTB             ;先熄滅數(shù)碼管以免閃爍

         BSF        PORTA,1

         BCF        PORTA,2           ;先顯示低位

         MOVLW      TABLE

         MOVWF      TABADD           ;將轉(zhuǎn)換表的首地址存入TABADD  

         MOVFW      DISPBUF_L        ;計(jì)數(shù)值(W)與轉(zhuǎn)換表的起始地址相加

         ADDWF      TABADD,W

         CALL       CONVERT          ;存入W后調(diào)用轉(zhuǎn)換表子程序

         MOVWF      PORTB            ;送RB口顯示

         CALL       DELAY            ;廷時4。7MS



         MOVLW      0FFH             ;同樣方法顯示高位

         MOVWF      PORTB

         BSF        PORTA,2

         BCF        PORTA,1

         MOVLW      TABLE

         MOVWF      TABADD

         MOVFW      DISPBUF_H

         ADDWF      TABADD,W

         CALL       CONVERT

         MOVWF      PORTB

         CALL       DELAY

         RETLW      0

;———————————————————————————-

CONVERT

        MOVWF        PC                    ;將W寄存器內(nèi)的7段顯示碼地址放入PC 

TABLE ;PC執(zhí)行新地址指令, 跳到相對的地址執(zhí)行?

  RETLW        081H                ;0  ;RETLW指令,將七段顯示碼存入W后返回

  RETLW        0E7H                ;1                                

  RETLW        092H                ;2

  RETLW        0A2H                ;3

  RETLW        0E4H                ;4

  RETLW        0A8H                ;5

  RETLW        088H                ;6

  RETLW        0E3H                ;7

  RETLW        080H                ;8

  RETLW        0A0H                ;9

;——- ———————————————————————-

 END