在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機學習之九:多位數碼動態(tài)顯示

            單片機學習之九:多位數碼動態(tài)顯示

            作者: 時間:2016-09-26 來源:電子產品世界 收藏

              一、 試驗現象

            本文引用地址:http://www.biyoush.com/article/201609/310315.htm

              8個顯示多位數9876.5432

              二、 試驗目的

              掌握多位數碼動態(tài)顯示的原理和編程方法

              掌握查表指令movc的用法

              三、 試驗任務分析

              通過試驗四的分析我們知道,各個的段碼都是p0口的輸出,也就是說,各個輸入的段碼都是一樣的。那么怎樣讓8個數碼管顯示不同的數字呢?

              我們大家都知道電影的原理,它播放的實際上是一個個獨立的畫面,只不過由于我們視覺上的暫留作用,使得我們感覺畫面是連續(xù)的。

              多位數碼顯示也可以采用這個原理,我們先只讓最低位顯示2,經過一段延時,再只讓次低位顯示3,如此類推。只要我們的延時時間足夠短,就能夠使得數碼的顯示看起來非常的穩(wěn)定清楚。試驗證明這個延時采用1~5ms即可,過程如下圖所示。

              

             

              在本例中,由于我們需要反復的把不同的段碼送到P0,把位碼送到P2,因此把這兩個過程編制成兩個子程序,然后反復調用,這樣一方面使得程序簡化,另一方面使得程序的可讀性增強。

              在這兩個子程序中,由于我們要依次輸出不同的段碼和位碼,如果逐次給P0或者P2賦值,一方面程序的復雜程度增加,另外一方面會使得程序的靈活性降低。設想一下,如果我們要改變顯示的數字,那么程序改動起來多么麻煩。

              所以我們采用如下的辦法,以P0口輸出段碼為例:我們可以把要顯示的段碼放在一個表格中,然后每次從這個表格里面取數,送到P0口即可。這樣,如果要改變顯示的數字,只需要改變表格里面的數就可以拉。

              下面就是按照這個思路編寫的程序。

              四、試驗程序

              org 0000h

              clr p1.5

              main: mov r7,#0ffh

              mov r6,#0ffh

              loop: lcall play1 ;調用顯示段碼子程序,具體含義見注釋(1)

              lcall play2 ;調用顯示位碼子程序

              lcall delay ;調用1ms延時程序

              cjne a,#80h,loop ;判斷是否顯示到最左邊的數

              ljmp main

              play1: mov a,r7 ;查表求段碼子程序,詳細解釋可參考注釋

              inc a

              mov r7,a

              mov dptr,#table1

              movc a,@a+dptr

              mov p0,a

              ret

              play2: mov a,r6 ;查表求位碼子程序

              inc a

              mov r6,a

              mov dptr,#table2

              movc a,@a+dptr

              mov p2,a

              ret

              table1: db 52h,62h,0e1h,64h ;存放段碼

              db 04h,0eah,40h,60h

              table2: db 01h,02h,04h,08h ;存放位碼

              delay: mov r4,#02h ;延時1ms子程序

              del2: mov r3,#0ffh

              del3: djnz r3,del3

              djnz r4,del2

              ret

              end

              五、注釋:

              1、首先看看(1)語句,根據上面的分析我們知道,它的意思是調用把段碼送到P0口的子程序play1。

              2、分析play1子程序,根據上面的分析我們可以大致知道,它是通過查表的方法,來求的段碼的。

              那么表格在哪里?大家看到標號為table1的語句沒有?它就是存放段碼的表格。它把從最低位到最高位的段碼依次的放在這個表格里面。

              在這里,db也是一個偽指令,它的意思是把后面的數字或者字符(用ASCII代碼)存入從標號開始的連續(xù)單元里面。也就是說標號table1對應的地址單元里面存的是52h,table+1對應的地址單元里面存的是62h。

              假設table1對應的地址單元是0029h,那么0029h單元里面存放的是52h,002A單元里面存放的是62h,如下圖所示。那么,怎樣從表格中取得我們要的數呢?步驟如下:

              

             

              (1) 首先給a賦值(a)=00h。

              (2) 然后獲得table1的地址,如0029h,存入dptr寄存器,即(dptr)=0029h

              (3) 接下來把a的內容和dptr的內容相加相加,即00h+0029h=0029h,這就是表格里面第一個數的地址啦。

              (4) 然后把a中的數加1,即(a)=01h

              (5) 重復上面的第三步,就可以找到表格中的第二個數62h的地址啦。Play1子程序就是按照這樣的方法編寫的,大家參照有關的教材自己分析吧。

              3、play2子程序是給p2口送位碼的子程序,方法和play1一樣,這里就不再贅述了。同理,table2表格中存放的就是每個數碼管的位碼了。

              六、課后練習:

              1、學習該程序中出現的理論知識

              2、編寫一個程序,讓1個數碼管計數,從0到9。一秒種變化一次



            關鍵詞: 數碼管

            評論


            相關推薦

            技術專區(qū)

            關閉