圓創力科技

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

查看: 4631|回復: 3

單晶片魔法車04-神奇光控車

  [複製鏈接]
magiccar 發表於 2010-1-27 22:47 | 顯示全部樓層 |閱讀模式
在上個實驗中,我們讓光感測器的信號進到89C2051中,透過我們的程式讓兩個LED燈做出相反的動作,但卻沒用到任何反相器。因此我們知道利用程式的規劃,能減少實體電路的空間,卻仍有同樣的功能,很神奇吧!
接下來的實驗當然就要讓科學魔法車動起來了,但可不是照到光就動或是轉彎這樣而已喔!否則就太對不起單晶片神奇的程式功能了!開動了。。。

實驗四:神奇光控魔法車

實驗內容:我們要讓科學魔法車在手影摭住光源後,指示燈會開始閃爍計數,如果
     連續不斷達6次時,就啟動繼電器讓魔法車前進,指示燈恆亮。
     如果在行進中,用手影摭住光源,指示燈會也開始閃爍計數,當連續不
     斷達3次時,就關閉繼電器讓魔法車停止,指示燈熄滅。

使用材料:實驗三的材料,2SC1815(NPN電晶體)*1,10KΩ電阻*1,繼電器*1

電路照片:

看!我們只要動動頭腦,就能讓光控電路變得只占用一點點的空間
IMGP7835.JPG

這個是狀態指示燈
IMGP7836.JPG

這部份是輸出放大電路
IMGP7837.JPG

空照圖一張,夠清楚了吧!
IMGP7838.JPG

  1. /*實驗四:神奇光控魔法車*/
  2. #include <AT89x051.h>
  3. void delay(unsigned char tmp); //宣告延時函數
  4. void main(void)      //主程式開始
  5. {
  6. unsigned char chk; //初始值設定
  7. bit car_on;   //
  8. P3_0=1;    //啟始輸入功能
  9. P1_2=0;    //關閉繼電器
  10. car_on=0;   //清除行車狀態
  11. while(1)   //無限循環
  12. {      
  13.   if(P3_0==0)   //當沒有黑影時
  14.   {
  15.     P1_5=~car_on;  //LED顯示行車狀態,加"~"是反相的意思
  16.           //(如果car_on是"1",那P1_5就變成"0"囉!)
  17.     chk=0;    //清除計數器
  18.   }else      //當有黑影時
  19.   {
  20.     P1_5=0;       //LED亮
  21.     delay(100);     //
  22.     P1_5=1;       //LED滅
  23.     delay(100);     //
  24.     chk++;        //計數器加1
  25.     if(car_on==0)   //當車子停止時
  26.   {
  27.       if(chk==6)    //當計數器累加到6
  28.       {
  29.         P1_2=1;   //啟動繼電器
  30.         car_on=1;  //設定行車狀態=1
  31.         chk=0;    //清除計數器
  32.       }
  33.   }else      //當車正在行進
  34.   {
  35.       if(chk==3)    //當計數器累加到3
  36.       {
  37.         P1_2=0;   //關閉繼電器
  38.         car_on=0;  //清除行車狀態
  39.         chk=0;   //清除計數器
  40.       }
  41.     }
  42.   }
  43. }
  44. }
  45. void delay(unsigned char tmp) //延時函數
  46. {                    //改變參數大小,可調整時間
  47.  unsigned char i,j;   //宣告使用到的變數
  48.  i=tmp;          //把呼叫程式式中的參數100指定給變數i
  49.  while(i)         //只要i不為0,
  50.  {             //就執行{...}中的指令
  51.     i--;         //把i值減1
  52.     j=255;       // <-+
  53.     while(j)     //   |
  54.     {           // 用j值讓程式執行256次的迴圈,到延時效果
  55.          j--;       //   |
  56.     }         // <-+
  57.  }
  58. }
複製代碼


熱騰騰的程式給您送上來了囉!
Cds_2.hex (286 Bytes, 下載次數: 45)

(老師,我有問題!)如果不用程式來控制,電路要如何做呢?(這。。。你是來亂的嗎?)
 樓主| magiccar 發表於 2010-2-2 14:57 | 顯示全部樓層
上面的程式可能已經把你搞得暈頭轉向了吧!這是老師故意的啦!
因為前面的都很容易,再來個來個震撼教育,保證可以提神醒腦。
其實程的的寫法是很多元化,因為每個人的思考模式不一樣,製作出來的程式風格也會不同,
下面這段程式功能跟實驗四一樣,雖然比原程式寫法簡單,但達成的功能可不含糊,甚至更準確。
你們可以看一看,找出差別在那裏?


  1. /*實驗四:神奇光控魔法車*/
  2. #include <AT89x051.h>
  3. void delay(unsigned char tmp); //宣告延時函數
  4. void main(void)       //主程式開始
  5. {
  6.  unsigned char chk; //記錄計數值的變數
  7.  P3_0=1;        //啟始輸入功能
  8.  P1_2=0;        //關閉繼電器
  9.  while(1)        //無限循環
  10.  {      
  11.    chk=0;       //清除計數器
  12.   P1_5=~P1_2;   //LED顯示繼電器狀態
  13.   while(P3_0==0) //當有黑影時計數
  14.    {
  15.      chk++;     //計數器加1
  16.      P1_5=~P1_5; //LED亮-滅一次
  17.      delay(200);
  18.      P1_5=~P1_5;
  19.      delay(200);
  20.    }
  21.    switch(chk)   //依chk值執行對應程式段
  22.    {
  23.    case 3:      //如果chk=3
  24.      P1_2=0;   //關閉繼電器
  25.      break;    //結束判斷
  26.    case 6:      //如果chk=6
  27.      P1_2=1;   //啟動繼電器
  28.      break;    //結束判斷
  29.    }      //結束switch
  30.  }
  31. }
  32. void delay(unsigned char tmp) //延時函數
  33. {                    //改變參數大小,可調整時間
  34.  unsigned char i,j;   //宣告使用到的變數
  35.  i=tmp;          //把呼叫程式式中的參數100指定給變數i
  36.  while(i)         //只要i不為0,
  37.  {             //就執行{...}中的指令
  38.     i--;         //把i值減1
  39.     j=255;     // <-+
  40.     while(j)     //   |
  41.     {          // 用j值讓程式執行256次的迴圈,到延時效果
  42.          j--;      //   |
  43.     }          // <-+
  44.  }
  45. }
複製代碼
v751953789 發表於 2011-2-22 14:11 | 顯示全部樓層
還是好複雜。= =''
 樓主| magiccar 發表於 2011-2-23 10:43 | 顯示全部樓層
v751953789 發表於 2011-2-22 14:11
還是好複雜。= =''

看不懂的地方可以提出來問啊!
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

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

GMT+8, 2024-3-29 07:00 , Processed in 0.027767 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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