⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 touch sensor.c

📁 基于s3c2410硬件的 U-boot代码
💻 C
字号:
 
#include "main.h"

#define NumSensor  2
 
unsigned char Count,i;
 
bank2 unsigned int	Raw	   ;
bank2 unsigned int	Average[2];		// Can't fit all in one bank. Only 96 bytes per Banks 2|3, (Max 24 bttns)
 
bank3 unsigned int	Trip   [2];		//  "
//volatile 		BButtons Buttons;

volatile		unsigned char	First;					// first variable to 'discard' first N samples
volatile		unsigned char	Index;					// Index of what button is being checked.
extern volatile 		BButtons Buttons;
volatile		signed int		Value;					// current button value
volatile		signed int		Bigval;					// current button bigval
volatile		signed int		Smallavg;				// current button smallavg
 
volatile		unsigned int	j;						// Global incrementer variable.. use with caution to interrupts.
const				unsigned char	Comp1[NumSensor]			= {0x94, 0x95};				// comparator preset values for each button
const				unsigned char	Comp2[NumSensor]			= {0xA0, 0xA1};

void 
CapInit(void) {
TRISA6=0;
TRISA7=0;
Led0=OFF;
Led1=OFF;
	// Load defaults for buttons
	for (Index=0; Index < NumSensor; Index++) {			// Load Default GB/TRP
	 
			// Normal Buttons
			 
			Average[Index] 	= 1325;
		 
		

		}  
        Trip[0]     = 135;
       	Trip[1]		= 160;
        
	First	= 160;					// first pass flag to reach steady state average before enabling detection
    Index=0;

	// All TRIS Registers set up in INIT() Routine
	// Capacitively this requires to set up C2OUT as o/p, and T1CKI=i/p, C12INx- pins used = analog i/p., C2+ pin = analog i/p
		
	VRCON=0X8D;
   //ANS2=1;
  
   RA2=0;   //确定C1,C2的参考电压
 
	TRISA5 = 0;					// C2OUT = output
    TRISC0=1;
	TRISA0 = 1;					// Comparator Cin- input for individual button.
    TRISA2 = 1;
	//TRISC0 = 1;
    //RC0=1;
ANSEL=0X27;
ANSELH=0X00;
CM1CON0 = Comp1[0];				// preset the comparators for first channel (and set appropriate enable bits)
CM2CON0 = Comp2[0];
CM2CON1=0X32;
SRCON=0XF0;

 
T1CON=0X07;
OPTION	= 0x84;					// setup the timer0 prescalerTSCAN = 256 x (4 x TOSC) x PS=4.096ms//04C9//354.6k

	RestartTimers();				// Turn on and start timers

	INTCON	= 0;					// clear the interrupt register
	T0IE	= 1;					// turn on the timer0 interrupt
    GIE=1;
} 
void interrupt isr(void)
{																		
	
	// Timer 0 Interrupt
	if (T0IF == 1 && T0IE == 1) {													// Timer 0 Overflow Occurred, 
	 
		TMR1ON	= 0;																// stop Timer1
	
	 										 
			CapISR();																// Service Routine {resets/restarts tmrs}			
	}


 
	if (T0IF == 1)																	// Catch if timer interrupt during ssp?  Handled at end of ISR.
		RestartTimers();															// (Clears T0IF)

 
 }
// Assume the sensor we designed for has an index 6 and there are 16 buttons.



 
void
CapISR(void)
{
unsigned int Value;
unsigned char AvgIndex;
//T0IE=0;
//LcdSet();
//DispByte(2,1,TMR1H);
//DispByte(2,31,TMR1L);
//do{}while(1);
Value = TMR1L + (unsigned int)(TMR1H << 8);

Raw =Value;
if (Raw <(Average[Index]-Trip[Index])) {
 
switch(Index) {
case 0: Buttons.Btn0 = 1; break;
case 1: Buttons.Btn1 = 1; break;
 
default : break;
    }   
}else if (Raw > (Average[Index]-Trip[Index]+64)){
// Button unpressed
// 1. Clear Button Flag for Sensor # index
// 2. Perform Slow Average
// 1
switch(Index) {
case 0: Buttons.Btn0 = 0; break;
case 1: Buttons.Btn1 = 0; break;
 
default : break;
}
// 2
if (AvgIndex < 2) AvgIndex++;
else AvgIndex = 0;
if (AvgIndex == 2)
Average[Index] = Average[Index] + ((long)Raw -(long)Average[Index])/16;
}
 
 
SetNextSensor();
RestartTimers();
}
void 
SetNextSensor(void) {

	 
 
    if (Index < 2)
     Index++;
    else
     Index = 0;
	//Configure comparators for the new sensor
	if (Index == 0) {
		CM1CON0 = Comp1[0];							// Power button, Index 0 is on CIN0-
		CM2CON0 = Comp2[0];
	} else {
		CM1CON0 = Comp1[1];							// All others (MUXes), are on CIN1-
		CM2CON0 = Comp2[1];
	}

}
void 
RestartTimers(void) {

	TMR1L	= 0;								// reset Timer1
	TMR1H	= 0;								//   "     "
	TMR1ON	= 1;								// restart Timer1
	TMR0	= 0;								// reset Timer0
	T0IF	= 0;								// clear the interrupt
}
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -