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);
}
相关推荐
硬汉嵌入式32 分钟前
【无标题】
stm32·wifi·英飞凌·sdio·赛普拉斯·cyw43·cyw55
客家元器件1 小时前
LPDDR5选型参数
嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘1 小时前
实际项目开发单片机—Flash错误
单片机
一个平凡而乐于分享的小比特1 小时前
单片机内部时钟 vs 外部时钟详解
单片机·嵌入式硬件·内部时钟·外部时钟
xyx-3v1 小时前
RK3506G移植APM飞控的可行性
单片机·学习
才鲸嵌入式1 小时前
香山CPU(国产开源)的 SoC SDK底层程序编写,以及其它开源SoC芯片介绍
c语言·单片机·嵌入式·arm·cpu·verilog·fpga
d111111111d2 小时前
编码器测速详情解释:PID闭环控制
笔记·stm32·单片机·嵌入式硬件·学习·算法
福大大架构师每日一题2 小时前
ollama v0.13.4 发布——全新模型与性能优化详解
stm32·嵌入式硬件·性能优化·ollama
保护我方头发丶3 小时前
ESP功能介绍
c语言·嵌入式硬件
国科安芯3 小时前
AS32A601型MCU芯片如何进行IAP升级?
网络·单片机·嵌入式硬件·安全·risc-v·安全性测试