調(diào)用xunji那塊不好使,而調(diào)用其他轉(zhuǎn)彎啦,直走啦,停止啦,都可以,為啥循跡不好使呢,請(qǐng)幫我分析一下,謝謝,可以加分xunji()本來是main()的,然后while(1)我也去掉了。。字?jǐn)?shù)有限制,只能上傳一部分程序// #include <AT89X52.h>/************************************************************************/void delay1(unsigned int k) //延時(shí)函數(shù){ unsigned int x,y;for(x=0;x<k;x++) for(y=0;y<2000;y++);}/************************************************************************/void run(void) //前進(jìn)函數(shù){push_val_left =2; //PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個(gè)值可以改變其速度push_val_right =2; //PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個(gè)值可以改變其速度Left_moto_go ; //左電機(jī)前進(jìn)Right_moto_go ; //右電機(jī)前進(jìn)}/***************************************************/void xunji(void){TMOD=0X01;TH0= 0XF8; //1ms定時(shí)TL0= 0X30;TR0= 1;ET0= 1;EA = 1;//while(1) /*無限循環(huán)*///四路尋跡傳感器有信號(hào)(白線)為0 沒有信號(hào)(黑線)為1switch(P0&0x0f){case 0x00: // 全部沒有壓線,直轉(zhuǎn)run();break;case 0x01: // 右壓線,左轉(zhuǎn)left();delay1(2);break;case 0x02: // 右壓線,左轉(zhuǎn)left();delay1(2);break;case 0x04: // 左壓線,右轉(zhuǎn)right();delay1(2); //轉(zhuǎn)向延時(shí)break;case 0x08: // 左壓線,右轉(zhuǎn)right(); delay1(2); //轉(zhuǎn)向延時(shí)break;case 0x0f: //stop();delay1(6); break;default:break;}}
2 回答

MYYA
TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊
1、子程序不用寫main函數(shù)。
2、每個(gè)程序只有一個(gè)main函數(shù)。(如果在類里看到了main函數(shù)那個(gè)不是通常意義上的main函數(shù)。只是一個(gè)名字叫做main的自定函數(shù))。main函數(shù)會(huì)接受系統(tǒng)傳入的參數(shù)。參數(shù)是固定的。(但是類里如果見到main函數(shù),肯定是自己定義的參數(shù))。

弒天下
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
大致看了下,LZ的意思是想在自己的main()函數(shù)里調(diào)用xunji函數(shù),然后本來xunji函數(shù)有個(gè)while死循環(huán)的,你不想再子函數(shù)里加,是不?
如果是這樣的話,你可以在你main()函數(shù)里使用while循環(huán)。類似這樣:
int main( void ) { while (1) { if ( /*True*/ ) break ; xunji(); } } |
或者你最好自己改下子函數(shù)的邏輯咯。
- 2 回答
- 0 關(guān)注
- 117 瀏覽
添加回答
舉報(bào)
0/150
提交
取消