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

📄 key_control_pwm.c

📁 motor_control.zip
💻 C
字号:

/////COPYRIGHT RESERVED BY DU////////////////////////////////

#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^0;
uchar i=0,duty=0,times=1;

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();
    Port_IO_Init();
	Oscillator_Init();
    Interrupts_Init();
}

void main (void) 
{
   uchar t;
   Init_Device();/*初始化IO口,PCA初始化成频率输出方式*/
   CH452_Init();
	for(t=0;t<8;t++)
	CH452_Write((CH452_DIG0+ (t<<8))|16); 
	LEDC=1;	
   EA = 1;		  /*开总中断*/
   delayms(20);
   
				
   while (1) {}
}

/*PCA中断子程序*/
void PCA_ISR (void) interrupt 9
{
	//EIE2      = 0x00;
//	CF   = 0;           /*清溢出中断标志*/
	CCF0 = 0;			/*清匹配中断标志*/
//	EA =0;
	//PCA0CPH0 += 0x10;	/*改变波形的频率*/
} 
 /*键盘中断子程序*/
void led(void)  interrupt 19
{
  
	uchar key,mid_var;
	EA = 0;
	key=CH452_Read();
 if(0x63==key)
	{	
		if(duty < 10)
			CH452_Write( CH452_DIG1 );
		CH452_Write( CH452_DIG2 );
		CH452_Write( CH452_SET_BIT | 0x3a );
		times = 1;	
		PCA0CPH0 =(uchar)((100-duty)*2.56);		//把duty值转换,赋值给控制占空比的寄存器
		PCA0CPH1=(uchar)((100-duty)*2.56); 
		EA = 1;		
	}
 else if(0x60==key)
	{  
	   delayms(10);
	   LEDC=~LEDC;
	  
	   EA = 1;	
	}
 else if(0x61==key)    //左减或正常	PCA0CPH1控制左轮,PCA0CPH0控制右轮
	{ delayms(10);
	  i=!i;  
	if(i==1) 
	{if(duty>=80)
	     {duty=duty-50;		
	      PCA0CPH1 =(uchar)((100-duty)*2.56); }
	 else
	     {duty=duty+50;
		  if(duty>=100){duty=100;}
	      PCA0CPH0 =(uchar)((100-duty)*2.56);}
	 }
	if(i==0)
	{
	 if(duty<=80)
	     {duty=duty+50;
		  if(duty>=100){duty=100;}
	      PCA0CPH1 =(uchar)((100-duty)*2.56);}
	 else
	     {duty=duty-50;
	      PCA0CPH0 =(uchar)((100-duty)*2.56);}
	}
	
	 EA = 1;
	}
 else if(0x62==key)//右减或正常
	{ delayms(10);
	i=!i;
	if(i==1) 
	{if(duty>=80)
	     {duty=duty-50;
	      PCA0CPH0 =(uchar)((100-duty)*2.56);}
	 else
	     {duty=duty+50;
		 if(duty>=100){duty=100;}
	       PCA0CPH1 =(uchar)((100-duty)*2.56);}}
	if(i==0)
	{
	 if(duty<=80)
	     {duty=duty+50;
		 if(duty>=100){duty=100;}
	      PCA0CPH0 =(uchar)((100-duty)*2.56);}
	 else
	     {duty=duty-50;
	      PCA0CPH1 =(uchar)((100-duty)*2.56);}
	 }
	EA = 1;
	}
 else 
	{
		if( 1==times )
		{
			for(mid_var=0;mid_var<8;mid_var++)
				CH452_Write((CH452_DIG0+ (mid_var<<8))|16);
			duty = key_tran( key );
			CH452_Write( CH452_DIG0 | ( duty )  );
			times = 2;
			EA = 1;
		}
		else if( 2 == times)
		{
			CH452_Write( CH452_LEFTMOV );
			CH452_Write( CH452_DIG0 | key_tran( key )  );
			mid_var=duty;
			duty <<= 3;	
			duty += ( mid_var<<1 );	//duty *= 10;
			duty += key_tran( key );
			times =3;
			EA = 1;	
		}
		else	;
	}  

}

⌨️ 快捷键说明

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