色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

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

            一、 試驗(yàn)現(xiàn)象

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

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

            二、 試驗(yàn)?zāi)康?/p>

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

            掌握查表指令movc的用法

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

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

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

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

            

           

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

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

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

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

            四、試驗(yàn)程序

            org 0000h

            clr p1.5

            main: mov r7,#0ffh

            mov r6,#0ffh

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

            lcall play2 ;調(diào)用顯示位碼子程序

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

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

            ljmp main

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

            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

            五、注釋:

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

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

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

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

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

            

           

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

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

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

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

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

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

            六、課后練習(xí):

            1、學(xué)習(xí)該程序中出現(xiàn)的理論知識(shí)

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



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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