<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)經(jīng)典實(shí)驗(yàn)實(shí)例精華詳解(附源程序) (三)

          單片機(jī)經(jīng)典實(shí)驗(yàn)實(shí)例精華詳解(附源程序) (三)

          作者: 時(shí)間:2013-05-26 來源:網(wǎng)絡(luò) 收藏
          二、兩位數(shù)碼管循環(huán)顯示00~99的實(shí)驗(yàn)

            現(xiàn)在讓我們用實(shí)驗(yàn)板上的兩個(gè)數(shù)碼管來做一個(gè)循環(huán)顯示00~99數(shù)字的實(shí)驗(yàn),先來完成必要的硬件部分,

            數(shù)碼管有共陰和共陽的區(qū)分,都可以進(jìn)行驅(qū)動(dòng),但是驅(qū)動(dòng)的方法卻不同,并且相應(yīng)的0~9的顯示代碼也正好相反。

            首先我們來介紹兩位共陽數(shù)碼管的驅(qū)動(dòng)方法,電路如下圖:

            單片機(jī)經(jīng)典實(shí)驗(yàn)實(shí)例精華詳解(附源程序) (三) 單片機(jī)經(jīng)典實(shí)驗(yàn)實(shí)例精華詳解(附源程序) (三)

            網(wǎng)友可以看到:P2.6和P2.7端口分別控制數(shù)碼管的十位和個(gè)位的供電,當(dāng)相應(yīng)的端口變成低電平時(shí),驅(qū)動(dòng)相應(yīng)的三極管會(huì)導(dǎo)通,+5V通過IN4148二極管和驅(qū)動(dòng)三極管給數(shù)碼管相應(yīng)的位供電,這時(shí)只要P0口送出數(shù)字的顯示代碼,數(shù)碼管就能正常顯示數(shù)字。

            因?yàn)橐@示兩位不同的數(shù)字,所以必須用動(dòng)態(tài)掃描的方法來實(shí)現(xiàn),就是先個(gè)位顯示1毫秒,再十位顯示1毫秒,不斷循環(huán),這樣只要掃描時(shí)間小于1/50秒,就會(huì)因?yàn)槿搜鄣囊曈X殘留效應(yīng),看到兩位不同的數(shù)字穩(wěn)定顯示。

            下面我們?cè)俳榻B一種共陰數(shù)碼管的驅(qū)動(dòng)方法,電路如下圖:

            單片機(jī)經(jīng)典實(shí)驗(yàn)實(shí)例精華詳解(附源程序) (三)

            網(wǎng)友可以看到:+5V通過1K的排阻直接給數(shù)碼管的8個(gè)段位供電,P2.6和P2.7端口分別控制數(shù)碼管的十位和個(gè)位的供電,當(dāng)相應(yīng)的端口變成低電平時(shí),相應(yīng)的位可以吸入電流。單片機(jī)的P0口輸出的數(shù)據(jù)相當(dāng)于將數(shù)碼管不要顯示的數(shù)字段對(duì)地短路,這樣數(shù)碼管就會(huì)顯示需要的數(shù)字。

            網(wǎng)友可以看到,共陰數(shù)碼管的硬件更簡(jiǎn)單,所以在批量生產(chǎn)時(shí),硬件開銷小,節(jié)省PCB面積,減少焊接工作量,降低綜合成本,所以采用共陰數(shù)碼管更有利于批量生產(chǎn),現(xiàn)在銷售的試驗(yàn)板都是采用共陰數(shù)碼管了。

            以下是用AT89C51實(shí)驗(yàn)板的兩位數(shù)碼管顯示00~99依次循環(huán)的匯編語言程序

            a_bit equ 20h ;數(shù)碼管個(gè)位數(shù)存放內(nèi)存位置

            b_bit equ 21h ;數(shù)碼管十位數(shù)存放內(nèi)存位置

            temp equ 22h ;計(jì)數(shù)器數(shù)值存放內(nèi)存位置

            star: mov temp,#0 ;初始化計(jì)數(shù)器,從0開始

            stlop: acall display;調(diào)用顯示子程序

            inc temp;對(duì)計(jì)數(shù)器加1

            mov a,temp

            cjne a,#100,next ;判斷計(jì)數(shù)器是否滿100?

            mov temp,#0;滿100就清零重新開始

            next: ljmp stlop;不滿就循環(huán)執(zhí)行

            ;顯示子程序

            display: mov a,temp ;將temp中的十六進(jìn)制數(shù)轉(zhuǎn)換成10進(jìn)制

            mov b,#10 ;10進(jìn)制/10=10進(jìn)制

            div ab

            mov b_bit,a ;十位在a

            mov a_bit,b ;個(gè)位在b

            mov dptr,#numtab ;指定查表啟始地址

            mov r0,#4

            dpl1: mov r1,#250 ;

            dplop: mov a,a_bit ;取個(gè)位數(shù)

            MOVC A,@A+DPTR ;查個(gè)位數(shù)的7段代碼

            mov p0,a ;送出個(gè)位的7段代碼

            clr p2.7 ;開個(gè)位顯示

            acall d1ms ;顯示162微秒

            setb p2.7;關(guān)閉個(gè)位顯示,防止鬼影

            mov a,b_bit ;取十位數(shù)

            MOVC A,@A+DPTR ;查十位數(shù)的7段代碼

            mov p0,a ;送出十位的7段代碼

            clr p2.6 ;開十位顯示

            acall d1ms ;顯示162微秒

            setb p2.6;關(guān)閉十位顯示,防止鬼影

            djnz r1,dplop ;循環(huán)執(zhí)行250次

            djnz r0,dpl1 ;循環(huán)執(zhí)行250X4=1000次

            ret

            ;2+2X80=162微秒,延時(shí)按12MHZ計(jì)算

            D1MS: MOV R7,#80

            DJNZ R7,$

            RET

            ;實(shí)驗(yàn)板上的7段數(shù)碼管0~9數(shù)字的共陰顯示代碼

            numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH

            end

            ;如果是共陽數(shù)碼管的顯示代碼

            numtab: DB 30H,0FCH,0A2H,0A4H,06CH,25H,21H,0BCH,20H,24H

          單片機(jī)相關(guān)文章:單片機(jī)教程


          單片機(jī)相關(guān)文章:單片機(jī)視頻教程


          單片機(jī)相關(guān)文章:單片機(jī)工作原理




          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();