標(biāo)題:
單片機(jī)程序 開(kāi)關(guān)打開(kāi)時(shí)LED燈調(diào)至最暗時(shí),怎么判定開(kāi)關(guān)為關(guān)呢?
[打印本頁(yè)]
作者:
adad2
時(shí)間:
2022-5-6 15:35
標(biāo)題:
單片機(jī)程序 開(kāi)關(guān)打開(kāi)時(shí)LED燈調(diào)至最暗時(shí),怎么判定開(kāi)關(guān)為關(guān)呢?
各位大佬,問(wèn)個(gè)問(wèn)題,51C,當(dāng)觸摸開(kāi)關(guān)打開(kāi)了,長(zhǎng)按開(kāi)關(guān),燈的亮度調(diào)為最暗時(shí)候,我怎么短按燈調(diào)為最亮呢
單片機(jī)源程序如下:
#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;
/*******************************************************************************************************************************************
說(shuō)明:
------------------------------------------------------------------------------------------------------------
1.ts_configuration.h是觸摸的配置文件,可在配置文件中設(shè)置觸摸通道、靈敏度等。詳見(jiàn)ts_configuration.h中的說(shuō)明。
------------------------------------------------------------------------------------------------------------
2.如果需要使用UART來(lái)調(diào)試,可在ca51f5_config.h中打開(kāi)宏定義UART0_EN
------------------------------------------------------------------------------------------------------------
3.觸摸庫(kù)對(duì)外的數(shù)據(jù)接口為KeysFlagSN,用戶(hù)可根據(jù)KeysFlagSN的值來(lái)判斷觸摸鍵是否按下(如果觸摸鍵按下,KeysFlagSN
的對(duì)應(yīng)位一直為1,觸摸鍵松開(kāi),對(duì)應(yīng)位變?yōu)?),TS_Key是根據(jù)KeysFlagSN的值生成的按鍵消息,用戶(hù)如不使用可忽略。
------------------------------------------------------------------------------------------------------------
4.使能了觸摸省電模式后,在無(wú)按鍵時(shí),在定義的時(shí)間后會(huì)進(jìn)入省電模式,進(jìn)入省電模式前會(huì)關(guān)閉TMC中斷和觸摸中斷(注意,總
中斷仍是開(kāi)啟的),在觸摸省電模式下,CPU會(huì)進(jìn)入STOP模式,在被觸摸喚醒后,程序在省電函數(shù)(TS_EnterSleepMode)的循環(huán)內(nèi)運(yùn)行(注意,觸摸省電模式程序不
會(huì)在主循環(huán)內(nèi)運(yùn)行),在觸摸省電模式下如果還要響應(yīng)其他中斷,用戶(hù)需在進(jìn)入觸摸省電模式前自行開(kāi)啟其他中斷,
如果需要退出省電模式,用戶(hù)只需要在省電函數(shù)循環(huán)內(nèi)加入條件判斷,跳出循環(huán)即可。
變量TS_SleepEn是控制觸摸省電模式的開(kāi)關(guān),如果希望程序在某些條件下不進(jìn)入省電模式,只需在此條件下設(shè)置TS_SleepEn = 0;
------------------------------------------------------------------------------------------------------------
5.觸摸外掛電容(即TK_CAP引腳連接電容)范圍:6nF~50nF,建議值:20nF(即203)
------------------------------------------------------------------------------------------------------------
6.觸摸引腳串聯(lián)電阻范圍:0~5K,建議值:1K歐姆,如果有抗對(duì)講機(jī)等電磁干擾要求, 此電阻至少3K以上。
*******************************************************************************************************************************************/
void main(void)
{
Delay_ms(50);
#ifdef LVD_RST_ENABLE
LVDCON = 0xC3; //設(shè)置LVD復(fù)位電壓為2.0V
#endif
#ifdef UART0_EN
Uart0_Initial(UART0_BAUTRATE);//波特率函數(shù)
#endif
PADRD =0x3F;//FLASH和程序存儲(chǔ)空間大小
EA = 1;
LoadAllPar();//flash讀程序
PWM_init();
pwm(3);
TS_init();
onoff=1;//開(kāi)關(guān)關(guān)閉
CHOOSE=1;
mode=1;
while(1)
{
TS_Action();//觸摸開(kāi)關(guān)程序
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)
{
//當(dāng)WheelSliderPosition不等于-1時(shí), 表示滑條或圓環(huán)有觸摸事件發(fā)生。WheelSliderPosition的值表示滑條或圓環(huán)的位置。
}
#endif
#if SUPPORT_KEY
/*************************************************************************************************
變量KeysFlagSN是觸摸庫(kù)對(duì)外的數(shù)據(jù)接口,KeysFlagSN的每一位對(duì)應(yīng)一個(gè)觸摸鍵的狀態(tài),為1表示觸摸鍵觸發(fā)?啥噫I同時(shí)觸發(fā)。
*************************************************************************************************/
if(CHOOSE)
{/* long_press是長(zhǎng)按的位變量,onff_s是判斷開(kāi)關(guān)的位變量,press_f是存儲(chǔ)亮度下次按鍵或者重啟的位變量*/
if(long_press&&(!onoff)&&(!onff_s))//進(jìn)入長(zhǎng)按,觸發(fā)亮度調(diào)節(jié)子程序onff_s用來(lái)判斷開(kāi)關(guān)
{
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//亮度調(diào)暗
{
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;
}
}
}
}
}
/*短按開(kāi)關(guān)*/
if(KeysFlagSN != 0)//keypress//按鍵有按下
{ reset_time=0;
check_time=0;
switch(KeysFlagSN)
{
case 0x0001:
press_ct++;//(check_c)觸發(fā)觸摸按鍵,參數(shù)自加
if(press_ct>P_level)//參數(shù)大于P_level
{
long_press=1;//進(jìn)入長(zhǎng)按,觸發(fā)調(diào)光
press_ct=P_level;
}
if(onoff) //如果燈是關(guān)著
{
onoff=0;//開(kāi)關(guān)打開(kāi)
long_press=0;//退出長(zhǎng)按
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)////觸發(fā)短按,進(jìn)行燈具開(kāi)滅
{
if(!onff_s)
{
onoff=!onoff;//short press
press_f=1;
}
}
onff_s=0;
if(long_press)//(lpress_ct)//長(zhǎng)按進(jìn)行亮度調(diào)節(jié)翻轉(zhuǎn)
{
up_flag=!up_flag;
}
long_press=0;
press_ct=0;
if(press_f)//存儲(chǔ)亮度變量,松手或者關(guān)機(jī),下次從這個(gè)變量觸發(fā)
{
press_f=0;
SaveAllPar();
}
}
/**/
if(reset_time>1000)
{
TS_init();
reset_time=0;
//LG=1;
//LB=1;
//Delay_ms(100);
}
#endif
//#endif
}
}
#endif
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1