智能小車一直以來都是電子設(shè)計大賽題目的座上賓。尤其是難度高的那一類題目,讓不少單片機愛好者和參加大賽的學(xué)生頭疼。小車在各個模塊的協(xié)同作用下,可以上坡、測量和障礙物的距離,跨越障礙物如履平地。完美實現(xiàn)小車的控制:左轉(zhuǎn)、右轉(zhuǎn)、前進、后退和停止等操作 。
優(yōu)酷觀看視頻
http://v.youku.com/v_show/id_XMzE0NTA5MzAw.html
所有資料打包下載:
智能小車原理圖和程序.zip
(620.87 KB, 下載次數(shù): 13)
2016-10-16 17:43 上傳
點擊文件名下載附件
- /***********************************************************************************************************/
- //DZR-01A V2.0 超聲波測距模塊 DEMO 程序
- //晶振:11.0592MHz 單片機:STC12C5A60S2
- //程序編寫:Roling
- //本程序在DZR-01A開發(fā)板上測試有效
- //接線:模塊TRIG接 P20 ECH0 接P21
- /***********************************************************************************************************/
- #include <STC.h>
- #include <ConfigOfDZR01A.h>
- #include <InitConfigOfDZR01A.c>
- #include <intrins.h>
- #define OFF 0 //關(guān)
- #define ON 1 //開
- #define ECHO P21
- #define TRIG P20
- unsigned char code TableData[12] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F/*0-9*/,0x00/*無*/,0x40/*-*/};//數(shù)碼管數(shù)字0-9
- unsigned char code TableSeg [ 8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //數(shù)碼管位置0-7
- unsigned char disbuff[8] = { 10,10,10,10,11,11,11,11}; //顯示數(shù)組
- bit flag =0; //時間溢出標志位
- bit begin; //啟動超聲波模塊標志
- /***************************************************************************************
- ** 函數(shù)名稱: void Delay_ms(unsigned int ms)
- ** 功能描述: 延時函數(shù)
- ** 輸 入: unsigned int ms 延時時間
- ** 輸 出: 無
- ** 全局變量: 無
- ** 調(diào)用模塊: 無
- ****************************************************************************************
- void Delay_ms(unsigned int ms)
- {
- unsigned char i;
- for(;ms>0;ms--)
- for(i=127;i>0;i--)
- ;
- }
- ********************************************************/
- void Conut(void)
- {
- unsigned int time=0;
- unsigned long S = 0;
- time = TH0*256 + TL0;
- TH0 = 0;
- TL0 = 0;
-
- S = (time * 1.8445)/100; //[1.85]算出來是CM,乘以1.085原因是采用11.0592M的晶振,12M晶振乘以1.0
- if((S >= 700) || flag) //超出測量范圍顯示“-”
- {
- flag=0;
- // disbuff[0]=11; //“-”
- // disbuff[1]=11; //“-”
- // disbuff[2]=11; //“-”
- }
- else
- {
- disbuff[0] = S%1000/100;
- disbuff[1] = S%1000%100/10;
- disbuff[2] = S%1000%10 %10;
- }
- }
- /********************************************************/
- void EnableUltrasonic() //啟動超聲波模塊
- {
- unsigned char i;
- TR0 = 1;
- TH0 = 0;
- TL0 = 0;
- while(!begin);
- begin = 0;
- TRIG = 1; //800MS 啟動一次模塊
- for(i=12;i>0;i--)
- {
- _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
- _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
- }
- TRIG = 0;
- }
- /*********************************************************/
- void main( void )
- {
- InitConfigOfDZR01A();
- TRIG = 0;
- ECHO = 1;
- TMOD = 0x11; //設(shè)T0為方式1,GATE=1;
- ET1 = 1; //允許T0中斷
- TR1 = 1;
- EA = 1; //開啟總中斷
- begin = 0;
- while(1)
- {
- EnableUltrasonic();
- while(1)
- {
- if(ECHO==1) {TH0 = 0;TL0 = 0;TR0 = 1; break;}
- if(TH0&0x80){flag = 1; break;}
- }
- while(1)
- {
- if(ECHO==0) {TR0 = 0; break;}
- if(TH0&0x80){flag = 1; break;}
- }
- Conut(); //計算
- }
- }
- /***************************************************************************************
- ** 函數(shù)名稱: void T1int() interrupt 3
- ** 功能描述: 定時器1中斷
- ** 輸 入: 無
- ** 輸 出: 無
- ** 全局變量: 無
- ** 調(diào)用模塊: 無
- ****************************************************************************************/
- void T1int() interrupt 3//定時器1中斷
- {
- static unsigned char count=0;
- unsigned char num;
- TH1 = 0xFA;
- TL1 = 0x00;
- num = count %8;
- NUX_DATA = TableData[disbuff[num]];//讀取數(shù)組第0個數(shù)據(jù),數(shù)據(jù)為數(shù)碼管字模0.
- NUX_CS_DUAN = 1;//段數(shù)據(jù)送入573
- NUX_CS_DUAN = 0;//把段數(shù)據(jù)鎖存到573
- NUX_DATA = TableSeg [num];// 1111 1110
- NUX_CS_WEI = 1;//位數(shù)據(jù)
- NUX_CS_WEI = 0;//
- count++;
- if(count==255){begin = 1;}
- }
-
復(fù)制代碼
|