7563|2

521

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【新版CH554评测-DIY】3.触摸按键实现LED灯开关、调光控制 [复制链接]

本帖最后由 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灯的开关控制效果



程序界面


代码部分

  1. /********************************** (C) COPYRIGHT *******************************
  2. * File Name          : Main.C
  3. * Author             : WCH
  4. * Version            : V1.0
  5. * Date               : 2017/01/20
  6. * Description        : CH554 PWM初始化,占空比设置,PWM默认电平设置
  7.                        支持中断方式修改PWM占空比
  8. *******************************************************************************/

  9. #include "..\Public\CH554.H"                                                   
  10. #include "..\Public\Debug.H"
  11. #include "TouchKey.H"
  12. #include "PWM.H"
  13. #include "stdio.h"
  14. #include "GPIO.H"
  15. #pragma  NOAREGS

  16. //sbit LED0 = P1^6;
  17. //sbit LED1 = P1^7;

  18. void init_PWM(void);
  19. //void init_GPIO(void);
  20. void init_TK(void);
  21. void get_TK(void);
  22. void check_PWM(void);
  23. UINT8 x;
  24. bit led;
  25. main( )
  26. {
  27.    
  28.         
  29.         CfgFsys( );                                                                //CH554时钟选择配置   
  30.     mDelaymS(5);                                                               //配置时钟后,建议延时稳定时钟
  31.     mInitSTDIO( );
  32.         init_PWM();
  33. //        init_GPIO();
  34.         init_TK();                                                            //串口0初始化
  35.     printf("start ...\n");

  36.     while(1)
  37.         {
  38.                 get_TK();
  39.                 mDelaymS(100);
  40.         //        check_PWM();
  41.     }
  42. }

  43. void init_PWM(void)
  44. {
  45.            PWM1PINAlter( );

  46.     P3_MOD_OC &= ~(bPWM1_| bPWM2_);                                             //设置PWM引脚为推挽输出
  47.     P3_DIR_PU |= bPWM1_ | bPWM2_;                        
  48.    
  49.     SetPWMClk(4);                                                              //PWM时钟配置        ,4分频
  50.     ForceClearPWMFIFO( );                                                      //强制清除PWM FIFO和COUNT
  51.     CancleClearPWMFIFO( );                                                     //取消清除PWM FIFO和COUNT
  52.     PWM1OutEnable( );                                                          //允许PWM1输出                           
  53.     PWM2OutEnable( );                                                          //允许PWM2输出         

  54.     PWM1OutPolarHighAct( );                                                    //PWM1输出默认低,高有效                                                   
  55.     PWM2OutPolarLowAct( );                                                     //PWM2输出默认高,低有效
  56.         SetPWM1Dat(0x00);                                                          //占空比0x10/256                                                         
  57.     SetPWM2Dat(0xf0);        

  58. }

  59. /*
  60. void init_GPIO( void )
  61. {
  62.     Port1Cfg(1,6);                                                             //P16设置推挽模式
  63.     Port1Cfg(1,7);                                                             //P17设置推挽模式
  64.     LED0 = 0;
  65.     LED1 = 0;        

  66.    // GPIOInterruptCfg();                                                        //GPIO中断配置函数        
  67.   //  EA = 1;
  68. }
  69.   */
  70. void init_TK(void)
  71. {
  72.     TK_Init( BIT4+BIT5+BIT6+BIT7,  1, 1 );                /* Choose TIN2, TIN3, TIN4, TIN5 for touchkey input. enable interrupt. */
  73.         TK_SelectChannel(0);                                                                                        /* NOTICE: ch is not compatible with the IO actually. */
  74.         EA = 1;        

  75. }
  76. void get_TK(void)
  77. {
  78.                   if( Touch_IN != 0 )
  79.                 {
  80.                         if( Touch_IN & CH2 )
  81.                         {
  82.                                 printf("CH2 is pressed.\n");
  83.                                 printf("LED ON.\n");
  84.                         //        LED0=1 ;
  85.                         //        LED1=1 ;
  86.                            led=0;
  87.                            x=0;
  88.                            SetPWM1Dat(x);
  89.                         }
  90.                         if( Touch_IN & CH3 )
  91.                         {
  92.                                 printf("CH3 is pressed.\n");
  93.                                 printf("LED OFF.\n");
  94.                         //        LED0=0 ;
  95.                         //        LED1=0 ;
  96.                             led=1;
  97.                             x=0x2f;
  98.                            SetPWM1Dat(x);
  99.                         }
  100.                         if( Touch_IN & CH4 )
  101.                         {
  102.                                 printf("CH3 is pressed.\n");
  103.                                 printf("LED OFF.\n");
  104.                         //        LED0=0 ;
  105.                         //        LED1=0 ;
  106.                             if(x<255&led==1)
  107.                                 {
  108.                              x=x+3;
  109.                              SetPWM1Dat(x);
  110.                             }
  111.                         }
  112.                         if( Touch_IN & CH5 )
  113.                         {
  114.                                 printf("CH3 is pressed.\n");
  115.                                 printf("LED OFF.\n");
  116.                         //        LED0=0 ;
  117.                         //        LED1=0 ;
  118.                             if(x>1&led==1)
  119.                             {
  120.                                  x=x-3;
  121.                              SetPWM1Dat(x);
  122.                             }
  123.                         }
  124.         
  125.                         Touch_IN = 0;
  126.                 }

  127. }


  128. void check_PWM(void)
  129. {
  130.         UINT8 x=0x00;
  131.         if(PWM_CTRL&bPWM_IF_END)
  132.           {
  133.         PWM_CTRL |= bPWM_IF_END;                                               //清除PWM中断                                
  134.         
  135.          for(x=0;x<255;x++)
  136.                 {
  137.                 SetPWM1Dat(x);
  138.                 mDelaymS(10);
  139.                 }
  140.                  for(x=255;x>0;x--)
  141.                 {
  142.                 SetPWM1Dat(x);
  143.                 mDelaymS(10);
  144.                 }
  145.                
  146. /*                        
  147. #ifdef DE_PRINTF
  148.     printf("PWM_CYC_END  %02X\n",(UINT16)PWM_CTRL);
  149. #endif           */
  150.               
  151.       }         





  152. }
复制代码



附调光视频http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1




小结:触摸按键实现LED灯调光,后续将对USB功能进行测试,同时加入外围LCD、传感器等,实现DIY。


此内容由EEWORLD论坛网友zhang7309原创,如需转载或用于商业用途需征得作者同意并注明出处




此帖出自单片机论坛

最新回复

  详情 回复 发表于 2018-5-2 18:04
点赞 关注
 

回复
举报

525

帖子

235

TA的资源

版主

沙发
 
此帖出自单片机论坛
 
个人签名爱电子,爱生活
 

回复

305

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
此帖出自单片机论坛
 
个人签名单价1元含税的USB和Touchkey单片机CH551G已大批量出货,试样QQ:1258305301
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表