要求已全做完
(1设计并焊接实现小车的各种运行状态。 ①设计并焊接实现按键控制小车的各种运行状态,包括启动停止、前进倒退、加速减速等; ②设计并焊接实现使用数码管、LCD等显示器件监测小车的运行状态,请自行定义要显示的内容,如运行状态、运行速度挡位等。 (2) 设计并焊接实现无线数据传输遥控小车的运行状态。 ①使用具有蓝牙功能的PC或手机,设计通过蓝牙实现无线数据传输,进而遥控小车的各种运行状态; ③使用多种编码格式的红外遥控器设计解码算法,实现红外遥控小车的各种运行状态。 (3)创新层(选做):使用多种传感器设计实现小车的智能控制。 ①基于超声波传感器实现小车自动避障; ②基于红外线传感器实现小车自动循迹‘。
单片机源程序如下:
- #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; //?????ж?
- }
复制代码
余下代码在压缩包 全部资料51hei下载地址:
xiaoche.rar
(251.19 KB, 下载次数: 15)
|