xunjixiaochejiaogai

#include <stc89C52.h>

#define uchar unsigned char

#define uint unsigned int

/////////pwm调试使能端

sbit LPWMA=P2^0;//左电机

sbit LM0=P2^1;//

sbit LM1=P2^2;

sbit RPWMB=P2^5;//右电机

sbit RM0=P2^3;//

sbit RM1=P2^4;

////////////五路循迹

sbit L1=P4^4;//左--->右

sbit L0=P4^1;

sbit M0=P3^7;

sbit R0=P3^6;

sbit R1=P3^5;

////////////////

void delay(unsigned int t); //函数声明

void Init_Timer0(void);//定时器初始化

///////////////定义电机转动方向

#define Right_moto_back {RM0=0,RM1=1;} //右电机后退

#define Right_moto_go {RM0=1,RM1=0;} //右电机前进

#define Right_moto_stop {RM0=1,RM1=1;} //右电机停转

#define Left_moto_back {LM0=1,LM1=0;} //左1电机后退

#define Left_moto_go {LM0=0,LM1=1;} //左1电机前进

#define Left_moto_stop {LM0=1,LM1=1;} //左1电机停转

//////////////////////////////

/////////////////////////////

uchar pwm_val_left =0;

uchar push_val_left =0; //左电机占空比N/10

uchar pwm_val_right =0;

uchar push_val_right=0; //右电机占空比N/10

bit Right_moto_stp=1;

bit Left_moto_stp =1;

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

void run(void) //前进函数

{

push_val_left =10; //PWM 调节参数1-20 1为最慢20是最快 改这个值可以改变其速度

push_val_right =10; //PWM 调节参数1-20 1为最慢20是最快 改这个值可以改变其速度

复制代码
		Left_moto_go ; //左1电机前进
		Right_moto_go ; //右1电机前进

}

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

void left(void) //左转函数

{

push_val_left =12;

push_val_right =12;

复制代码
	Right_moto_go;  //右电机继续
	Left_moto_stop; //左电机停走

}

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

void right(void) //右转函数

{

push_val_left =12;

push_val_right =12;

Right_moto_stop; //右电机停走

Left_moto_go; //左电机继续

}

///////////////////////////////////////////////////////////////停止

void delay_50ms(int t)

{

int j;

for(;t>0;t--)

for(j=110;j>0;j--);

}

void yuandizhuan(void)//原地转

{

delay_50ms(30);

push_val_left =20;

push_val_right =20;

Left_moto_go ; //左电机前进

Right_moto_back ;//右电机后退

}

void stop()//停车

{

Left_moto_stop ; //左电机前进

Right_moto_stop ;//右电机后退

}

///////////////////////////////////////////

/*************************PWM调 制 电 机 转 速

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

void pwm_out_left_moto(void) //左电机调速,调节push_val_left的值改变电机转速,占空比

{

if(Left_moto_stp)

{

if(pwm_val_left<=push_val_left)LPWMA=1;

else LPWMA=0;

if(pwm_val_left>=20)pwm_val_left=0;

}

else LPWMA=0;

}

void pwm_out_right_moto(void) //右电机调速,调节push_val_left的值改变电机转速,占空比

{

if(Right_moto_stp)

{

if(pwm_val_right<=push_val_right)

{RPWMB=1;}

else

{RPWMB=0;}

if(pwm_val_right>=20)

{pwm_val_right=0;}

}

else

{RPWMB=0;}

}

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

// void xunji()//寻迹

//{

//

//while(1)

//{

// if(P101&&P111&&P120&&P131&&P141) //直行
// run();
// if(P101&&P111&&P120&&P130&&P141)// 右转

// right();

// if(P101&&P110&&P120&&P131&&P141) // 左转
// left();
// if(P100&&P110&&P120&&P130&&P140) //到终点

// yuandizhuan();

// }

// }

/*TIMER0中断服务子函数产生PWM信号/

void Init_Timer0()interrupt 1 using 2

{

TH0=0XFC; //2Ms定时

TL0=0X30;

pwm_val_left++;

pwm_val_right++;

pwm_out_left_moto();

pwm_out_right_moto();

}

/*************************./z**************************/

void main(void)

{

// TMOD |=0X01;

// TH0= 0XFC; //2ms定时

// TL0= 0X30;

// TR0= 1;

// ET0= 1;

// EA = 1;

// while(1) /无限循环 /

// {

// //xunji();

// push_val_left =6;

// // Left_moto_stop; //左电机停走

// Left_moto_go; //左电机停走

// push_val_right =6;

// Right_moto_go; //右电机继续

// }

}

void delay(unsigned int t)

{

while(--t);

}

c 复制代码
#include <stc89C52.h>

#define uchar unsigned char
#define uint unsigned int
/////////pwm调试使能端
sbit LPWMA=P2^0;//左电机
sbit LM0=P2^1;//
sbit LM1=P2^2;
sbit RPWMB=P2^5;//右电机
sbit RM0=P2^3;//
sbit RM1=P2^4;
////////////五路循迹
sbit L1=P4^4;//左--->右
sbit L0=P4^1;
sbit M0=P3^7;
sbit R0=P3^6;
sbit R1=P3^5;
////////////////
void delay(unsigned int t); //函数声明
void Init_Timer0(void);//定时器初始化
///////////////定义电机转动方向
#define Right_moto_back {RM0=0,RM1=1;} //右电机后退
#define Right_moto_go   {RM0=1,RM1=0;} //右电机前进
#define Right_moto_stop {RM0=1,RM1=1;} //右电机停转
#define Left_moto_back  {LM0=1,LM1=0;} //左1电机后退
#define Left_moto_go    {LM0=0,LM1=1;} //左1电机前进
#define Left_moto_stop  {LM0=1,LM1=1;} //左1电机停转
//////////////////////////////

