zhang7309 发表于 2018-4-18 22:50

【新版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>

wsdymg 发表于 2018-4-19 09:59

{:1_103:}{:1_103:}{:1_103:}

沁恒USB单片机 发表于 2018-5-2 18:04

:handshake
页: [1]
查看完整版本: 【新版CH554评测-DIY】3.触摸按键实现LED灯开关、调光控制