要求已全做完
(1設(shè)計(jì)并焊接實(shí)現(xiàn)小車的各種運(yùn)行狀態(tài)。 ①設(shè)計(jì)并焊接實(shí)現(xiàn)按鍵控制小車的各種運(yùn)行狀態(tài),包括啟動(dòng)停止、前進(jìn)倒退、加速減速等; ②設(shè)計(jì)并焊接實(shí)現(xiàn)使用數(shù)碼管、LCD等顯示器件監(jiān)測(cè)小車的運(yùn)行狀態(tài),請(qǐng)自行定義要顯示的內(nèi)容,如運(yùn)行狀態(tài)、運(yùn)行速度擋位等。 (2) 設(shè)計(jì)并焊接實(shí)現(xiàn)無線數(shù)據(jù)傳輸遙控小車的運(yùn)行狀態(tài)。 ①使用具有藍(lán)牙功能的PC或手機(jī),設(shè)計(jì)通過藍(lán)牙實(shí)現(xiàn)無線數(shù)據(jù)傳輸,進(jìn)而遙控小車的各種運(yùn)行狀態(tài); ③使用多種編碼格式的紅外遙控器設(shè)計(jì)解碼算法,實(shí)現(xiàn)紅外遙控小車的各種運(yùn)行狀態(tài)。 (3)創(chuàng)新層(選做):使用多種傳感器設(shè)計(jì)實(shí)現(xiàn)小車的智能控制。 ①基于超聲波傳感器實(shí)現(xiàn)小車自動(dòng)避障; ②基于紅外線傳感器實(shí)現(xiàn)小車自動(dòng)循跡‘。
單片機(jī)源程序如下:
- #include "intrins.h"
- #include "STC15F2K60S2.H"
- #include "MOTOR.H"
- #include "DELAY.H"
- unsigned char curr_speed=0;
- unsigned char run_flag=1; //1???????????У?0??????
- unsigned char run_direct=1; //1?????????0??????
- unsigned char sys_state;
- bit rx_flag=0; //??????λ
- unsigned char rxbuf; //?????????
- #define MAIN_Fosc 11059200L //?????????
- sfr TH2 = 0xD6;
- sfr TL2 = 0xD7;
- /************* IO????? **************/
- sbit P_HC595_SER = P4^0; //pin 14 SER data input
- sbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clock
- sbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clock
- sbit SR_Trig = P1^4; // ??????I/O??
- sbit SR_Echo = P1^3;
- sbit model_flag= P1^2;
- sbit infrared_l = P2^5; //????I/O??
- sbit infrared_m = P2^6;
- sbit infrared_r = P2^7;
- sbit infrared_stop = P4^5; //???????????
- /************* ??????????? **************/
- void motor_turnleft(unsigned char wide);
- void motor_turnright(unsigned char wide);
- void motor_turnl(void);
- void motor_turnr(void);
- void DisplayRTC(void);
- void RTC(void);
- void delay_ms(u8 ms);
- void DisableHC595(void);
- void Initialize_LCD(void);
- void Write_AC(u8 hang,u8 lie);
- void Write_DIS_Data(u8 DIS_Data);
- void ClearLine(u8 row);
- u8 BIN_ASCII(u8 tmp);
- void PutString(u8 row, u8 column, u8 *puts);
- void WriteChar(u8 row, u8 column, u8 dat);
- float measure(void);
- void delay_us(unsigned int us);
- void Car_Track(void);
- /*************************??????****************************/
- void Car_Track(void)
- {
- if(infrared_l==0&&infrared_m==1&&infrared_r==0 )
- motor_start();
- else if( (infrared_l==0&&infrared_m==0&&infrared_r==1)||(infrared_l==0&&infrared_m==1&&infrared_r==1))
- motor_turnr();
- /*else if (infrared_l==0&&infrared_m==1&&infrared_r==0)
- motor_start();
- */
- else if( (infrared_l==1&&infrared_m==0&&infrared_r==0)||(infrared_l==1&&infrared_m==1&&infrared_r==0))
- motor_turnl();
-
- }
- /***********???????***************/
- void Delay_200ms(void)
- {
- unsigned char i,j,k;
- _nop_();
- _nop_();
- i=10;
- j=31;
- k=147;
- do
- {
- do
- {
- while(--k);
- }while(--j);
- }while(--i);
- }
- void Delay_Num(unsigned int n_ms) //@12.000MHz
- {
- unsigned char i,j;
- while(n_ms--)
- {
- i=12;
- j=169;
- do
- {
- while(--j);
- }while(--i);
- }
- }
- /**********???????*************/
- void Delay500us() //@12.000MHz
- {
- unsigned char i,j;
- i=6;
- j=211;
- do
- {
- while(--j);
- }while(--i);
- }
- void Delay50us() //@12.000MHz
- {
- unsigned char i,j;
- i=6;
- j=146;
- do
- {
- while(--j);
- }while(--i);
- }
- void Delay3us() //@12.000MHz
- {
- unsigned char i;
- _nop_();
- _nop_();
- i=6;
- while(--i);
- }
- void Delay30us() //@12.000MHz
- {
- unsigned char i;
- _nop_();
- _nop_();
- i=87;
- while(--i);
- }
- void Delay10us() //@12.000MHz
- {
- unsigned char i;
- _nop_();
- _nop_();
- i=27;
- while(--i);
- }
- void Delay900us() //@12.000MHz
- {
- unsigned char i,j;
- i=11;
- j=126;
- do
- {
- while(--j);
- }while(--i);
- }
- void Delay1ms() //@12.000MHz
- {
- unsigned char i,j;
- i=12;
- j=169;
- do
- {
- while(--j);
- }while(--i);
- }
- void Delay4500us() //@12.000MHz
- {
- unsigned char i,j;
- i=53;
- j=132;
- do
- {
- while(--j);
- }while(--i);
- }
- void Delay600us() //@12.000MHz
- {
- unsigned char i,j;
- i=7;
- j=254;
- do
- {
- while(--j);
- }while(--i);
- }
- void motor_init(void)
- {
- P_SW2|=BIT7;
- PWMCKS=0;
- PWMCFG=0;
- PWMC=CYCLE; //????????
- PWM5CR=0; //?????????????????
- PWM5T1=0;
- /*********************************/
- PWM5T2=CYCLE*60/100;
- PWM4CR=0;
- PWM4T1=0;
- PWM4T2=CYCLE*60/100;
- /**********************************/
- PWMCR=BIT3+BIT2; //PWMCR=0X60 ,pwm?????? 00001100
- PWMCR|=BIT7;
- P_SW2&=~BIT7;
- PWMCR|=BIT3+BIT2;
- run_flag=1;
- }
- ///////////////???????//////////////////////////////////
- void motor_setspeed(unsigned char wide)
- {
- if(run_flag)
- {
- wide=curr_speed;
- if(!run_direct)
- wide=100-wide; //???????????????
- if(wide)
- {
- P_SW2|=BIT7;
- PWM5T2=(u16)(CYCLE/(100/wide*0.5)); //????????
- PWM4T2=(u16)(CYCLE/(100/wide*0.5)); //?????????????????
- P_SW2&=~BIT7;
- PWMCR|=BIT3+BIT2;
- }
- }
- else
- {
- PWMCR&=~(BIT3+BIT2);
- IN1=0;IN2=0;IN3=0;IN4=0;
- }
- }
- ///////////////???////////////////////////////////////////
- void motor_turnleft(unsigned char wide)
- {
- if(run_flag)
- {
- curr_speed=wide;
- if(!run_direct)
- wide=100-wide; //???????????????
- if(wide)
- {
- P_SW2|=BIT7;
- PWM5T2=(u16)(CYCLE/(100/(wide*0.01))); //????????
- PWM4T2=(u16)(CYCLE/(100/wide)); //?????????????????
- P_SW2&=~BIT7;
- PWMCR|=BIT3+BIT2;
- }
- }
- else
- {
- PWMCR&=~(BIT3+BIT2);
- IN1=0;IN2=0;IN3=0;IN4=0;
- }
- }
- ///////////////////???//////////////////////////////////////////
- void motor_turnright(unsigned char wide)
- {
- if(run_flag)
- {
- curr_speed=wide;
- if(!run_direct)
- wide=100-wide; //???????????????
- if(wide)
- {
- P_SW2|=BIT7;
- PWM5T2=(u16)(CYCLE/(100/wide)); //????????
- PWM4T2=(u16)(CYCLE/(100/(wide*0.01))); //?????????????????
- P_SW2&=~BIT7;
- PWMCR|=BIT3+BIT2;
- }
- }
- else
- {
- PWMCR&=~(BIT3+BIT2);
- IN1=0;IN2=0;IN3=0;IN4=0;
- }
- }
- ///////////////??????///////////////////////////////////////
- void motor_forward(void)
- {
- IN2=0;IN4=0;
- run_direct=1;
- motor_setspeed(curr_speed);
- }
- ///////////////???_1///////////////////////////////////////
- void motor_turnl(void)
- {
- IN2=0;IN4=0;
- run_direct=1;
- motor_turnleft(curr_speed);
- }
- ///////////////???_1///////////////////////////////////////
- void motor_turnr(void)
- {
- IN2=0;IN4=0;
- run_direct=1;
- motor_turnright(curr_speed);
- }
- ////////////////??????///////////////////////////////////////////
- void motor_backward(void)
- {
- IN1=0;
- IN2=1;
- IN3=0;
- IN4=1;
- run_direct=0;
- motor_setspeed(curr_speed);
- }
- ////////////////?????//////////////////////////////////////
- void motor_stop(void)
- {
- PWMCR&=~(BIT3+BIT2);
- IN1=0;IN2=0;
- IN3=0;IN4=0;
- run_flag=0;
- }
- /////////////////??????///////////////////////////////////////
- void motor_start(void)
- {
- run_flag=1;
- curr_speed=70;
- motor_forward();
- }
- /**************** ?????????? ****************/
- void UART_Init(void) //9600bps@12.000MHz
- {
- SCON =0x50; //8λ????????????
- AUXR &=0xBF; //?????1????Fosc/12????12T
- AUXR &=0xFE; //???????????1????????????
- TMOD &=0x0F; //?????1?????16λ?????????
- TL1=0xe7;
- TH1=0xFF; //????????
- ET1=0; //????????1?ж?
- TR1=1; //????????1
- REN=1; //???????
- ES=1; //?????ж?
- }
復(fù)制代碼
余下代碼在壓縮包 全部資料51hei下載地址:
xiaoche.rar
(251.19 KB, 下載次數(shù): 15)
2020-3-28 16:02 上傳
點(diǎn)擊文件名下載附件
小車源代碼
|