【新版CH554评测-DIY】3.触摸按键实现LED灯开关、调光控制
<div class='showpostmsg'> 本帖最后由 zhang7309 于 2018-4-18 22:57 编辑使用CH554板载4路触摸按键实现对LED灯的开关及调光控制
按键功能:P14控制LED灯关闭;P15控制LED灯打开;P16控制LED灯调亮;P17控制LED灯调暗。
LED灯板使用旧的(之前自己焊接的LED灯,部分灯珠坏了),灯珠为草帽型白光LED,电路连接方式为:多个LED灯珠并联,后串接20欧电阻(防止电流过大损坏灯珠)。
LED电源驱动部分(由于没有驱动板)使用直流马达驱动模块MX1508;
MX1508可以驱动两路直流马达;并可以实现对马达的正、反转控制、刹车、待机等,通过IN端输入PWM
信号对马达转速进行控制;可以利用这一点对LED实现调光效果。
模块如下图所示:
LED灯的开关控制效果
程序界面
代码部分
/********************************** (C) COPYRIGHT *******************************
* File Name : Main.C
* Author : WCH
* Version : V1.0
* Date : 2017/01/20
* Description : CH554 PWM初始化,占空比设置,PWM默认电平设置
支持中断方式修改PWM占空比
*******************************************************************************/
#include "..\Public\CH554.H"
#include "..\Public\Debug.H"
#include "TouchKey.H"
#include "PWM.H"
#include "stdio.h"
#include "GPIO.H"
#pragmaNOAREGS
//sbit LED0 = P1^6;
//sbit LED1 = P1^7;
void init_PWM(void);
//void init_GPIO(void);
void init_TK(void);
void get_TK(void);
void check_PWM(void);
UINT8 x;
bit led;
main( )
{
CfgFsys( ); //CH554时钟选择配置
mDelaymS(5); //配置时钟后,建议延时稳定时钟
mInitSTDIO( );
init_PWM();
// init_GPIO();
init_TK(); //串口0初始化
printf("start ...\n");
while(1)
{
get_TK();
mDelaymS(100);
// check_PWM();
}
}
void init_PWM(void)
{
PWM1PINAlter( );
P3_MOD_OC &= ~(bPWM1_| bPWM2_); //设置PWM引脚为推挽输出
P3_DIR_PU |= bPWM1_ | bPWM2_;
SetPWMClk(4); //PWM时钟配置 ,4分频
ForceClearPWMFIFO( ); //强制清除PWM FIFO和COUNT
CancleClearPWMFIFO( ); //取消清除PWM FIFO和COUNT
PWM1OutEnable( ); //允许PWM1输出
PWM2OutEnable( ); //允许PWM2输出
PWM1OutPolarHighAct( ); //PWM1输出默认低,高有效
PWM2OutPolarLowAct( ); //PWM2输出默认高,低有效
SetPWM1Dat(0x00); //占空比0x10/256
SetPWM2Dat(0xf0);
}
/*
void init_GPIO( void )
{
Port1Cfg(1,6); //P16设置推挽模式
Port1Cfg(1,7); //P17设置推挽模式
LED0 = 0;
LED1 = 0;
// GPIOInterruptCfg(); //GPIO中断配置函数
//EA = 1;
}
*/
void init_TK(void)
{
TK_Init( BIT4+BIT5+BIT6+BIT7,1, 1 ); /* Choose TIN2, TIN3, TIN4, TIN5 for touchkey input. enable interrupt. */
TK_SelectChannel(0); /* NOTICE: ch is not compatible with the IO actually. */
EA = 1;
}
void get_TK(void)
{
if( Touch_IN != 0 )
{
if( Touch_IN & CH2 )
{
printf("CH2 is pressed.\n");
printf("LED ON.\n");
// LED0=1 ;
// LED1=1 ;
led=0;
x=0;
SetPWM1Dat(x);
}
if( Touch_IN & CH3 )
{
printf("CH3 is pressed.\n");
printf("LED OFF.\n");
// LED0=0 ;
// LED1=0 ;
led=1;
x=0x2f;
SetPWM1Dat(x);
}
if( Touch_IN & CH4 )
{
printf("CH3 is pressed.\n");
printf("LED OFF.\n");
// LED0=0 ;
// LED1=0 ;
if(x<255&led==1)
{
x=x+3;
SetPWM1Dat(x);
}
}
if( Touch_IN & CH5 )
{
printf("CH3 is pressed.\n");
printf("LED OFF.\n");
// LED0=0 ;
// LED1=0 ;
if(x>1&led==1)
{
x=x-3;
SetPWM1Dat(x);
}
}
Touch_IN = 0;
}
}
void check_PWM(void)
{
UINT8 x=0x00;
if(PWM_CTRL&bPWM_IF_END)
{
PWM_CTRL |= bPWM_IF_END; //清除PWM中断
for(x=0;x<255;x++)
{
SetPWM1Dat(x);
mDelaymS(10);
}
for(x=255;x>0;x--)
{
SetPWM1Dat(x);
mDelaymS(10);
}
/*
#ifdef DE_PRINTF
printf("PWM_CYC_END%02X\n",(UINT16)PWM_CTRL);
#endif */
}
}
附调光视频http://v.youku.com/v_show/id_XMzU0ODA1NzM0MA==.html?spm=a2h3j.8428770.3416059.1
http://v.youku.com/v_show/id_XMzU0ODA1NzM0MA==.html?spm=a2h3j.8428770.3416059.1
小结:触摸按键实现LED灯调光,后续将对USB功能进行测试,同时加入外围LCD、传感器等,实现DIY。
此内容由EEWORLD论坛网友zhang7309原创,如需转载或用于商业用途需征得作者同意并注明出处
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> {:1_103:}{:1_103:}{:1_103:} :handshake
页:
[1]