标题:
单片机程序 开关打开时LED灯调至最暗时,怎么判定开关为关呢?
[打印本页]
作者:
adad2
时间:
2022-5-6 15:35
标题:
单片机程序 开关打开时LED灯调至最暗时,怎么判定开关为关呢?
各位大佬,问个问题,51C,当触摸开关打开了,长按开关,灯的亮度调为最暗时候,我怎么短按灯调为最亮呢
单片机源程序如下:
#ifndef _MAIN_C_
#define _MAIN_C_
/*********************************************************************************************************************/
#include "ca51f5_config.h"
#include "includes\ca51f5sfr.h"
#include "includes\ca51f5xsfr.h"
#include "includes\gpiodef_f5.h"
/*********************************************************************************************************************/
#include "TS_Lib\Includes\ts_configuration.h"
#include "TS_Lib\Includes\ts_def.h"
#include "TS_Lib\Includes\ts_api.h"
#include "TS_Lib\Includes\ts_service.h"
/*********************************************************************************************************************/
#include "includes\system.h"
#include "Library\includes\uart.h"
#include "Library\includes\system_clock.h"
#include "Library\Includes\tmc.h"
#include "Library\includes\pwm.h"
#include "Library\includes\delay.h"
#include "function.h"
#include "Library/includes/flash.h"
u16 check_time;
u16 reset_time;
u16 dim_ct;
bit onff_s;
bit CHOOSE;
/*******************************************************************************************************************************************
说明:
------------------------------------------------------------------------------------------------------------
1.ts_configuration.h是触摸的配置文件,可在配置文件中设置触摸通道、灵敏度等。详见ts_configuration.h中的说明。
------------------------------------------------------------------------------------------------------------
2.如果需要使用UART来调试,可在ca51f5_config.h中打开宏定义UART0_EN
------------------------------------------------------------------------------------------------------------
3.触摸库对外的数据接口为KeysFlagSN,用户可根据KeysFlagSN的值来判断触摸键是否按下(如果触摸键按下,KeysFlagSN
的对应位一直为1,触摸键松开,对应位变为0),TS_Key是根据KeysFlagSN的值生成的按键消息,用户如不使用可忽略。
------------------------------------------------------------------------------------------------------------
4.使能了触摸省电模式后,在无按键时,在定义的时间后会进入省电模式,进入省电模式前会关闭TMC中断和触摸中断(注意,总
中断仍是开启的),在触摸省电模式下,CPU会进入STOP模式,在被触摸唤醒后,程序在省电函数(TS_EnterSleepMode)的循环内运行(注意,触摸省电模式程序不
会在主循环内运行),在触摸省电模式下如果还要响应其他中断,用户需在进入触摸省电模式前自行开启其他中断,
如果需要退出省电模式,用户只需要在省电函数循环内加入条件判断,跳出循环即可。
变量TS_SleepEn是控制触摸省电模式的开关,如果希望程序在某些条件下不进入省电模式,只需在此条件下设置TS_SleepEn = 0;
------------------------------------------------------------------------------------------------------------
5.触摸外挂电容(即TK_CAP引脚连接电容)范围:6nF~50nF,建议值:20nF(即203)
------------------------------------------------------------------------------------------------------------
6.触摸引脚串联电阻范围:0~5K,建议值:1K欧姆,如果有抗对讲机等电磁干扰要求, 此电阻至少3K以上。
*******************************************************************************************************************************************/
void main(void)
{
Delay_ms(50);
#ifdef LVD_RST_ENABLE
LVDCON = 0xC3; //设置LVD复位电压为2.0V
#endif
#ifdef UART0_EN
Uart0_Initial(UART0_BAUTRATE);//波特率函数
#endif
PADRD =0x3F;//FLASH和程序存储空间大小
EA = 1;
LoadAllPar();//flash读程序
PWM_init();
pwm(3);
TS_init();
onoff=1;//开关关闭
CHOOSE=1;
mode=1;
while(1)
{
TS_Action();//触摸开关程序
if(!onoff)
{
if(dim<dim_data)
{
dim_ct++ ;
if(dim_ct>1000)
{
dim++;
dim_ct=0;
}
}
pwm(dim);
}
else
{
if(dim>0)
{
dim_ct++ ;
if(dim_ct>500)
{
dim--;
dim_ct=0;
}
}
pwm(dim);
}
#if SUPPORT_WHEEL_SLIDER
if(WheelSliderPosition != -1)
{
//当WheelSliderPosition不等于-1时, 表示滑条或圆环有触摸事件发生。WheelSliderPosition的值表示滑条或圆环的位置。
}
#endif
#if SUPPORT_KEY
/*************************************************************************************************
变量KeysFlagSN是触摸库对外的数据接口,KeysFlagSN的每一位对应一个触摸键的状态,为1表示触摸键触发。可多键同时触发。
*************************************************************************************************/
if(CHOOSE)
{/* long_press是长按的位变量,onff_s是判断开关的位变量,press_f是存储亮度下次按键或者重启的位变量*/
if(long_press&&(!onoff)&&(!onff_s))//进入长按,触发亮度调节子程序onff_s用来判断开关
{
press_f=1;
if(up_flag)//亮度提升
{
if(dim_data<255)
{
dim_ct++ ;
if(dim_ct>1200)
{
dim_data++;
dim=dim_data;
dim_ct=0;
}
}
else
{
dim_data=255;
dim_ct++ ;
if(dim_ct>1200)
{
dim_ct=0;
}
}
}
else//亮度调暗
{
if(dim_data>10)
{
dim_ct++ ;
if(dim_ct>1200)
{
dim_data--;
dim=dim_data;
dim_ct=0;
}
}
else
{
dim_data=10;
dim_ct++ ;
if(dim_ct>1200)
{
dim_ct=0;
}
}
}
}
}
/*短按开关*/
if(KeysFlagSN != 0)//keypress//按键有按下
{ reset_time=0;
check_time=0;
switch(KeysFlagSN)
{
case 0x0001:
press_ct++;//(check_c)触发触摸按键,参数自加
if(press_ct>P_level)//参数大于P_level
{
long_press=1;//进入长按,触发调光
press_ct=P_level;
}
if(onoff) //如果灯是关着
{
onoff=0;//开关打开
long_press=0;//退出长按
press_ct=0;
//dim=0;
onff_s=1;
}
break;
case 0x0002:
break;
case 0x0004:
break;
//......
default:
break;
}
}
else//release
{
check_time++;//
}
if(check_time>220)//=i>600
{
check_time=0;
// lianfa=0;//
reset_time++;
if(press_ct>10&&press_ct<P_level&&long_press==0)////触发短按,进行灯具开灭
{
if(!onff_s)
{
onoff=!onoff;//short press
press_f=1;
}
}
onff_s=0;
if(long_press)//(lpress_ct)//长按进行亮度调节翻转
{
up_flag=!up_flag;
}
long_press=0;
press_ct=0;
if(press_f)//存储亮度变量,松手或者关机,下次从这个变量触发
{
press_f=0;
SaveAllPar();
}
}
/**/
if(reset_time>1000)
{
TS_init();
reset_time=0;
//LG=1;
//LB=1;
//Delay_ms(100);
}
#endif
//#endif
}
}
#endif
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1