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

📄 pwm_key.c

📁 用 PWM +键盘控制 直流电机转动 SPCE061A 的处理器
💻 C
字号:
#include "SPCE061A.h"

unsigned int get_key(void)				//1*8键盘扫描
{
	unsigned int uiData;
	unsigned int uiTemp;
	uiData = *P_IOA_Data;				//读取IOA端口输入
	uiData = uiData&0x00ff;				//仅取低八位有效值
	if(uiData!=0)						//非零则表示有键按下
	{
		delay(1);						//延时消抖
		uiTemp = *P_IOA_Data;
		uiTemp = uiTemp&0x00ff;		    //仅取低八位有效值
		if(uiData != uiTemp)
			uiData = 0;					//两次读数不相等,则置返回值为0
	}
	return uiData;	                    //返回键值	
}

unsigned int get_key_value(unsigned int key)   //1*8 键盘编码
{
	unsigned int key_value;
	switch(key)	
	{
		case 0x0001:  key_value=1;break;
		case 0x0002:  key_value=2;break;
		case 0x0004:  key_value=3;break;
		case 0x0008:  key_value=4;break;
		case 0x0010:  key_value=5;break;
		case 0x0020:  key_value=6;break;
		case 0x0040:  key_value=7;break;
		case 0x0080:  key_value=8;break;
		default :	  key_value=9;break;
	}
	return key_value;
	
}

void pwm_ctrl(unsigned int TIM_data ,unsigned int keyvalue)
{
	unsigned int i,timeA=0,timeB=0,speeder=0,lower=0;
	timeA=C_TMA1_1&C_TMA2_2KHz;
	timeB=C_TMB_4KHz;

	
	switch (keyvalue)
	{
		case 1 : 	*P_TimerA_Ctrl=C_TMA_PWM_D14|timeA;
					delay(10);
					*P_TimerB_Ctrl=C_TMB_PWM_OFF|timeB;
				 	*P_TimerA_Data=TIM_data; *P_Feedback=0x0000;
					speeder=0;
				 	flag=1;
					 //delay(50);
					 break;//  时钟定时 timA 正转
				
		case 2 :	*P_TimerA_Ctrl=C_TMA_PWM_OFF|timeA;
					delay(10);
					*P_TimerB_Ctrl=C_TMB_PWM_D14|timeB;
					delay(10);
					*P_TimerB_Data=TIM_data;*P_Feedback=0x0000;
				  	flag=0;
				  	speeder=0;
				 	//delay(50);
					 break;
		
		case 3 : speeder=1;	break;
		
		case 4:  speeder=2;	break;
		
		case 5:  *P_TimerA_Ctrl=C_TMA_PWM_OFF|timeA;
				 *P_TimerB_Ctrl=C_TMB_PWM_OFF|timeB;
				 break;
		default :  break;	
	}
	//delay(1);
	
	if(speeder==1)//加速
	{
		if(flag)
		{
			*P_TimerA_Ctrl=C_TMA_PWM_OFF|timeA; //正转加速
			//delay(50);
			*P_TimerA_Ctrl=C_TMA_PWM_D2|timeA;
			//delay(100);
			*P_TimerA_Ctrl=C_TMA_PWM_D4|timeA;
			//delay(100);
			*P_TimerA_Ctrl=C_TMA_PWM_D8|timeA;
			//delay(100);
			*P_TimerA_Ctrl=C_TMA_PWM_D12|timeA;
			//delay(100);
			*P_TimerA_Ctrl=C_TMA_PWM_D12|timeA;
			//delay(100);
			*P_TimerA_Ctrl=C_TMA_PWM_D14|timeA;
			//delay(100);		
		}
		else
		{
			*P_TimerB_Ctrl=C_TMB_PWM_OFF|timeB;   //反转加速
			delay(50);
			*P_TimerB_Ctrl=C_TMB_PWM_D2|timeB;
			//delay(100);
			*P_TimerB_Ctrl=C_TMB_PWM_D8|timeB;
			//delay(100);
			*P_TimerB_Ctrl=C_TMB_PWM_D12|timeB;
			//delay(100);
			*P_TimerB_Ctrl=C_TMB_PWM_D14|timeB;
			//delay(100);		
		}
		
	}
	else if(speeder==2)//减速
	{
		if(flag)
		{
			*P_TimerA_Ctrl=C_TMA_PWM_D14|timeA;    //正转减速
			delay(500);
			*P_TimerA_Ctrl=C_TMA_PWM_D12|timeA;
			delay(100);
			*P_TimerA_Ctrl=C_TMA_PWM_D8|timeA;
			delay(100);
			*P_TimerA_Ctrl=C_TMA_PWM_D4|timeA;
			delay(100);
			*P_TimerA_Ctrl=C_TMA_PWM_D2|timeA;
			delay(100);
			*P_TimerA_Ctrl=C_TMA_PWM_D1|timeA;
			delay(100);
			*P_TimerA_Ctrl=C_TMA_PWM_OFF|timeA;
			delay(10);		
		}
		else
		{
			*P_TimerB_Ctrl=C_TMB_PWM_D14|timeB;   //反转减速
			delay(500);
			*P_TimerB_Ctrl=C_TMB_PWM_D12|timeB;
			delay(100);
			*P_TimerB_Ctrl=C_TMB_PWM_D8|timeB;
			delay(100);
			*P_TimerB_Ctrl=C_TMB_PWM_D2|timeB;
			delay(100);
			*P_TimerB_Ctrl=C_TMB_PWM_OFF|timeB;
			delay(100);		
		}
		
	}
	
}
	
/*	switch(PWM)
		{
			case 1: if(keyvalue==1){*P_TimerA_Ctrl=C_TMA_PWM_D1|timeA;break;}
					else if(keyvalue==2){*P_TimerB_Ctrl=C_TMB_PWM_D1|timeB;break;}
					
			case 2: *P_TimerA_Ctrl=C_TMA_PWM_D2|time;break;
			case 3: *P_TimerA_Ctrl=C_TMA_PWM_D3|time;break;
			case 4: *P_TimerA_Ctrl=C_TMA_PWM_D4|time;break;
			case 5: *P_TimerA_Ctrl=C_TMA_PWM_D5|time;break;
			case 6: *P_TimerA_Ctrl=C_TMA_PWM_D6|time;break;
			case 7: *P_TimerA_Ctrl=C_TMA_PWM_D7|time;break;
			case 8: *P_TimerA_Ctrl=C_TMA_PWM_D8|time;break;
			case 9: *P_TimerA_Ctrl=C_TMA_PWM_D9|time;break;
			case 10: *P_TimerA_Ctrl=C_TMA_PWM_D10|time;break;
			case 11: *P_TimerA_Ctrl=C_TMA_PWM_D11|time;break;
			case 12: *P_TimerA_Ctrl=C_TMA_PWM_D12|time;break;
			case 13: *P_TimerA_Ctrl=C_TMA_PWM_D13|time;break;
			case 14: *P_TimerA_Ctrl=C_TMA_PWM_D14|time;break;
			case 15: *P_TimerA_Ctrl=C_TMA_PWM_TA|time;break;
			default: *P_TimerA_Ctrl=C_TMA_PWM_OFF|time;break;
		}
*/		


void delay(unsigned int num)
{
	unsigned int uiCount,i;
	for(i=0;i<num;i++)
		for(uiCount = 0;uiCount <= 500;uiCount++)
			*P_Watchdog_Clear = 0x0001;    //清看门狗
}

⌨️ 快捷键说明

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