新聞中心

        EEPW首頁 > 光電顯示 > 設計應用 > LED顯示搖棒制作

        LED顯示搖棒制作

        作者: 時間:2012-03-22 來源:網絡 收藏

          下面介紹自己動手做的漂亮玩具。

          圖形顯示的原理:

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

        顯示效果圖片(點擊放大)

         LED顯示搖棒實物圖

          LED顯示搖棒制作

          物理機制:

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

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

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

          所用元件:

          AT89C2051 8元

          高亮LED共8個 3.6元

          電池盒 0.5元

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

          陶瓷諧振器 1元

          光遮斷器 2元

          電阻電容導線 2元

          外殼* 0.7元 可以裁成2塊

          可選元件:

          電源開關 1元

          總成本不超過20元

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

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

        以下是源程序:

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

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

          //

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

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

          //

          // email: linyige@yahoo.com

          //

          // 本設計版權歸作者所有,請勿擅自用于商業目的,轉載請注明作者及出處

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

          #include

          #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=TH08|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 (count3*INTERVAL){ //3幅圖片循環

          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;

          }

          }



        關鍵詞: LED顯示 搖棒 制作

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 沙湾县| 繁昌县| 平南县| 神池县| 望都县| 前郭尔| 全南县| 岚皋县| 集安市| 铜川市| 竹北市| 泰顺县| 崇仁县| 确山县| 桑植县| 嘉禾县| 太康县| 喀喇沁旗| 宿松县| 五原县| 临夏县| 吴堡县| 道真| 梓潼县| 松阳县| 永靖县| 临泉县| 于田县| 瓮安县| 清流县| 台东县| 汝州市| 朝阳市| 屏山县| 依安县| 英山县| 新龙县| 如东县| 景洪市| 新源县| 石嘴山市|