基于MS16F3211芯片的触摸控制灯的状态变化和亮度控制(11.17,PWM)

紧接上文,基本的控制逻辑并不难写,难的是是、如何输出自己想要频率的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-PB2
	PWM1DH = 0XFF;
	PWM1DL = 0X00; 
	
//占空比 PWM01-W-PB1
	PWM0DTH = 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 

}

你可能感兴趣的:(c语言)