Hello,

Well after changing some pause timing and sharing it before and after the indicator LED routine, It seems to be working pretty good now. However, I still need to be able to use the 1/0 button as a single shot
button where pressing once shuts it down, as you have it, and pressing it again turns it back on with full pwm and level 5 selected, without the 1/0 button looping. You mentioned a finite machine, but I'm not sure as to how that
applies. Also, is there a quick way that I can change the pwm frequency to 1Khz, instead of 256? Thanks.
Code:
'****************************************************************'*  Name    : CAPSENSE.BAS                                      *
'*  Author  : RICHARD                                           *
'*  Notice  : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 10/20/2011                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :     16LF722A                                      *
'*                                                              *
'****************************************************************


'#DEFINE DBUG 1 
#CONFIG
 __config _CONFIG1, _INTRC_OSC_NOCLKOUT & _WDTE_OFF & _BOR_OFF & _PLLEN_ON
#ENDCONFIG


define OSC 4
include "dt_ints-14.bas"
include "REENTERPBP.bas"
' variables used by interrupt handler, comment out as per assembler
wsave VAR BYTE $20 SYSTEM ' location for W if in bank0
'wsave VAR BYTE $70 SYSTEM ' alternate save location for W 
' if using $70, comment wsave1-3
' --- IF any of these three lines cause an error ?? ------------------------
' Comment them out to fix the problem ----
' -- Which variables are needed, depends on the Chip you are using -- 
wsave1 VAR BYTE $A0 SYSTEM ' location for W if in bank1
'wsave2 VAR BYTE $120 SYSTEM ' location for W if in bank2
'wsave3 VAR BYTE $1A0 SYSTEM ' location for W if in bank3
asm
INT_LIST macro
     INT_HANDLER T1GATE_INT, _TB1, PBP,YES
     endm
     INT_CREATE
ENDASM


    THRESH CON 16000 'needs to be established


    FLG VAR BYTE 'GOT A KEY 
    KP VAR BYTE 'WHICH KEY pressed
    key_inx var byte ;key index
    PW VAR WORD ;PULSEWIDTH
    p_level var byte


DEFINE DEBUG_REG PORTB
DEFINE DEBUG_BIT 7 ;pgd
DEFINE DEBUG_BAUD 9600
DEFINE DEBUG_MODE 0 




    OSCCON = 010000 '4 mhz
    CPSCON0 = 001100 'high range
    CPSCON1 = 0 'cps ch 0




    ANSELB = 000111 'SETS INPUTS B0-B2 AS ANALOG
    TRISB = 111111 'SETS INPUTS B0-B5 AS INPUTS b7 output
    WPUB = 000000 'DISABLES WEAK PULL-UP BITS
    TRISC = 111011 'ccp1 output portc.2


    OPTION_REG=$86 'edge int. prescale 1:128
    PIE1.7=1 'timer1 gate interrupt
    T1GCON=$f9 'single shot timer0 overflow as input
    T1CON=000101 'capsense as input no prescale no sync
    INTCON= $C0 'peripheral interrupts
    PW=1023
    p_level=5
    t2con=7 
    LED1 VAR PORTA.1 ' SET LED LEVEL INDICATORS
    LED2 VAR PORTA.2
    LED3 VAR PORTA.3  
    LED4 VAR PORTA.4
    LED5 VAR PORTA.5


    LED VAR portc.2
    'up                  down               off
    'key0=portb.0=ch0, key1=portb.1=ch1, key2=portb.2=ch2






#IFDEF DBUG 


    portb.7=1
    LED=1 
    pause 2000
    Debug "Start",13 ,10
    LED=0
    pause 500 
#ENDIF 
    ccp1con=12
    CCPR1L=255 'SET TO MAX BRIGHTNESS
    FLG=0 
    key_inx=0






MAIN:
    IF FLG=1 THEN 
    IF KP = 0 THEN '1/0 BUTTON PRESSED
    ccp1con=0 ;kill it
    led=0
    p_level=0
    ELSEif KP = 1 THEN 'UP BUTTON PRESSED
    p_level= (p_level+1) min 5 
    'PW= (PW+256) MIN 1023 
    else 'DOWN BUTTON PRESSED
    p_level= p_level-1
    'PW = PW-256 
    IF p_level.7 THEN p_level=0 
    'IF PW.15 THEN PW=0 
    endif
 
 
    lookup2 p_level, [0,12,48,218,586,1023],pw  'gamma 1.35,5 levels plus OFF
    CCPR1L = PW>>2;
    ccp1con=12|((PW&3)<<4);
#IFDEF DBUG 
debug "KEY ",#KP,13,10 
debug #PW,13,10 
#ENDIF
    
    
    
    
    PAUSE 50
    FLG=0 'clr key pressed flag
    ENDIF
 
    'SET DISPLAY LEDS ACCORDING TO THE BRIGHTNESS LEVEL
    IF p_level= 5 THEN
    HIGH LED5
    ENDIF
    IF p_level=4 THEN
    HIGH LED4
    ENDIF
    IF p_level=3 THEN
    HIGH LED3
    ENDIF
    IF p_level=2 THEN
    HIGH LED2
    ENDIF
    if p_level=1 THEN 
    high LED1
    endif
    if p_level=0 then
    porta = 0
    ENDIF
        
    PAUSE 250
    
    GOTO MAIN 




TB1: 
#IFDEF DBUG 
debug #TMR1,13,10
#ENDIF
    IF TMR1 < THRESH THEN ' KEY DETECTED 
    if !flg then
    KP=key_inx 
    FLG=1 'set key pressed flag
    endif
    ENDIF
    key_inx=key_inx+1 ;check next key
    if key_inx > 2 then key_inx=0 
    CPSCON1 = key_inx
    TMR1=0
    T1GCON.3= 1 ;single shot reset




@ INT_RETURN