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

📄 con5in.c

📁 motor_control.zip
💻 C
字号:


////////COPYRIGHT RESERVED BY DU///////////////
//////////2007.9.3.P.M.11:55//////////////////

#include "c8051F020.h"
#include "intrins.h"
#include "CH452CMD.H"	// 定义常用命令码及外部子程序
#include "pin.h"
#include "math.h"
#include "key_display.h"
// Peripheral specific initialization functions,
// Called from the Init_Device() function

sbit LEDC	=	P3^4;
sbit BACK	=	P3^0;
sbit START	=	P3^2;
sbit IN0	=	P0^5;//左
sbit IN1	=	P0^6;//中
sbit IN2	=	P0^7;//右
sbit IN3	=	P1^0;//斜右
sbit IN4	=	P1^1;//斜左
uchar duty=80,duty0=0,duty1=0;

void Port_IO_Init()
{
    // P0.0  -  CEX0 (PCA),  Open-Drain, Digital
   // P0.1  -  CEX1 (PCA),  Open-Drain, Digital
       XBR0      = 0x10;	/*CEX0-->P0.0,CEX1-->P0.1*/
       XBR2      = 0x40;	
}

void Interrupts_Init()
{
    EIE1      = 0x08;  //使能PCA0中断 
	EIE2      = 0x20;
    EIP2      = 0x20;  
}
 

// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
    Reset_Sources_Init();
    PCA_Init();
	 //ADC_Init();
	//Voltage_Reference_Init();
    Port_IO_Init();
	Oscillator_Init();
    Interrupts_Init();
}
void speedchange(uchar duty,uchar i)
{
     if(i==0) PCA0CPH0 =(uchar)((100-duty)*2.56);		//把duty值转换,赋值给控制占空比的寄存器
	 if(i==1) PCA0CPH1=(uchar)((100-duty)*2.56); 

}
void main (void) 
{
   uchar a,b,c,d,e,left=0,right=0;
   Init_Device();/*初始化IO口,PCA初始化成频率输出方式*/ 
	LEDC=1;
	IN0=1;
	IN1=1;
	IN2=1;
	IN3=1;
	IN4=1;
   while (1)
   {
    
    a=IN0;
	b=IN1;
	c=IN2;
	d=IN3;
	e=IN4;
	//delayms(1);
	if(d==0&&e==0)
	{
	if((a==0&&b==1&&c==0))
	{   
	    EA =0;
	    left=0;
		right=0;
	    PCA0CPH0 = 0x33;
		PCA0CPH1 = 0x33;
		EA =1;
	}

	else if((a==1&&b==0&&c==0)||(a==1&&b==1&&c==0))
	{	  
	      EA =0;
	      left=1;
		  right=0;		  
	      duty1=duty-50;
		  speedchange(duty1,1);
		  EA =1;

	}
	else if((a==0&&b==0&&c==1)||(a==0&&b==1&&c==1))
	{   
	 	 EA =0;
		 left=0;
		 right=1;	 
	     duty0=duty-50;
	     speedchange(duty0 ,0);
		 EA =1;
	     
	 }
	else if (a==0&&b==0&&c==0)
	{
	     if(left==1)
		 {
		  EA =0;
	      duty1=duty-50;
		  speedchange(duty1,1); }
		 else if(right==1)
		 {
		 	   EA =0;
	          duty0=duty-50;
	          speedchange(duty0 ,0);}
	    else
		  {
		 	 EA =0;
	        PCA0CPH0 = 0x33;
		    PCA0CPH1 = 0x33;}
		EA =1;
	 }
 	else 
	 {
	    EA =0;
	    PCA0CPH0 = 0x33;
		PCA0CPH1 = 0x33;
		EA =1;
	  } 
	  
	  
	  }
  if((d==1)&&(e==0))	 //左拐
  {
  	PCA0CPH1=0xff;
	PCA0CPH0=0x80;
 
}	  
if(d==0&&e==1)	 //右拐
  {
  	PCA0CPH0=0xff;
	PCA0CPH1=0x80;
  
 }	  
	  
	   
   // delayms(10);
    
	
	}
	
}

/*PCA中断子程序*/
void PCA_ISR (void) interrupt 9
{
	//EIE2      = 0x00;
//	CF   = 0;           /*清溢出中断标志*/
	CCF0 = 0;			/*清匹配中断标志*/
//	EA =0;
	//PCA0CPH0 += 0x10;	/*改变波形的频率*/
} 
 /*键盘中断子程序*/
void led(void)  interrupt 19
{
  
	uchar key;
	EA = 0;
	key=CH452_Read();
 if(0x60==key)
	{  
	   delayms(10);
	   LEDC=~LEDC;	  
	   EA = 1;	
	}

 
 

} 

⌨️ 快捷键说明

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