在綜合考量了單片機(jī)的使用性能、成本和時(shí)間等問題,本次課題主要旨在實(shí)現(xiàn)以下性能指標(biāo): 1)根據(jù)力學(xué)結(jié)構(gòu)完成小車整體框架的搭建,穩(wěn)固其整體重心; 2)完成底層運(yùn)動(dòng)系統(tǒng)的搭建,保證小車能夠正常行進(jìn); 3)完成手機(jī)遙控功能,通過手機(jī)控制底層小車的工作方式。 整體小車車身采用學(xué)校提供基本車身框架材料,通過自己的設(shè)計(jì)和搭建,完成底層硬件系統(tǒng)的搭載,再通過上層安卓手機(jī)APP遙控,通過無線藍(lán)牙通信協(xié)議,實(shí)現(xiàn)小車能夠遵從指令實(shí)現(xiàn)在室內(nèi)的自主避障的巡航功能與手機(jī)遙控功能 #include <reg52.h> sbit PWM1 = P2^0;//PWM波產(chǎn)生的端口 sbit PWM2 = P2^1; sbit motor_control_1 = P2^7;//左輪前進(jìn) sbit motor_control_2 = P2^6;//左輪后退 sbit motor_control_3 = P2^5;//右輪前進(jìn) sbit motor_control_4 = P2^4;//右輪后退 sbit LED0 = P0^0;//前燈 sbit LED1 = P0^1;//左后燈 sbit LED2 = P0^2;//右后燈 unsigned int PWMCnt1 = 0; unsigned int cntPWM1 = 60; unsigned int PWMCnt2 = 0; unsigned int cntPWM2 = 60; unsigned char bluetoothdata; void initial_myself(); void initial_interrupt(); void usart_service(void); void delay_long(unsigned int time); void go_forward(void);// void stop(); void turn_right(); void turn_left(); void back(); void main() { initial_myself(); delay_long(100); initial_interrupt(); stop(); while(1) { LED1=1;LED2=1; usart_service(); } } void usart_service() { switch(bluetoothdata) { case 'f':go_forward(); delay_long(100); SBUF = 'f';//返回?cái)?shù)據(jù)到手機(jī) bluetoothdata = 'a'; break; case 's':stop(); delay_long(100); SBUF = 's'; bluetoothdata = 'a'; break; case 'r':turn_right(); delay_long(100); SBUF = 'r'; bluetoothdata = 'a'; break; case 'l':turn_left(); delay_long(100); SBUF = 'l'; bluetoothdata = 'a'; break; case 'b':back(); delay_long(100); SBUF = 'b'; bluetoothdata = 'a'; break; case '1':cntPWM1 = 60; cntPWM2 = 60; delay_long(100); SBUF = '1'; bluetoothdata = 'a'; break; case '2':cntPWM1 = 100; cntPWM2 = 100; delay_long(100); SBUF = '2'; bluetoothdata = 'a'; break; case '3':cntPWM1 = 140; cntPWM2 = 140; delay_long(100); SBUF = '3'; bluetoothdata = 'a'; break; case '4':LED0=0; delay_long(100); SBUF = '4'; bluetoothdata = 'a'; break; case '5':LED0=1; delay_long(100); SBUF = '5'; bluetoothdata = 'a'; break; } } void usart_receive(void) interrupt 4 //串口中斷程序 { if(RI == 1)//收到字符 { RI = 0;//軟件清零 bluetoothdata = SBUF;//讀取數(shù)據(jù) } if(TI == 1)//發(fā)送數(shù)據(jù) { TI = 0;//清零 } } void T0_time() interrupt 1 //定時(shí)器0中斷程序 { PWMCnt1++; PWMCnt2++; if(PWMCnt1 >= 200) { PWMCnt1 = 1; } if(PWMCnt1 <= cntPWM1) //230 { PWM1 = 1; } else { PWM1 = 0; } if(PWMCnt2 >= 200) { PWMCnt2 = 1; } if(PWMCnt1 <= cntPWM2) //230 { PWM2 = 1; } else { PWM2 = 0; } TH0 = (65536 - 50) / 256; TL0 = (65536 - 50) % 256; } void initial_myself() { TMOD = 0x01;// TH0 = (65536 - 50) / 256;//定時(shí)50微秒 TL0 = (65536 - 50) % 256; SCON = 0x50; TMOD = 0x21; TH1 = TL1 = 0xfd;//設(shè)置波特率9600 IP = 0x10;//設(shè)置串口中斷為高優(yōu)先級(jí) } void initial_interrupt() { EA = 1;// 開總中斷 ES = 1;// 開串口中斷 ET0 = 1;//開定時(shí)器0中斷? TR0 = 1;//開定時(shí)器0 TR1 = 1;// 開定時(shí)器1 } void delay_long(unsigned int time) { unsigned int i; unsigned int j; for(i = 0 ; i < time ; i++) { for(j = 0; j < 500; j++); } } void go_forward() { motor_control_1 = 0; motor_control_2 = 1; motor_control_3 = 0; motor_control_4 = 1; } void stop() { motor_control_1 = 0; motor_control_2 = 0; motor_control_3 = 0; motor_control_4 = 0; } void turn_left() { int i=6000; for(;i>=0;i--) { if(i) { motor_control_1 = 0; motor_control_2 = 1; motor_control_3 = 0; motor_control_4 = 0; LED1=0; } else { motor_control_1 = 0; motor_control_2 = 0; motor_control_3 = 0; motor_control_4 = 0; } } LED1=1; } void turn_right() { int i=6000; for(;i>=0;i--) { if(i) { motor_control_1 = 0; motor_control_2 = 0; motor_control_3 = 0; motor_control_4 = 1; LED2=1; } else { motor_control_1 = 0; motor_control_2 = 0; motor_control_3 = 0; motor_control_4 = 0; } } LED2=1; } void back() { motor_control_1 = 1; motor_control_2 = 0; motor_control_3 = 1; motor_control_4 = 0; LED1=0;LED2=0; }
|