/////////////////////////////
uchar pwm_val_left =0;
uchar push_val_left =0; //左电机占空比N/10

uchar pwm_val_right =0;
uchar push_val_right=0; //右电机占空比N/10

bit Right_moto_stp=1;
bit Left_moto_stp =1;

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

void run(void) //前进函数
{
			push_val_left =10; //PWM 调节参数1-20 1为最慢20是最快 改这个值可以改变其速度
			push_val_right =10; //PWM 调节参数1-20 1为最慢20是最快 改这个值可以改变其速度

			Left_moto_go ; //左1电机前进
			Right_moto_go ; //右1电机前进
}

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

void left(void) //左转函数
{
		push_val_left =12;
		push_val_right =12;

		Right_moto_go;  //右电机继续
		Left_moto_stop; //左电机停走

}


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

void right(void) //右转函数
{
	push_val_left =12;
	push_val_right =12;
	Right_moto_stop; //右电机停走
	Left_moto_go; //左电机继续
}


///////////////////////////////////////////////////////////////停止
void delay_50ms(int t) 
 { 
    int j; 
    for(;t>0;t--) 
    for(j=110;j>0;j--); 
 } 
 
void yuandizhuan(void)//原地转
{
  delay_50ms(30);	
   push_val_left =20;	
   push_val_right =20;	
   Left_moto_go ; //左电机前进
   Right_moto_back ;//右电机后退


}
void stop()//停车
{
	
   Left_moto_stop ; //左电机前进
   Right_moto_stop ;//右电机后退
}
///////////////////////////////////////////

/*************************PWM调 制 电 机 转 速

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

void pwm_out_left_moto(void) //左电机调速,调节push_val_left的值改变电机转速,占空比
{
	if(Left_moto_stp)
	{
		if(pwm_val_left<=push_val_left)LPWMA=1;
		else  LPWMA=0;
		if(pwm_val_left>=20)pwm_val_left=0;	
	}
  else   LPWMA=0;
}

void pwm_out_right_moto(void) //右电机调速,调节push_val_left的值改变电机转速,占空比
{

if(Right_moto_stp)
{
if(pwm_val_right<=push_val_right)
{RPWMB=1;}

else

{RPWMB=0;}

if(pwm_val_right>=20)

{pwm_val_right=0;}

}

else

{RPWMB=0;}
	
}

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

// void xunji()//寻迹
//{ 
// 

//while(1) 
//{ 
//	if(P10==1&&P11==1&&P12==0&&P13==1&&P14==1) //直行
//		run(); 
//	if(P10==1&&P11==1&&P12==0&&P13==0&&P14==1)// 右转
//		right(); 
//  if(P10==1&&P11==0&&P12==0&&P13==1&&P14==1) // 左转
//  left(); 
//  if(P10==0&&P11==0&&P12==0&&P13==0&&P14==0)  //到终点 
//  yuandizhuan();
// } 
// }

/***********TIMER0中断服务子函数产生PWM信号**********/

void Init_Timer0()interrupt 1 using 2

{
 

TH0=0XFC; //2Ms定时

TL0=0X30;

		
pwm_val_left++;
pwm_val_right++;
	
pwm_out_left_moto();
pwm_out_right_moto();

}

/*************************./z**************************/

void main(void)
{

//	TMOD |=0X01;
//	TH0= 0XFC; //2ms定时
//	TL0= 0X30;
//	TR0= 1;
//	ET0= 1;
//	EA = 1;
//	while(1) /*无限循环*/
//	{
//		//xunji();
//		push_val_left =6;
//	//	Left_moto_stop; //左电机停走
//		Left_moto_go; //左电机停走

//		push_val_right =6;
//		Right_moto_go;  //右电机继续
//	}

}		
void delay(unsigned int t)
{
 while(--t);
}
相关推荐
充哥单片机设计3 小时前
【STM32项目开源】基于STM32的智能家庭安防系统
stm32·单片机·嵌入式硬件
日更嵌入式的打工仔3 小时前
ENET_INIT卡死在DMA_MODE判断
单片机·嵌入式硬件
电鱼智能的电小鱼4 小时前
服装制造企业痛点解决方案:EFISH-SBC-RK3588 预测性维护方案
网络·人工智能·嵌入式硬件·算法·制造
szxinmai主板定制专家5 小时前
基于ARM+FPGA的无人机数据采集卡,6通道24bit采集
arm开发·嵌入式硬件·fpga开发·无人机·能源
点灯小铭10 小时前
基于单片机的智能水箱温度液位控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计
沐欣工作室_lvyiyi14 小时前
基于物联网的体温心率监测系统设计(论文+源码)
单片机·物联网·毕业设计·体温心率检测
小莞尔17 小时前
【51单片机】【protues仿真】基于51单片机火灾报警系统
单片机·嵌入式硬件
qiuiuiu41318 小时前
正点原子RK3568学习日志-编译第一个驱动程序helloworld
linux·c语言·开发语言·单片机
易享电子18 小时前
基于单片机智能台灯(调光,时钟)系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·fpga开发·51单片机·proteus