📄 pwm_key.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 + -