智能尋跡機器人實驗指導(dǎo)書樣本_第1頁
智能尋跡機器人實驗指導(dǎo)書樣本_第2頁
智能尋跡機器人實驗指導(dǎo)書樣本_第3頁
智能尋跡機器人實驗指導(dǎo)書樣本_第4頁
智能尋跡機器人實驗指導(dǎo)書樣本_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

簡介單片機益智系列——智能尋跡機器人是由益芯科技有限公司為科教以便而研發(fā)設(shè)計。依照當代學校對嵌入式系統(tǒng)開發(fā)需求。根據(jù)提高學生實際動手操作能力和思考能力,以加強學生對現(xiàn)實生活中嵌入式系統(tǒng)應(yīng)用為參照。智能尋跡機器人全新設(shè)計模式,良好電路設(shè)計,一體化機電組合,智趣系統(tǒng)開發(fā),更是成為加強學生學習興趣總動源。智能尋跡機器人采用當前較為流行8位單片機作為系統(tǒng)大腦。以8051系列家族中AT89S51/AT89S52為主芯片。40腳DIP封裝使它擁有32個完全IO(GPIO—通用輸入輸出)端口,通過對這些端口加以信號輸入電路,控制電路,執(zhí)行電路共同完畢尋跡機器人。P0.0,P0.1,P0.2,P0.3分別通過LG9110電機驅(qū)動來驅(qū)動電機1和電機2。由電機正轉(zhuǎn)與反轉(zhuǎn)來完畢機器人邁進,后退,左轉(zhuǎn),右轉(zhuǎn),遇障礙物繞行,避懸崖等基本動作。在機器人邁進時如果前方有障礙物,由紅外發(fā)射管發(fā)射紅外信號被反射給紅外接受管,紅外接管將此信號通過P3.7傳送入AT89S52中,主芯片通過內(nèi)部代碼進行機器人繞障礙物操作,同步主芯片將P3.7信號狀態(tài)通過P2.5LED批示燈顯示出來。機器人行走時會通過P3.5與P3.6紅外接受探頭來進行檢測。當走到懸崖處時,P3.5或P3.6將收到一種電平信號,此電平信號將通過相應(yīng)端口傳送入主芯片中,主芯片通過內(nèi)部代碼完畢機器人避懸崖操作。同步P3.5與P3.6信號狀態(tài)將通過P2.6/P2.7顯示出來。在機器人左轉(zhuǎn),右轉(zhuǎn),后退過程,可以通過觀看以P2.0/P0.7為批示燈運營狀態(tài)。P0.4為機器人聲控檢測端口,在運營為邁進狀態(tài)時,可以能過聲控(如拍手聲)來控制它運營與停止。P0.6為機器人聲音輸出端。在機器人遇到障礙物時。進行繞障礙物與避懸崖時可以通過此端口控制蜂鳴器發(fā)出報警聲。當為白天或黑夜時可以通過P0.5端口中光敏電阻來進行判斷,以以便完畢機器人夜間自動照明等功能。兩個按鍵以查詢/中斷兩種不同方式來呈現(xiàn)按鍵操作。你可以按下S1鍵來進行機器停止。再按下S2鍵來進行機器人運營。這個按鍵信息分別被P3.2,P3.4接受到。IR1為紅外遙控接受器,這就為機器人進行遠程遙控創(chuàng)造了也許。這個紅外遙控接受頭接受到紅外信號時將信號通過P3.3送入到主芯片,主芯片對其進行解密后以不同方式對機器人進行控制。同步將顧客按鍵信息通過P2端口上LED數(shù)碼管顯示出來。P3.0、P3.l中COM端口加入,讓你完全可以用電腦對其進行控制。你可以通過對串口發(fā)送數(shù)據(jù),數(shù)據(jù)會被顯示到LED數(shù)碼管中,并讓機器人執(zhí)行相應(yīng)功能。電腦串口軟件規(guī)定波特率為9600。8位數(shù)據(jù)位,這時你就可以高興用電腦來對它進行你完全控制了。EXKJ-ZN02功能組合多樣,使得學生可以充分發(fā)揮自主能力,制作出不同機器人。它為學校進行機器人競賽和畢業(yè)項目設(shè)計建立了實物平臺,是學校教師授課變得更輕松有趣。同步也能變化學生學習模式和激發(fā)學習興趣。更是作為驗證學生學習效果有力工具。良好電路板設(shè)計,讓學生制作變得以便容易,其大大提高了學生制作成功率。提高了學生對電子電路興趣,更是教學過程中不可或缺教具。實驗一程序狀態(tài)批示燈演示實驗簡介:本程序重點演示了一種最簡程序基本構(gòu)造,它從順序、判斷、循環(huán)形式體現(xiàn)程序基本構(gòu)造,此程序通過閃燈不斷閃動,及閃燈閃動快慢來表達程序不不同工作狀態(tài)。它也是常數(shù)字設(shè)備中進行狀態(tài)表達辦法之一(例:網(wǎng)卡)。實驗原理圖:實當代碼://===================================================================== //// 實驗名稱:程序狀態(tài)批示燈演示程序 ////開發(fā)日期:/01/19 ////修改日期: ////程序作者:guojun郵箱: ////開發(fā)商:益芯科技有限公司——技術(shù)部 ////程序備注:此程序僅為體現(xiàn)本機功能而演示用,當用作實際工程時請慎用. ////特別聲明:此程序可作研究之用,但引用,轉(zhuǎn)載,使用請注明出處. ////===================================================================== //#include<AT89x51.h> //包括頭文獻#defineLEDP1 //宏定義顯示端標語voidDelay(unsignedintDelayTime) //定義可變延時函數(shù){while(DelayTime--); //延時函數(shù)進入倒計時}voidmain() //程序主函數(shù)碼{unsignedintCountData=0; //定義一種整形變量,用于閃動次數(shù)++while(1) //主程序循環(huán)體開始{if(CountData<30) //判斷閃動次數(shù)與否位于0-30之間{Delay(60000); //用60000作為基數(shù)開始延時函數(shù)}elseif(CountData<60) //判斷閃動次數(shù)與否位于30-60之間{Delay(30000); //用30000作為基數(shù)開始延時函數(shù)}elseif(CountData<90) //判斷閃動次數(shù)與否位于60-90之間{Delay(10000); //用10000作為基數(shù)開始延時函數(shù)}elseif(CountData<120) //判斷閃動次數(shù)與否位于90-120之間{CountData=0; //僅進行一次操作即可退出.}CountData=CountData+1; //閃動次數(shù)基數(shù)++LED=~LED; //將顯示端口進行取反操作}}運營效果:程序運營效果為:開機后程序以慢速閃動,一段時間后速度開始加快,再等待時間,閃燈速度達到最快,之后一段時間后,閃動將回到開始狀態(tài)。實驗二流水燈演示實驗簡介:本程序全面體現(xiàn)了子程序用法,它從對幾種子程序操作,顯示不同流燈技術(shù),流水燈不同需要不同體現(xiàn)形式,而這里重要簡介了移位操作和內(nèi)部數(shù)據(jù)存儲及讀入操作。延時函數(shù)采用可重入標志,可進行函數(shù)遞歸調(diào)用。實驗原理圖:實當代碼://===================================================================== ////開發(fā)日期:/01/20 ////修改日期: ////程序作者:guojun郵箱: ////開發(fā)商:益芯科技有限公司——技術(shù)部 ////程序備注:此程序僅為體現(xiàn)本機功能而演示用,當用作實際工程時請慎用. ////特別聲明:此程序可作研究之用,但引用,轉(zhuǎn)載,使用請注明出處. ////===================================================================== //#include<AT89x51.h> //包括頭文獻#defineLedP1 //定義顯示端標語unsignedintcodeBToM[]={0x7E,0x3C,0x18,0x00}; //定義由兩邊到中間顯示數(shù)據(jù)unsignedintcodeMToB[]={0xE7,0xC3,0x81,0x00}; //定義由中間到兩邊顯示數(shù)據(jù)voidDelay()reentrant //定義可重入延時函數(shù){unsignedintDelayTime=10000; //定義延時時間基數(shù)while(DelayTime--); //程序開始延時開始}voidLeftToRight() //定義從左邊到右邊顯示函數(shù){unsignedcharTempCount=0; //定義顯示次數(shù)變量Led=0xFE; //定義初步顯示數(shù)據(jù)for(TempCount=0;TempCount<8;TempCount++)//通過循環(huán)進行數(shù)據(jù)顯示{Delay(); //延時,用在每次移動數(shù)據(jù)開始處Led=Led<<1; //由右邊向左邊移動數(shù)據(jù)}return; //空返回語句,表白此子程序結(jié)束.}voidRightToLeft() //定義從右邊到左邊顯示函數(shù){unsignedcharTempCount=0; //定義顯示次數(shù)變量Led=0x7F;//定義初步顯示數(shù)據(jù)for(TempCount=0;TempCount<8;TempCount++) //通過循環(huán)進行數(shù)據(jù)顯示{Delay(); //延時,用在每次移動數(shù)據(jù)開始處Led=Led>>1; //由左邊向右移動數(shù)據(jù)}return; //空返語句,表白此子程序結(jié)束.}voidBothToMid() //定義由兩邊到中間顯示子程序{unsignedcharTempCount=0; //定義暫時次數(shù)變量Led=0xFF;for(TempCount=0;TempCount<5;TempCount++)//通過循環(huán)依次進行次數(shù)運營{Delay(); //延時,在每次運營前.Led=BToM[TempCount]; //讀入當次顯示數(shù)據(jù).}return; //空返回,表白此子程序結(jié)束.}voidMidToBoth() //定義由中間到兩邊子程序{unsignedcharTempCount=0; //定義暫時次數(shù)變量Led=0xFF;for(TempCount=0;TempCount<5;TempCount++)//通過循環(huán)進行數(shù)據(jù)顯示{Delay(); //延時,在每次數(shù)據(jù)顯示前.Led=MToB[TempCount];//讀入當次顯示數(shù)據(jù).}return; //空返回,表白本次子程序結(jié)束.}voidmain() //主程序入口處.{while(1) //無窮循環(huán)開始.{LeftToRight(); //從左到右進行顯示RightToLeft(); //從右到左進行顯示BothToMid(); //由兩邊到中間進行顯示MidToBoth(); //由中間到兩邊進行顯示}}運營效果:程序運營效果為:開機后,批示燈向從左向右依次點亮,從右向左依次點亮,由兩邊向中間依次點亮,由中間向兩邊依次點亮。實驗三數(shù)碼管演示實驗簡介:本程序通過對端口置數(shù)操作,展示了數(shù)碼管應(yīng)用技術(shù),數(shù)碼管是將發(fā)光二極管通過一定形式封裝在一種數(shù)字外殼中,可以通過不同點亮方式來顯不同數(shù)字符號。實驗原理圖:實當代碼://============================================================= ////開發(fā)日期:/01/26 ////修改日期: ////程序作者:guojun郵箱: ////開發(fā)商:益芯科技有限公司——技術(shù)部 ////程序備注:此程序僅為體現(xiàn)本機功能而演示用,當用作實際工程時請慎用. ////特別聲明:此程序可作研究之用,但引用,轉(zhuǎn)載,使用請注明出處. ////============================================================== //#include<AT89x51.h> //包括頭文獻typedefunsignedintuint; //重命名整數(shù)類型核心字typedefunsignedcharuchar; //重命名字符類型核心字ucharcodeLedShowData[]={0x9F,0x25,0x0D,0x99,0x49, //定義固定存儲顯示字符0x41,0x1F,0x01,0x19,0x03}; //1,2,3,4,5,6,7,8,9,0voidDelay() //定義延時函數(shù){uintTempTime=0; //定義延時時間變量while(TempTime--); //通過循環(huán)進行延時}voidmain() //主程序開始main(){ucharCountData=0; //定義計數(shù)變量while(1) //主程序無限循環(huán)開始{P2=LedShowData[CountData]; //P2端口讀入顯示數(shù)據(jù)CountData++;//計數(shù)變量++(加加)if(CountData>=10) //判斷與否超過計數(shù)范疇{CountData=0; //重新置零}Delay(); //延時函數(shù)被調(diào)用}}運營效果:程序運營效果為:程序下載后,數(shù)碼管將從1-9依次顯示,最后將顯示數(shù)字0. 實驗四數(shù)碼管及跑馬燈演示實驗簡介:本程序重要是將數(shù)碼管及跑馬燈放在一起顯示,它重要闡明了,如何將在單系中運營各種看似并行運營子系統(tǒng).本程序在此將跑馬燈子程序放入到一種頭文獻中,對于一種大工程這樣將有益于程序文獻管理。實驗原理圖:實當代碼://===============================================================////開發(fā)日期:/01/26 ////修改日期: ////程序作者:guojun郵箱: ////開發(fā)商:益芯科技有限公司——技術(shù)部 ////程序備注:此程序僅為體現(xiàn)本機功能而演示用,當用作實際工程時請慎用。 ////特別聲明:此程序可作研究之用,但引用、轉(zhuǎn)載、使用請注明出處。 ////===============================================================//#include<AT89x51.h> //包括端口定義頭文獻unsignedcharcodeLedShowData[]={0x9F,0x25,0x0D,0x99,0x49, //定義數(shù)碼管顯示字符0x41,0x1F,0x01,0x19,0x03}; //1,2,3,4,5,6,7,8,9,0#defineLedP1 //定義顯示端口unsignedcharCountData=0; //定義數(shù)碼管計數(shù)器unsignedintcodeBToM[]={0x7E,0x3C,0x18,0x00};//定義由兩邊到中間顯示數(shù)據(jù)unsignedintcodeMToB[]={0xE7,0xC3,0x81,0x00};//定義由中間到兩邊顯示數(shù)據(jù)voidDelay()reentrant//定義可重入延時函數(shù){unsignedintDelayTime=10000; //定義延時時間變量while(DelayTime--);//通過循環(huán)進行延時P2=LedShowData[CountData];//置數(shù)碼管顯示數(shù)據(jù)到P2端口CountData++;//數(shù)碼管地址計數(shù)器++(加1)if(CountData>=10)//判斷計數(shù)器合計數(shù)值{CountData=0;//計數(shù)器清零}}#include<跑馬燈.h> //包括顯示方式頭文獻voidmain()//主程序入口{while(1) //無窮循環(huán)開始.{LeftToRight(); //從左到右進行顯示RightToLeft(); //從右到左進行顯示BothToMid();//由兩邊到中間進行顯示MidToBoth();//由中間到兩邊進行顯示}}////////////////////////////////////////////////跑馬燈.h/////////////////////////////////////////////////////voidLeftToRight() //定義從左邊到右邊顯示函數(shù){unsignedcharTempCount=0; //定義顯示次數(shù)變量Led=0xFE; //定義初步顯示數(shù)據(jù)for(TempCount=0;TempCount<8;TempCount++) //通過循環(huán)進行數(shù)據(jù)顯示{Delay(); //延時,用在每次移動數(shù)據(jù)開始處Led=Led<<1; //由右邊向左邊移動數(shù)據(jù)}return;//空返回語句,表白此子程序結(jié)束.}voidRightToLeft()//定義從右邊到左邊顯示函數(shù){unsignedcharTempCount=0;//定義顯示次數(shù)變量Led=0x7F;//定義初步顯示數(shù)據(jù)for(TempCount=0;TempCount<8;TempCount++)//通過循環(huán)進行數(shù)據(jù)顯示{Delay();//延時,用在每次移動數(shù)據(jù)開始處Led=Led>>1;//由左邊向右移動數(shù)據(jù)}return;//空返語句,表白此子程序結(jié)束.}voidBothToMid()//定義由兩邊到中間顯示子程序{unsignedcharTempCount=0;//定義暫時次數(shù)變量Led=0xFF;for(TempCount=0;TempCount<5;TempCount++)//通過循環(huán)依次進行次數(shù)運營{Delay();//延時,在每次運營前.Led=BToM[TempCount];//讀入當次顯示數(shù)據(jù).}return;//空返回,表白此子程序結(jié)束.}voidMidToBoth()//定義由中間到兩邊子程序{unsignedcharTempCount=0;//定義暫時次數(shù)變量Led=0xFF;for(TempCount=0;TempCount<5;TempCount++)//通過循環(huán)進行數(shù)據(jù)顯示{Delay();//延時,在每次數(shù)據(jù)顯示前.Led=MToB[TempCount];//讀入當次顯示數(shù)據(jù).}return;//空返回,表白本次子程序結(jié)束.}運營效果:本程序運營效果:本程序運營后,可以看到跑馬燈按,從左到右,從右到左,從兩邊到中間,從中間到兩邊將依次運營。并且在運營過程中,可以看到數(shù)碼管依次從1-9-0順序顯示數(shù)字符號。實驗五按鍵中斷查詢演示實驗簡介:本程序通過兩個按鍵對數(shù)碼管進行操作,分別向顧客演示了查詢與中斷操作方式,中斷中應(yīng)用了對按鍵進行查詢辦法來判斷按鍵鍵值,查詢按鍵辦法中則采用了鍵盤延遲辦法來消除按鍵重復(fù)輸入。實驗原理圖:實當代碼://=============================================================== ////開發(fā)日期:/01/27編寫按鍵中斷與查詢最初代碼 ////修改日期: ////程序作者:guojun郵箱: ////開發(fā)商:益芯科技有限公司——技術(shù)部 ////程序備注:此程序僅為體現(xiàn)本機功能而演示用,當用作實際工程時請慎用. ////特別聲明:此程序可作研究之用,但引用,轉(zhuǎn)載,使用請注明出處. ////================================================================//#include<at89x51.h> //包括S51地址頭文獻typedefunsignedcharuchar; //重定義無符號字符型typedefunsignedintuint; //重定義無符號整型sbitS1=P3^2; //定義S1變量sbitS2=P3^4; //定義S2變量ucharDataCount=0; //定義全局計數(shù)器ucharcodeLedShowData[]={0x9F,0x25,0x0D,0x99,0x49, //定義固定存儲顯示字符0x41,0x1F,0x01,0x19,0x03}; //1,2,3,4,5,6,7,8,9,0voidKeyDelay() //定義鍵盤防抖子程序{uintKeyTime=0; //定義防抖時間變量while(KeyTime--); //防抖延時開始return;}voidS1_Break()interrupt0 //定義S1(INT0)外部中斷0{while(0==S1); //判斷S1按鍵鍵值DataCount--; //計數(shù)器數(shù)值減1if(DataCount>9) //判斷計數(shù)器與否到最小值{DataCount=9;//顯示數(shù)字0}return;}voidmain()//主程序開始{ET0=1;//設(shè)定外部中斷觸發(fā)方式(1->低電平觸發(fā))EX0=1; //啟動外部中斷0EA=1;//開記總中斷while(1) //程序主循環(huán){if(0==S2) //通過查詢判斷鍵值{KeyDelay();//鍵盤防抖動開延時子程序開始DataCount++; //計數(shù)器加1}if(DataCount>9) //判斷當前計數(shù)器{DataCount=0;//將計數(shù)器置0}P2=LedShowData[DataCount];//通過端口顯示計數(shù)器數(shù)值}}運營效果:程序運營效果:開機后數(shù)碼管顯示數(shù)字"1",當按S1不放時,數(shù)碼管數(shù)字不變,,松開S1按鍵,數(shù)碼減1;按S2鍵不放時,數(shù)碼管數(shù)字會自動加1。并且數(shù)字遵守從0-9循環(huán)操作。實驗六 話筒聲音辨認演示實驗簡介:本程序重要通過話筒對聲音信號進行辨認,由于本電路有效去除雜波,因此僅能對響度較大聲音進行辨認(例:拍手聲)。像正常說話聲對本電路慮除,不會產(chǎn)生信息輸入。話筒辨認加入,為咱們建立了聲控平臺。實驗原理圖:實當代碼://============================================================ === ////開發(fā)日期:/01/27 ////修改日期: ////程序作者:guojun郵箱: ////開發(fā)商:益芯科技有限公司——技術(shù)部 ////程序備注:此程序僅為體現(xiàn)本機功能而演示用,當用作實際工程時請慎用. ////特別聲明:此程序可作研究之用,但引用,轉(zhuǎn)載,使用請注明出處. ////================================================================//#include<at89x51.h> //包括51單片機有關(guān)頭文獻sbitLeftLed=P2^0; //定義前方左側(cè)批示燈端口sbitRightLed=P0^7; //定義前方右側(cè)批示燈端口sbitB1=P0^4; //定義話筒輸入端口voidDelay() //定義去除雜音延時子程序{unsignedintDelayTime=1000; //定義去除雜音變量while(DelayTime--); //延時循環(huán)開始return;}voidmain() //主程序入口{LeftLed=0; //前方左側(cè)批示燈亮RightLed=0; //前方右側(cè)批示燈亮while(1) //程序主循環(huán){if(0==B1) //判斷與否有聲音輸入{while(0==B1); //等待聲音信號結(jié)束Delay(); //去除多余雜音LeftLed=!LeftLed; //前方左側(cè)批示燈取反RightLed=!RightLed; //前方右側(cè)批示燈取反}}運營效果:程序運營效果:本程序開機后,前方兩側(cè)批示燈點亮,拍一下手后,前方批示燈關(guān)閉。再一次進行拍手,批示燈又一次被點亮。實驗七光敏電阻與蜂鳴器演示實驗簡介:本程序講述了光敏電阻用法。當處在光暗時,光敏電阻導(dǎo)通,將信號傳入到單片機,單片機將控制蜂鳴器按一定頻率響亮,并且前方批示燈也開始閃閃亮。通過對光敏電阻信號接受,從而實現(xiàn)了夜間自動照明功能。實驗原理圖:實當代碼://===================================================================////開發(fā)日期:/01/27編寫光敏電阻與蜂鳴器演示程序最初代碼 ////修改日期: ////程序作者:guojun郵箱: ////開發(fā)商:益芯科技有限公司——技術(shù)部 ////程序備注:此程序僅為體現(xiàn)本機功能而演示用,當用作實際工程時請慎用. ////特別聲明:此程序可作研究之用,但引用,轉(zhuǎn)載,使用請注明出處. ////===================================================================//#include<at89x51.h> //包括51單片機有關(guān)頭文獻sbitRL1=P0^5; //定義光敏電阻接受端口sbitSB1=P0^6; //定義蜂鳴器響鈴端口sbitLeftLed=P2^0; //定義前方左側(cè)批示燈端口sbitRightLed=P0^7; //定義前方右側(cè)批示燈端口voidDelay() //定義蜂鳴器頻率響亮子程序{unsignedintDelayTime=0; //定義頻率定期變量while(DelayTime--); //頻率定期循環(huán)開時return;}voidmain() //主程序入口{while(1) //程序主循環(huán){if(1==RL1) //判斷光敏當前狀態(tài)(有光0,無光1){Delay(); //延時子程序開時SB1=!SB1; //蜂鳴器響亮LeftLed=!LeftLed; //前方左側(cè)批示燈閃亮RightLed=!RightLed; //前方右側(cè)批示燈閃亮}else{SB1=1; //將蜂鳴器關(guān)閉LeftLed=1; //前方左側(cè)批示燈關(guān)閉RightLed=1; //前方右側(cè)批示燈關(guān)閉}}}運營效果:程序運營效果:打開電源開關(guān),如果本機在有光照狀況下,將無任何反映,這時將機子移動到較黑暗地方,將會看到前方批示燈閃亮和蜂鳴器響亮。實驗八 紅外反射與直流電機驅(qū)動演示實驗簡介:本程序通過前端,底端紅外發(fā)射頭和接受頭來判斷小車運營軌跡,當前與底端發(fā)生信號輸入時,信號將被單片機接受,單片機來控制機器按照寫好程序開始運營。同步為達到好效果,加入聲音辨認與蜂鳴器輸入輸出設(shè)備。.使得此機器人運動變得更加有趣。實驗原理圖:實當代碼://==================================================================////開發(fā)日期:/01/28 ////修改日期: ////程序作者:guojun郵箱: ////開發(fā)商:益芯科技有限公司——技術(shù)部 ////程序備注:此程序僅為體現(xiàn)本機功能而演示用,當用作實際工程時請慎用。 ////特別聲明:此程序可作研究之用,但引用、轉(zhuǎn)載、使用請注明出處。 ////================================================================== //#include<at89x51.h> //包括51單片機有關(guān)頭文獻sbitLeftLed=P2^0; //定義前方左側(cè)批示燈端口sbitRightLed=P0^7; //定義前方右側(cè)批示燈端口sbitLeftIR=P3^5; //定義前方左側(cè)紅外探頭端口sbitRightIR=P3^6; //定義前方右側(cè)紅外探頭端口sbitFontIR=P3^7; //定義前方正前方紅外探頭端口sbitM1A=P0^0; //定義左側(cè)電機驅(qū)動A端sbitM1B=P0^1; //定義左側(cè)電機驅(qū)動B端sbitM2A=P0^2; //定義右側(cè)電機驅(qū)動A端sbitM2B=P0^3; //定義右側(cè)電機驅(qū)動B端sbitB1=P0^4; //定義語音識辨認傳感器端口sbitSB1=P0^6; //定義蜂鳴器端口#defineRunShowP1 //定義數(shù)據(jù)顯示端口voidDelay() //定義機器人調(diào)轉(zhuǎn)子時間子程序{unsignedintDelayTime=50000; //定義機器人轉(zhuǎn)彎時間變量while(DelayTime--); //機器人轉(zhuǎn)彎循環(huán)SB1=!SB1; //蜂鳴器閃響return;}voidControlCar(unsignedcharConType) //定義電機控制子程序{M1A=0; //將M1電機A端初始化為0M1B=0; //將M1電機B端初始化為0M2A=0; //將M2電機A端初始化為0M2B=0; //將M2電機B端初始化為0switch(ConType) //判斷顧客設(shè)定電機形式{case1://邁進 //判斷顧客與否選取形式1{M1A=1; //M1電機正轉(zhuǎn)M2A=1; //M2電機正轉(zhuǎn)break;}case2://后退 //判斷顧客與否選取形式2{M1B=1; //M1電機反轉(zhuǎn)M2B=1; //M2電機反轉(zhuǎn)break;}case3://左轉(zhuǎn) //判斷顧客與否選取形式3{M1B=1; //M1電機反轉(zhuǎn)M2A=1; //M2電機正轉(zhuǎn) break;}case4://右轉(zhuǎn) //判斷顧客與否選取形式4{M1A=1; //M1電機正轉(zhuǎn)M2B=1; //M2電機反轉(zhuǎn) break;}case8://停止 //判斷顧客與否選取形式8{break; //退出當前選取}}}voidmain() //主程序入口{bitRunFlag=0; //定義小車運營標志位RunShow=0; //初始化顯示狀態(tài)ControlCar(1); //初始化小車運營狀態(tài)while(1) //程序主循環(huán){LeftLed=LeftIR;//前方左側(cè)批示燈批示出前方左側(cè)紅外探頭狀態(tài)RightLed=RightIR;//前方右側(cè)批示燈批示出前方右側(cè)紅外探頭狀態(tài)RunShow=FontIR;//數(shù)據(jù)顯示窗口,批示前方紅外探頭狀態(tài)if(FontIR==0||LeftIR==1||//判斷前方,左側(cè),右側(cè)與否有信號輸入RightIR==1){ControlCar(2); //讓小車后退 Delay(); //開始小車后退延時子程序 Delay(); //決定了小車后退步數(shù) Delay(); //變化它可以改小車后退距離 Delay(); //這里只是一種延時ControlCar(3); //變化小車為左轉(zhuǎn)方向 Delay(); //開始小車左轉(zhuǎn)延時子程序 Delay(); //變化它可以變化小車旋轉(zhuǎn)角度 Delay(); //同上 Delay(); //同上 ControlCar(1); //變化小車為邁進運營狀態(tài) SB1=1; //這個多一步將蜂鳴器關(guān)閉}if(B1==0) //判斷與否有聲音信號輸入{while(B1==0); //去除聲音多余雜波 if(RunFlag==0) //判斷小車當前運營狀態(tài)標志 {RunFlag=1; //變化小車當前運營狀態(tài)標志 ControlCar(8); //停止小車運營 } else //否則執(zhí)行代碼如下 {RunFlag=0; //判斷小車運營狀態(tài)標志 ControlCar(1); //變化小車為邁進運營狀態(tài) }}}}運營效果:程序效果:打開本機電源開關(guān),機器人開始向前運營(這要看當時條件),在運動過程中,如果前方有障礙物,機器人則開始向后后退一段時間后,向左運動,在向左運營一段時間后。再開始向前運營。在整個調(diào)向過程中,蜂鳴器閃響。并且在機器人邁進過程中,你可以通過拍手來控制機器人停止和運營。實驗九 紅外遙控器解碼程序演示實驗簡介:本程序重要將當前比較慣用M50462遙控器進行解碼,將解碼后數(shù)據(jù)通過P2端口數(shù)碼管顯示出來,為了更好看到運營過程,特加了三個批示燈用來批示當前運營狀態(tài)。P10閃亮,表達程序正在運營;P11閃亮,表達接受到數(shù)據(jù);P12閃亮,表達觸發(fā)內(nèi)部定期器操作;P13閃亮,表達對的接受完一種數(shù)據(jù)。實驗原理圖:實當代碼://================================================================== ////開發(fā)日期:/01/27 ////修改日期: ////程序作者:guojun郵箱: ////開發(fā)商:益芯科技有限公司——技術(shù)部 ////程序備注:此程序僅為體現(xiàn)本機功能而演示用,當用作實際工程時請慎用。 ////特別聲明:此程序可作研究之用,但引用、轉(zhuǎn)載、使用請注明出處。 ////================================================================== //#include<AT89x51.h> //包括51單片機有關(guān)頭文獻unsignedcharcodeLedShowData[]= //定義數(shù)碼管顯示數(shù)據(jù){0x9F,0x25,0x0D,0x99,0x49, //1,2,3,4,5,0x41,0x1F,0x01,0x19,0x03}; //6,7,8,9,0,staticunsignedintRecvData; //定義接受紅外數(shù)據(jù)變量staticunsignedcharCountData; //定義紅外個數(shù)計數(shù)變量staticunsignedcharAddData; //定義自增變量staticunsignedintLedFlash; //定義閃動頻率計數(shù)變量unsignedcharHeardData; //定義接受到數(shù)據(jù)高位變量sbitRunLed=P1^0; //定義運營批示燈變量位sbitRecvLed=P1^1; //定義接受批示燈變量位sbitInTimeLed=P1^2; //定義定期器開始批示燈變量位sbitReadyLed=P1^3; //定義就緒批示燈變量sbitIR1=P3^3; //定義紅外接受端口#defineShowPortP2 //定義數(shù)碼管顯示端口voidTimer0_IR1()interrupt1using3 //定義紅外定期器子程序{TH0=0xFF; //向定期器定期間寄存器填入高八位值TL0=0x19; //向定期器定期間寄存器填入低八位值InTimeLed=!InTimeLed; //將定期器批示燈進行取反AddData++; //自增變量加1}voidInt1_IR1()interrupt2 //定義紅外接受中斷子程序{RecvLed=!RecvLed; //將紅外接受數(shù)據(jù)進行取反ReadyLed=1; //紅外接受數(shù)據(jù)批示燈置1if(4==AddData)//0 //判斷接受到數(shù)據(jù)是0{RecvData=RecvData|0; //判斷到0就將當前位寫0RecvData=RecvData<<1; //將當前位向左移動1位}elseif(8==AddData)//1 //判斷接受到數(shù)據(jù)是1{RecvData=RecvData|1; //將當前位寫1RecvData=RecvData<<1; //將當前位向左移動1位}CountData++; //將紅外接受位計數(shù)器加1if(CountData==8) //判斷與否接受到8位數(shù)據(jù){HeardData=RecvData; //是8位數(shù)據(jù)時,則將數(shù)據(jù)暫存到高位變量中}elseif(CountData==16) //判斷與否接受到16位數(shù)據(jù){ET0=0; //關(guān)閉紅外定期器0EX1=0; //關(guān)閉紅外外部中斷1AddData=0; //定期時間間隔變量清零if(HeardData==226||HeardData==112) //判斷顧客碼與否對的{ReadyLed=0; //顧客碼對的則就緒批示燈點亮一下 HeardData=RecvData; //取出接受到低八位數(shù)據(jù)switch(HeardData) //判斷低八位數(shù)據(jù)值下列那一位{case32://電源 //闡明按下了電源鍵{//在這里填寫你自己代碼 //依照你功能自己寫 break; //返回 } case46://TV/AV //闡明按下了TV/AV鍵 {//在這里填寫你自己代碼 //依照你功能自己寫 break; //返回 } case0://1 //闡明按下數(shù)字1鍵 {ShowPort=LedShowData[0]; //數(shù)碼管顯示數(shù)字1 break; //返回 } case8://2 //闡明按下了數(shù)字2鍵 {ShowPort=LedShowData[1]; //數(shù)碼管顯示數(shù)字2 break; //返回 }case4://3 //闡明按下了數(shù)字3鍵 {ShowPort=LedShowData[2]; //數(shù)碼管顯示數(shù)字3 break; //返回 } case12://4 //闡明按下了數(shù)字4鍵 {ShowPort=LedShowData[3]; //數(shù)碼管顯示數(shù)字4 break; //返回 } case2://5 //闡明按下了數(shù)字5鍵 {ShowPort=LedShowData[4]; //數(shù)碼管顯示數(shù)字5 break; //返回 } case10://6 //闡明按下了數(shù)字6鍵 {ShowPort=LedShowData[5]; //數(shù)碼管顯示數(shù)字6 break; //返回 }case6://7 //闡明按下了數(shù)字7鍵{ShowPort=LedShowData[6]; //數(shù)碼管顯示數(shù)字7break; //返回}case14://8 //闡明按下了數(shù)字8鍵{ShowPort=LedShowData[7]; //數(shù)碼管顯示數(shù)字8break; //返回}case64://9 //闡明按下了數(shù)字9鍵{ShowPort=LedShowData[8]; //數(shù)碼管顯示數(shù)字9break; //返回}case72://0/30 //闡明按下0/30鍵{ShowPort=LedShowData[9]; //數(shù)碼管顯示數(shù)字0break; //返回}case68://10+ //闡明按下10+鍵{//在這里填寫你自己代碼 //依照你功能寫代碼break; //返回}case76://20+ //闡明按下了20+鍵{//在這里填寫你自己代碼 //依照你功能寫代碼break; //返回}case36://CH- //闡明按下了CH-鍵{//在這里填寫你自己代碼 //依照你功能寫代碼 break; //返回}case40://CH+ //闡明按下了CH+鍵{//在這里填寫你自己代碼 //依照你功能寫代碼 break; //返回}}}RecvData=0; //將接受到數(shù)據(jù)清零CountData=0; //將接受計數(shù)器清零HeardData=0; //將接受高低數(shù)據(jù)變量清零return; //返回}AddData=0; //將定期器計數(shù)器清零ET0=1; //打開定期器中斷}voidmain(void) //主程序入口{bitExeFlag=0; //定義可執(zhí)行位變量RecvData=0; //將接受變量數(shù)值初始化CountData=0; //將計數(shù)器變量數(shù)值初始化AddData=0; //將定期器計數(shù)器初始化HeardData=0; //將高低計數(shù)器初始化LedFlash=3000; //對閃燈數(shù)據(jù)進行初始化TMOD=0x01; //選取定期器0為兩個16位定期器TH0=0xFF; //對定期器進行計數(shù)值進行初始化TL0=0x19; //同上,時間大概為25uSTR0=1; //批準開始定期器0EX1=1; //批準啟動外部中斷1IT1=1; //設(shè)定外部中斷1為低邊沿觸發(fā)類型EA=1; //總中斷啟動while(1) //程序主循環(huán){while(LedFlash--) //閃燈總延時{if(IR1==0) //判斷延時期間與否有紅外信號輸入{ExeFlag=1; //將可執(zhí)行標志位置1}}RunLed=!RunLed; //運營批示燈取反LedFlash=3000; //運營閃動時間重設(shè)定if(ExeFlag==0) //判斷可執(zhí)行標志位{EX1=1; //啟動外部中斷1}ExeFlag=0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論