⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 智能小车.c

📁 智能小车设计: 基本性能指标: 通过红外传感器或金属传感器检测运行轨迹; 0~3秒内完成小车加速
💻 C
字号:
#include <stdio.h>
#include <at89x52.h>


 #define FORWARDPOWER	P1_0		//前进动力输出
 #define BACKWARDPOWER	P1_1		//后退动力输出
 #define TURNLEFTPOWER	P1_2		//左转动力输出
 #define TURNRIGHTPOWER P1_3		//右转动力输出


 ///////////////////////////////
 #define PWMCYCLE		20				//PWM波周期20ms

 
 /***************************************************/
 /*(定义全局变量)*/


 unsigned char DataPWM1 = 0;		//高电平时间

 unsigned int  Temp = 0;			//时间
 unsigned int  speedtime = 500;	    //加,减速循环次数
 unsigned  int mainswitch=1;

 /***************************************************/



 /***************************************************/
 /*延时程序, 延时1ms*count 时间*/
 void delayx1ms(unsigned int count)
 {
 	unsigned int i, j=500;
 	for (i = 0; i < count; i ++)
 	{
 		while(--j);
 	}
 }

 /*方波产生程序*/
 void pwmMake(void)
 {
 	Temp++;
 	/*高电平时间为DataPWM1 * 1ms,低电平时间为(PWMCYCLE - DataPWM1)*1ms*/
 	if (Temp <= DataPWM1)
 	{
 		FORWARDPOWER = 1;
		delayx1ms(1);
 	}
 	else if (Temp <= PWMCYCLE)
 	{
 		FORWARDPOWER = 0;
		delayx1ms(1);
 	}
 	else if (Temp > PWMCYCLE)
 	{
 		Temp = 0;
       
 	}

 }

 /*匀加速函数*/
void accespeed(void)
{
for(DataPWM1=0;DataPWM1<=20;DataPWM1+=4)
for(speedtime=250;speedtime>0;speedtime--)         //定时0.5s
       pwmMake();
 
  }

 /*匀速函数*/
void normalspeed (int a)
{
DataPWM1=a;
for(speedtime=250;speedtime>0;speedtime--)
       pwmMake();
}

 /*匀减速函数*/
 void decspeed(void)
{ for(DataPWM1 = 18;DataPWM1>=0;DataPWM1-=4)
  for(speedtime=250;speedtime>0;speedtime--)
       pwmMake();
 
  }

/*左转函数*/
 void turnLeft(int t1, int t2)
 {
 	TURNLEFTPOWER = 1;				//直接用置高电平的方式使其获得一定时间的转向动力
 	TURNRIGHTPOWER = 0;
	delayx1ms(t1);
	TURNLEFTPOWER = 0;
	TURNRIGHTPOWER = 1;
	delayx1ms(t2);
	TURNLEFTPOWER = 0;
    TURNRIGHTPOWER = 0;
 }
 
 /*右转函数*/
 void turnRight(int t1, int t2)
 {
 	TURNLEFTPOWER = 0;
 	TURNRIGHTPOWER = 1;
 	delayx1ms(t1);
	TURNLEFTPOWER = 1;
	TURNRIGHTPOWER = 0;
	delayx1ms(t2);
	TURNLEFTPOWER = 0;
	TURNRIGHTPOWER = 0;
 	
 }

 void ex0ISR(void) interrupt IE0_VECTOR
{
			turnLeft(5, 1);
}

 void ex1ISR(void) interrupt IE1_VECTOR
{
		turnRight(5, 1);
}
 
  /*初始化程序*/
 void init(void)
 {
    P0_0=1;
	P0_1=1;
	P0_2=1;
 	FORWARDPOWER = 0;				//初始动力电压为0
 	BACKWARDPOWER = 0;
 	TURNLEFTPOWER = 0;
 	TURNRIGHTPOWER = 0;
	EA = 1; 		//允许CPU中断
	
 
 }


 //主函数
 void main()
 { 
init();              //初始化程序

while(mainswitch)
{
if(P0_0==1)
{EX0=0;
EX1=0;
          accespeed();
		  normalspeed(18);
		  decspeed();
		  FORWARDPOWER=0;
		  delayx1ms(500);
}
if(P0_1==1)
{EX0=1;
EX1=1;
while(mainswitch)
{	normalspeed(15);
if(P0_3==1)
mainswitch=0;
}
mainswitch=1;
}
}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -