<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

作者: 時(shí)間:2016-09-26 來(lái)源:電子產(chǎn)品世界 收藏

  一、 試驗現象

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

  8個(gè)顯示多位數9876.5432

  二、 試驗目的

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

  掌握查表指令movc的用法

  三、 試驗任務(wù)分析

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

  我們大家都知道電影的原理,它播放的實(shí)際上是一個(gè)個(gè)獨立的畫(huà)面,只不過(guò)由于我們視覺(jué)上的暫留作用,使得我們感覺(jué)畫(huà)面是連續的。

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

  

 

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

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

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

  下面就是按照這個(gè)思路編寫(xiě)的程序。

  四、試驗程序

  org 0000h

  clr p1.5

  main: mov r7,#0ffh

  mov r6,#0ffh

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

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

  lcall delay ;調用1ms延時(shí)程序

  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 ;延時(shí)1ms子程序

  del2: mov r3,#0ffh

  del3: djnz r3,del3

  djnz r4,del2

  ret

  end

  五、注釋?zhuān)?/p>

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

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

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

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

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

  

 

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

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

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

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

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

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

  六、課后練習:

  1、學(xué)習該程序中出現的理論知識

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



關(guān)鍵詞: 數碼管

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>