本帖最后由 南来之风 于 2025-4-26 15:09 编辑
上期文章已经调试成功了自制的电容触摸扩展板,本次扩展PWM驱动板载LED,实现触摸控制亮度调节。
触摸按键的调试,参考: https://bbs.21ic.com/icview-3448674-1-1.html
从电路板原理图,P3_0连接到LED2:
引脚P3_0的有PWM功能:
打开Device COnfigurator,在外设里面找到Digital,开启TCPWM 16bit Counter 0
点击保存,在main.c里面增加初始化代码:
(void) Cy_TCPWM_PWM_Init(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM,
&CYBSP_PWM_P3_0_config);
/* Enable the initialized PWM */
Cy_TCPWM_Enable_Multiple(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_MASK);
/* Then start the PWM */
Cy_TCPWM_TriggerReloadOrIndex(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_MASK);
Cy_TCPWM_PWM_SetPeriod0(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM, 1000);
Cy_TCPWM_PWM_SetCompare0(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM, 0);
根据是否触摸来调节LED亮度:
void led_control() {
static uint32_t a = 0;
static uint32_t PrevStatus = 0;
static uint32_t CurrentStatus = 0;
CurrentStatus = Cy_CapSense_IsWidgetActive(CY_CAPSENSE_BUTTON0_WDGT_ID, &cy_capsense_context);
if((CAPSENSE_WIDGET_INACTIVE == CurrentStatus)&&(CurrentStatus != PrevStatus)){
if (a == 1000)
a = 0;
else
a = a + 200;
Cy_TCPWM_TriggerReloadOrIndex(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_MASK);
Cy_TCPWM_PWM_SetPeriod0(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM, 1000);
Cy_TCPWM_PWM_SetCompare0(CYBSP_PWM_P3_0_HW, CYBSP_PWM_P3_0_NUM, a);
}
....
}
烧录后,触摸按键按下后,亮度从最低到最亮。
演示视频:
https://v.youku.com/video?vid=XNjQ2OTM5MDk1Mg==
|