免费色播,亚洲国产欧美国产第一区二区三区,毛片看,日本精品在线观看视频,国产成人精品一区二区免费视频,日本黄色免费网站,一级毛片免费

LED顯示搖棒DIY制作

來源:網(wǎng)絡(luò)

點擊:1254

A+ A-

所屬頻道:新聞中心

關(guān)鍵詞:LED,搖棒,DIY制作

      情人節(jié)我們做電的兄弟們送什么禮物給心儀已久的MM?給大家提供一個適合作為禮物的簡單電路,自己動手做的漂亮玩具一定會是送給MM的最好的禮物。

     

      顯示效果圖片

      LED顯示搖棒制作

     

      原理圖

      LED顯示搖棒制作

     

      以下是詳細說明:

      圖形顯示的原理:

      利用人眼的視覺暫留效應(yīng),使手在擺動到不同位置的時候,讓位于一條直線上的LED顯示二維圖像的不同的列,實現(xiàn)圖形掃描顯示。

      物理機制:

      當(dāng)我們在擺動手臂的時候,短時間內(nèi)擺動位置和左右幅度不會有太大變化,利用我們手臂的這個運動規(guī)律,只要能得到棒從一側(cè)擺動到另一側(cè)的時間,然后把這個時間分成N份,然后在每一份的時間里顯示不同的花樣就能實現(xiàn)圖形的顯示。當(dāng)我們在擺動手臂的時候,并不能預(yù)先得知此次擺動需要的時間,怎樣得到從一側(cè)擺動到另一側(cè)的時間呢?

      再想想,短時間內(nèi)我們手臂的擺動頻率也不會有特別大的變化,我們只要能得到前一次擺動所用的時間,然后用這個時間近似得到下一次擺動所需要的時間,然后分N份就可以了。得到一次擺動所需的時間的任務(wù)由光遮斷器完成,在棒上裝一個可以擺動的用來遮擋光遮斷器光線的細桿,粗細比光遮斷器的狹縫稍寬,我用的是整流橋焊后剪下的一段管腳。每左右擺動一次這個桿就會通過一次光遮斷器,使單片機產(chǎn)生一次中斷,兩次中斷之間的時間就是想要得到的時間,實現(xiàn)這個功能用掉2051的一個定時器T0和外部中斷INT0。然后用2051的另一個定時器T1,其定時時間是T0的N分之一,每次中斷依次顯示一列,就是照片上的效果。

      再細想一下,手臂擺動的頻率大于2Hz的時候才大概能由視覺暫留看出圖形,再快也不過十幾Hz,由T0為16位定時器的最長計時時間得到2051的時鐘頻率1MHz最合適,還有遮擋用的細桿的粗細也可以大概估算,使其不會對計時精度產(chǎn)生太大影響。

      所用元件:

      AT89C2051 8元

      高亮LED共8個 3.6元

      電池盒 0.5元

      單面萬用板 8元 可以裁成3塊,做3個搖棒

      陶瓷諧振器 1元

      光遮斷器 2元

      電阻電容導(dǎo)線 2元

      外殼* 0.7元 可以裁成2塊

      可選元件:

      電源開關(guān) 1元

      總成本不超過20元

      *外殼我用在家樂福買的半透明文件夾卷成的

      此電路電路非常簡單,代碼短,但是用到了2051的外部中斷編程和T0、T1定時器編程,非常適合初學(xué)者練習(xí)。我制作這個玩具花費了兩個晚上的時間。此電路和程序還有擴展改進的空間,如在長時間不擺動的情況下可以使單片機進入省電模式,顯示不僅限于對稱圖片等,大家可以試試。

      以下是源程序:

      /*************************************************************************/

      // ---------------

      // LED顯示搖棒

      // ---------------

      // 作者:nim 于 http://www.21icbbs.com 2005-1-7

      //

      // email: linyige@yahoo.com

      //

      // 本設(shè)計版權(quán)歸作者所有,請勿擅自用于商業(yè)目的,轉(zhuǎn)載請注明作者及出處

      /*************************************************************************/

      #include< P>

      #define SEG 17 //每幀圖片分成17列來顯示

      #define INTERVAL 20 //每幅圖片在左右搖擺20次后換下一幅

      typedef unsigned char uchar;

      typedef unsigned int uint;

      code char pattern[17][3]={ //3幅圖片的字模

      {0xff,0xff,0xff},

      {0xff,0xff,0xff},

      {0xff,0xff,0xff},

      {0xff,0x9f,0xff},

      {0xff,0x6f,0xf9},

      {0xff,0x77,0x65},

      {0xfe,0xbb,0x1e},

      {0x7e,0xdd,0xfe},

      {0x00,0xee,0xfe},

      {0x7e,0xdd,0xfe},

      {0xfe,0xbb,0x1e},

      {0xff,0x77,0x65},

      {0xff,0x6f,0xf9},

      {0xff,0x9f,0xff},

      {0xff,0xff,0xff},

      {0xff,0xff,0xff},

      {0xff,0xff,0xff},

      };

      uchar phase,th1,tl1,index,count;

      main()

      {

      EA=0;

      EX0=1;

      ET1=1;

      PX0=1;

      IT0=1;

      TMOD=0x11;

      index=0;

      EA=1;

      while(1)

      {

      }

      }

      void Int0_Handle(void) interrupt 0 using 2

      {

      uint t0_time;

      TR0=0;

      TR1=0;

      TF1=0;

      t0_time=TH0<<8|TL0;

      TL0=0;

      TH0=0;

      TR0=1;

      t0_time=65535-t0_time/SEG;

      th1=t0_time/256;

      TH1=th1;

      tl1=t0_time % 256;

      TL1=tl1;

      if (count<3*INTERVAL){ //3幅圖片循環(huán)

      count++;

      }

      else{

      count=0;

      }

      index=count/INTERVAL;

      if (th1!=0xff || tl1!=0xff){ //如果擺動特別慢,定時器溢出就不顯示

      phase=0;

      TR1=1;

      }

      else{

      TR1=0;

      }

      }

      void Timer1(void) interrupt 3 using 3

      {

      if (phase

      {

      P1=pattern[phase][index];

      phase++;

      TH1=th1;

      TL1=tl1;

      }

      }

    (審核編輯: 智匯胡妮)

    聲明:除特別說明之外,新聞內(nèi)容及圖片均來自網(wǎng)絡(luò)及各大主流媒體。版權(quán)歸原作者所有。如認為內(nèi)容侵權(quán),請聯(lián)系我們刪除。