紧接上文,基本的控制逻辑并不难写,难的是是、如何输出自己想要频率的PWM波在对应的端口
阅读文档定时器与PWM相关的寄存器,因为之前玩的STM32,所以看起来还是有点困难,准备边看边记录。
如果想要实现在长按时改变PWM,短按时改变状态。那么只需要在按下按键后隔一段时间检测按键是否松开,如果松开代表是短按,如果没松开那么视为长按事件
源代码相关理解
void TC0_INIT(void)
{TC0H = 0XFF; //PWM高电平占空比,定时器高8位TC0L = 0X07; //定时器TC0低8位PWMCON= 0X00; //PWM控制TC0M = 0X08; //模式选择FTC0IF = 0; //TC0 溢出中断标志位,TC0 溢出时被置位,软件清除FTC0IE = 1; //TC0 溢出中断使能位(1=使能,0=失能)FTC0TR = 1; //Bit7 TC0TR, TC0 启动控制位 0 禁止 TC0 定时器FGIE = 1; //GIE:全局中断使能位
}
void LED_PWM_OPEN(void)
{
//占空比 PWM1-Y-PB2PWM1DH = 0XFF;PWM1DL = 0X00; //占空比 PWM01-W-PB1PWM0DTH = 0XFF;PWM0DTL = 0X00; //占空比 PWM0-BLUE-PB0 //PWM0DH = 0XFF; //PWM0DL = 0X00; //周期 PWM0PH = 0XFF; PWM0PL = 0X00; //PB0输出 PWMPSCON = 0x00;//--11 1111 :PB0-OUT //pwm0c PWM0C = 0xc2;//PWM0C_Buf; //11-- 0011 :Fosc/2 //PWM0EN PWM0EN = 0x9d;//PWM0EN_Buf; //1-01 1101 :TP0-EN;8BIT;PWM0X-EN;独立模式;PWM-EN }