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);
}
相关推荐
Hello_Embed几秒前
libmodbus 移植 STM32(USB 串口后端篇)
笔记·stm32·单片机·嵌入式·freertos·libmodbus
VekiSon1 小时前
Linux内核驱动——杂项设备驱动与内核模块编译
linux·c语言·arm开发·嵌入式硬件
来自晴朗的明天2 小时前
14、光耦隔离电路(EL3H7)
单片机·嵌入式硬件·硬件工程
G***技2 小时前
杰和IB3-272:以低功耗高性能打造新一代工业智能交互核心
单片机·嵌入式硬件·物联网
czhaii3 小时前
STC AI8052U单片机特点
单片机
MAR-Sky4 小时前
keil5中数据的不同定义和单片机(以stc8为例)里的对应关系(idata,xdata,data,code)
单片机·嵌入式硬件
项目題供诗5 小时前
51单片机入门(八)
单片机·嵌入式硬件·51单片机
羽获飞6 小时前
从零开始学嵌入式之STM32——9.STM32的时钟系统
stm32·单片机·嵌入式硬件
飞睿科技6 小时前
乐鑫智能开关方案解析:基于ESP32-C系列的低功耗、高集成设计
嵌入式硬件·物联网·esp32·智能家居·乐鑫科技
来自晴朗的明天7 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程