圓創力科技

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

查看: 6167|回復: 2

單晶片魔法車01-電子走馬燈

    [複製鏈接]
magiccar 發表於 2010-1-21 17:59 | 顯示全部樓層 |閱讀模式
第一個實驗我們要練習的是如何用C語言控制89C2051的輸出功能:
實驗一:電子走馬燈
使用材料:科學魔法車*1、89C2051*1、LED*3、石英振盪晶體*1、電容(20pf*2、100uf*1)、電阻(300*3、10K*1)、導線*6
電路照片:
IMGP7794.JPG IMGP7795.JPG

以下是程式範例共有兩個,第一個比較容易看懂,第二種寫法則需要具備一些程式語言的基礎喔:
  1. /*實驗一:走馬燈*/

  2. #include <AT89x051.h>

  3. void delay(unsigned char tmp);    //延時函數

  4. void main(void)                  //程式開始
  5. {
  6.     while(1){                    //無限循環   

  7.         P1_0=0;                    //P2第一腳輸出"0"(用共陽極接法,所以用"0"驅動LED)
  8.         delay(100);                //呼叫延時函數,讓第一個LED亮一段時間,可改變參數來設定時間長短
  9.         P1_0=1;                    //第一個LED熄滅

  10.          P1_1=0;                    //第二個LED點亮
  11.            delay(100);                //延遲一段時間
  12.         P1_1=1;                    //第二個LED熄滅

  13.          P1_2=0;                    //第三個LED點亮
  14.            delay(100);                //延遲一段時間
  15.         P1_2=1;                    //第三個LED熄滅

  16.          P1_1=0;                    //回到第二個LED點亮
  17.            delay(100);                //延遲一段時間
  18.         P1_1=1;                    //第二個LED熄滅
  19.     }
  20. }
  21. void delay(unsigned char tmp)    //延時函數內容,改變參數大小,可調整時間
  22. {
  23.     unsigned char i,j;            //宣告使用到的變數
  24.     i=tmp;                        //把呼叫程式式中的參數100指定給變數i
  25.     while(i)                    //只要i不為0,
  26.     {                            //就執行{...}中的指令
  27.         i--;                    //把i值減1
  28.         j=255;                   // <-+
  29.         while(j)                 //   |
  30.         {                        // 用j值讓程式執行256次的迴圈,到延時效果
  31.              j--;                //   |
  32.         }                        // <-+
  33.     }
  34. }
複製代碼

編譯完成的檔案,可下載直接燒錄
LED_2051.hex (226 Bytes, 下載次數: 33)

  1. /*實驗一:走馬燈 進階版*/

  2. #include <reg51.h>


  3. void delay(unsigned char tmp);    //延時函數
  4. code unsigned char tmpled[4]={0X01,0X02,0X04,0X02};
  5.                                 //定義發光二極體的輸出資料的常數。前面加"code"表示比此資料
  6.                                 //只在程式代碼中存放,不會占用到晶片中占記憶體空間
  7.                                 // 0x01: 00000001 =>2第一個bit為1
  8.                                 // 0x02: 00000010 =>2第二個bit為1
  9.                                 // 0x04: 00000100 =>2第三個bit為1
  10. void main(void)                  //程式開始
  11. {
  12.     unsigned char i;            //定義變數
  13.     while(1){                    //無限循環   
  14.         for(i=0;i<4;i++){        //連續輸出4個資料
  15.             P1=~tmpled[i];        //"~"這個符號是反相,因發光二極體採用共陽極,所以將資料反相再輸出
  16.             delay(100);            //調用延時函數,改變參數大小,調整變化的速度
  17.         }
  18.     }
  19. }
  20. void delay(unsigned char tmp)    //延時函數內容,改變參數大小,可調整時間
  21. {
  22.     unsigned char i,j;            //宣告使用到的變數
  23.     i=tmp;                        //把呼叫程式式中的參數100指定給變數i
  24.     while(i)                    //只要i不為0,
  25.     {                            //就執行{...}中的指令
  26.         i--;                    //把i值減1
  27.         j=255;                   // <-+
  28.         while(j)                 //   |
  29.         {                        // 用j值讓程式執行256次的迴圈,到延時效果
  30.              j--;                //   |
  31.         }                        // <-+
  32.     }
  33. }
複製代碼


進階版編譯完成的檔案

LED_2051.hex

232 Bytes, 下載次數: 37, 下載積分: 銅錢 -1 個

曹齊平 發表於 2010-1-22 08:41 | 顯示全部樓層
周老師   真是棒, 太感謝你了, 我將會在我的網頁上做一個標明單晶片學習的
聯結到你這裡. 希望能幫助更多的人學習單晶片(微控制器)
建議您將每一個程式取一個不同的名稱,
陕大鹍 發表於 2011-7-31 02:24 | 顯示全部樓層
谢谢周老师!
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

QQ|Archiver|手機版|小黑屋|圓創力科技有限公司 IOP Robotic Technology Co.,Ltd Tel: 07-3924582 Fax: 07-3924001

GMT+8, 2024-4-20 15:58 , Processed in 0.030696 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回復 返回頂部 返回列表