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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 八位數(shù)碼管動(dòng)態(tài)顯示程序

          八位數(shù)碼管動(dòng)態(tài)顯示程序

          作者: 時(shí)間:2012-10-27 來(lái)源:網(wǎng)絡(luò) 收藏

          這個(gè)是51hei開發(fā)板專區(qū)里轉(zhuǎn)來(lái)的一個(gè)程序,注釋很詳細(xì),運(yùn)行也沒(méi)有問(wèn)題,原文地址:http://www.51hei.com/bbs/dispbbs.asp?boardid=10id=4140

          /*動(dòng)態(tài)數(shù)顯的設(shè)計(jì)思路,首先是我們要先知道怎樣才能使哪個(gè)位亮,顯示的段是什么數(shù)值,接下來(lái)就是中斷時(shí)間
          的問(wèn)題了,設(shè)計(jì)步驟如下,如果要讓八個(gè)數(shù)碼管1到8,我們可以修改中斷時(shí)間,如把50000改成100或更低*/

          #includereg52.h>
          #includeintrins.h>
          #define uint unsigned int
          #define uchar unsigned char
          sbit duan=P2^6;
          sbit wei=P2^7;

          uchar a,numw,numd;
          uchar code tabled[]={
          0x3f,0x06,0x5b,0x4f,0x66,
          0x6d,0x7d,0x07,0x7f,0x6f}; /*第二步驟,創(chuàng)建段顯數(shù)值的對(duì)碼表0~9數(shù)值.如果要顯示1~8數(shù)值,最好多加前后兩位數(shù)0跟9,
          因?yàn)楹竺?+移位時(shí)就能按我們常規(guī)順序亮下去,至于如何顯示對(duì)應(yīng)數(shù)值請(qǐng)先看數(shù)碼顯示電路圖*/
          uchar code tablew[]={
          0xfe,0xfd,0xfb,0xf7,
          0xef,0xdf,0xbf,0x7f}; //第二步驟,創(chuàng)建位顯,就是顯示的位置,這個(gè)碼表相對(duì)簡(jiǎn)單,用二進(jìn)制表示11111110~01111111,是0的為八位數(shù)顯管的位置
          void main()
          {
          a=0; //定義個(gè)時(shí)間函數(shù)
          numw=0; //附位顯初值為0位
          numd=0; //附段顯初值為0位

          TMOD=0X01; //第四步驟,附中斷暫存器初值
          TH0=(65535-50000)/256; //附中斷請(qǐng)求時(shí)間初值,高8位
          TL0=(65536-50000)%256; //附中斷請(qǐng)求時(shí)間初值,低8位
          EA=1; //開啟總中斷
          ET0=1; //開啟定時(shí)中斷
          TR0=1; //啟動(dòng)定時(shí)中斷
          while(1)
          {
          if(a==10) //第三步驟,執(zhí)行速度,如果等20差不多是1秒,則往下執(zhí)行,相當(dāng)于單位數(shù)值亮的時(shí)間
          {
          a=0; //重新附值初值0
          numd++; //段顯值++
          if(numd==9) //如果段值在對(duì)碼表第9位則轉(zhuǎn)下執(zhí)行
          numd=1; /*重新附值段顯值對(duì)應(yīng)對(duì)碼表第1位,因?yàn)?+所以0位并不在數(shù)碼管中顯示.
          如果要顯示,也會(huì)因?yàn)?+而在第二輪中顯示出*/
          duan=1; //開啟段顯端
          P0=tabled[numd];//附段顯P0值對(duì)應(yīng)段顯值對(duì)碼表
          duan=0; //鎖存
          wei=1; //開啟位顯端
          P0=tablew[numw];//附位顯P0值對(duì)應(yīng)位顯值對(duì)碼表
          wei=0; //鎖存
          numw++; //相當(dāng)于位顯移位
          if(numw==8) //如果位顯值到對(duì)應(yīng)位顯對(duì)碼表第八位則轉(zhuǎn)下執(zhí)行
          numw=0; //重新附值位顯值對(duì)應(yīng)對(duì)碼表第0位起
          /*

          下面是簡(jiǎn)單的單個(gè)數(shù)碼管顯示例證 第一驟, 修改后在第三步驟內(nèi)
          #include"reg52.h"
          #include"intrins.h"

          sbit duan=P2^6; //段顯端口
          sbit wei=P2^7; //位顯端口

          void main()
          {
          //P0=0xff; 數(shù)碼管不顯示任何信號(hào),默認(rèn)情況下通電本身就不顯示,可以不寫
          duan=1; //開啟段顯端口
          P0=0x06; //附值段顯數(shù)值為1,可以查閱數(shù)碼管電路圖相對(duì)應(yīng)顯示的對(duì)碼表
          duan=0; //鎖存,保持上一步段顯狀態(tài),硬件說(shuō)明請(qǐng)查閱74HC573功能
          wei=1; //開啟位顯端口
          P0=0xfe; //附值位顯位置,01111111,左邊第一位,為0的顯示
          wei=0; //鎖存,保持上一步位顯狀態(tài),硬件說(shuō)明請(qǐng)查閱74HC573功能
          }
          */

          }
          }
          }

          void timer0() interrupt 1 /*第四步驟,中斷時(shí)間函數(shù)這個(gè)相當(dāng)于移位數(shù)顯的速度,速度夠快,人眼就會(huì)有余輝效應(yīng),
          感覺(jué)8位數(shù)顯一直在亮著,相當(dāng)于正在播放的電影膠卷*/

          {
          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
          a++;
          }

          /*

          以上有什么地方還需要改進(jìn)的還請(qǐng)老師明示

          */

          紅外遙控器相關(guān)文章:紅外遙控器原理


          評(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); })();