找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1334|回复: 0
收起左侧

单片机程序 开关打开时LED灯调至最暗时,怎么判定开关为关呢?

[复制链接]
ID:941265 发表于 2022-5-6 15:35 | 显示全部楼层 |阅读模式
各位大佬,问个问题,51C,当触摸开关打开了,长按开关,灯的亮度调为最暗时候,我怎么短按灯调为最亮呢
单片机源程序如下:
  1. #ifndef _MAIN_C_
  2. #define _MAIN_C_
  3. /*********************************************************************************************************************/
  4. #include "ca51f5_config.h"
  5. #include "includes\ca51f5sfr.h"
  6. #include "includes\ca51f5xsfr.h"
  7. #include "includes\gpiodef_f5.h"
  8. /*********************************************************************************************************************/
  9. #include "TS_Lib\Includes\ts_configuration.h"
  10. #include "TS_Lib\Includes\ts_def.h"
  11. #include "TS_Lib\Includes\ts_api.h"
  12. #include "TS_Lib\Includes\ts_service.h"
  13. /*********************************************************************************************************************/
  14. #include "includes\system.h"
  15. #include "Library\includes\uart.h"
  16. #include "Library\includes\system_clock.h"
  17. #include "Library\Includes\tmc.h"       
  18. #include "Library\includes\pwm.h"
  19. #include "Library\includes\delay.h"
  20. #include "function.h"
  21. #include "Library/includes/flash.h"
  22. u16 check_time;
  23. u16 reset_time;
  24. u16 dim_ct;
  25. bit onff_s;
  26. bit CHOOSE;
  27. /*******************************************************************************************************************************************
  28. 说明:
  29. ------------------------------------------------------------------------------------------------------------
  30. 1.ts_configuration.h是触摸的配置文件,可在配置文件中设置触摸通道、灵敏度等。详见ts_configuration.h中的说明。
  31. ------------------------------------------------------------------------------------------------------------
  32. 2.如果需要使用UART来调试,可在ca51f5_config.h中打开宏定义UART0_EN
  33. ------------------------------------------------------------------------------------------------------------
  34. 3.触摸库对外的数据接口为KeysFlagSN,用户可根据KeysFlagSN的值来判断触摸键是否按下(如果触摸键按下,KeysFlagSN
  35. 的对应位一直为1,触摸键松开,对应位变为0),TS_Key是根据KeysFlagSN的值生成的按键消息,用户如不使用可忽略。
  36. ------------------------------------------------------------------------------------------------------------
  37. 4.使能了触摸省电模式后,在无按键时,在定义的时间后会进入省电模式,进入省电模式前会关闭TMC中断和触摸中断(注意,总
  38. 中断仍是开启的),在触摸省电模式下,CPU会进入STOP模式,在被触摸唤醒后,程序在省电函数(TS_EnterSleepMode)的循环内运行(注意,触摸省电模式程序不
  39. 会在主循环内运行),在触摸省电模式下如果还要响应其他中断,用户需在进入触摸省电模式前自行开启其他中断,
  40. 如果需要退出省电模式,用户只需要在省电函数循环内加入条件判断,跳出循环即可。
  41. 变量TS_SleepEn是控制触摸省电模式的开关,如果希望程序在某些条件下不进入省电模式,只需在此条件下设置TS_SleepEn = 0;
  42. ------------------------------------------------------------------------------------------------------------
  43. 5.触摸外挂电容(即TK_CAP引脚连接电容)范围:6nF~50nF,建议值:20nF(即203)
  44. ------------------------------------------------------------------------------------------------------------
  45. 6.触摸引脚串联电阻范围:0~5K,建议值:1K欧姆,如果有抗对讲机等电磁干扰要求, 此电阻至少3K以上。
  46. *******************************************************************************************************************************************/
  47. void main(void)
  48. {
  49.         Delay_ms(50);
  50. #ifdef LVD_RST_ENABLE
  51.         LVDCON = 0xC3;        //设置LVD复位电压为2.0V
  52. #endif
  53.        
  54. #ifdef UART0_EN
  55.         Uart0_Initial(UART0_BAUTRATE);//波特率函数
  56. #endif
  57.   PADRD =0x3F;//FLASH和程序存储空间大小
  58.         EA = 1;
  59.   LoadAllPar();//flash读程序
  60.         PWM_init();
  61.   pwm(3);
  62.         TS_init();       
  63.   onoff=1;//开关关闭
  64.         CHOOSE=1;
  65.         mode=1;
  66.         while(1)
  67.         {                                               
  68.                 TS_Action();//触摸开关程序
  69.                 if(!onoff)
  70.                 {
  71.                 if(dim<dim_data)
  72.                                 {
  73.            dim_ct++        ;
  74.            if(dim_ct>1000)       
  75.                                          {                                                 
  76.                                           dim++;
  77.                                                  dim_ct=0;
  78.                                          }
  79.                                 }
  80.                         pwm(dim);
  81.                         }
  82.                         else
  83.                         {
  84.                                 if(dim>0)
  85.                                         {
  86.            dim_ct++        ;
  87.            if(dim_ct>500)       
  88.                                          {                                                 
  89.                                           dim--;
  90.                                                  dim_ct=0;
  91.                                          }
  92.                                   }
  93.                                 pwm(dim);
  94.                         }
  95. #if SUPPORT_WHEEL_SLIDER
  96.                 if(WheelSliderPosition != -1)
  97.                 {
  98.                         //当WheelSliderPosition不等于-1时, 表示滑条或圆环有触摸事件发生。WheelSliderPosition的值表示滑条或圆环的位置。
  99.                 }
  100. #endif
  101. #if SUPPORT_KEY
  102. /*************************************************************************************************
  103. 变量KeysFlagSN是触摸库对外的数据接口,KeysFlagSN的每一位对应一个触摸键的状态,为1表示触摸键触发。可多键同时触发。
  104. *************************************************************************************************/
  105.         if(CHOOSE)
  106.                 {/* long_press是长按的位变量,onff_s是判断开关的位变量,press_f是存储亮度下次按键或者重启的位变量*/
  107.    if(long_press&&(!onoff)&&(!onff_s))//进入长按,触发亮度调节子程序onff_s用来判断开关
  108.                          {
  109.                                  press_f=1;
  110.                                 if(up_flag)//亮度提升
  111.                                  {
  112.                                          if(dim_data<255)
  113.                                           {
  114.                                                          dim_ct++        ;
  115.                                                          if(dim_ct>1200)       
  116.                                                          {                                                                                       
  117.                                                                 dim_data++;
  118.                                                                  dim=dim_data;
  119.                                                                  dim_ct=0;
  120.                                                          }
  121.                                           }
  122.                                            else
  123.                                            {
  124.                                                            dim_data=255;
  125.                                                            dim_ct++        ;
  126.                                                          if(dim_ct>1200)       
  127.                                                           {
  128.                                                                  dim_ct=0;
  129.                                                           }                                                         
  130.                                                  }                                                 
  131.                                  }
  132.                                  else//亮度调暗
  133.                                  {
  134.                                          if(dim_data>10)
  135.                                           {
  136.                                                                 dim_ct++        ;
  137.                                                          if(dim_ct>1200)       
  138.                                                          {                                                         
  139.                                                                  dim_data--;
  140.                                                                  dim=dim_data;
  141.                                                                  dim_ct=0;
  142.                                                          }
  143.                                           }                                                 
  144.                                            else
  145.                                            {
  146.                                                          dim_data=10;
  147.                                                          dim_ct++        ;
  148.                                                          if(dim_ct>1200)       
  149.                                                           {                                                 
  150.                                                                  dim_ct=0;
  151.                                                           }
  152.                                                  }
  153.                                  }
  154.                          }
  155.                  }
  156. /*短按开关*/
  157.                 if(KeysFlagSN != 0)//keypress//按键有按下
  158.                 { reset_time=0;
  159.                         check_time=0;
  160.                         switch(KeysFlagSN)
  161.                         {
  162.                                 case 0x0001:                                                   
  163.                                                    press_ct++;//(check_c)触发触摸按键,参数自加
  164.                                            if(press_ct>P_level)//参数大于P_level
  165.                                                                            {
  166.                                                                                          long_press=1;//进入长按,触发调光
  167.                                                                                          press_ct=P_level;
  168.                                                                            }
  169.                                                                                  if(onoff) //如果灯是关着
  170.                                                                                   {
  171.                                                                                          onoff=0;//开关打开
  172.                                                                                          long_press=0;//退出长按
  173.                                                                                          press_ct=0;
  174.                                                                                         //dim=0;
  175.                                                                                                 onff_s=1;
  176.                                                                                   }
  177.                                         break;
  178.                                 case 0x0002:
  179.                                         break;
  180.                                 case 0x0004:
  181.                                         break;
  182.                                 //......
  183.                                 default:
  184.                                         break;
  185.                         }
  186.                 }
  187.                 else//release
  188.                 {
  189.                         check_time++;//
  190.                 }
  191.                 if(check_time>220)//=i>600
  192.                 {
  193.                         check_time=0;
  194. //                        lianfa=0;//
  195.                         reset_time++;                       
  196.                         if(press_ct>10&&press_ct<P_level&&long_press==0)////触发短按,进行灯具开灭
  197.                    {
  198.                                 if(!onff_s)
  199.                                 {
  200.                           onoff=!onoff;//short press
  201.                                  press_f=1;
  202.                                 }                               
  203.                    }
  204.                          onff_s=0;
  205.                          if(long_press)//(lpress_ct)//长按进行亮度调节翻转
  206.                          {
  207.                                  up_flag=!up_flag;
  208.                          }                         
  209.                    long_press=0;
  210.                          press_ct=0;
  211.                          if(press_f)//存储亮度变量,松手或者关机,下次从这个变量触发
  212.                          {
  213.                                  press_f=0;
  214.                           SaveAllPar();
  215.                          }
  216.                 }
  217.                 /**/
  218.                 if(reset_time>1000)
  219.                   {
  220.       TS_init();
  221.                         reset_time=0;
  222.                                 //LG=1;
  223.                                 //LB=1;
  224.                                 //Delay_ms(100);
  225.                   }
  226. #endif
  227.                 //#endif
  228.         }
  229. }
  230. #endif
复制代码
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表