|
LT6101 觸摸面板
51hei圖片_20231020162311.png (760.2 KB, 下載次數(shù): 52)
下載附件
2023-10-20 16:32 上傳
51hei圖片_20231020164828.png (590.11 KB, 下載次數(shù): 44)
下載附件
2023-10-20 16:50 上傳
51hei圖片_20231020164824.png (642.73 KB, 下載次數(shù): 56)
下載附件
2023-10-20 16:50 上傳
#include <STC8.h>
#include <DEFINE.h>
#include <intrins.h>
#include <stdio.h>
#include <delay.h>
#include <uart.h>
#include <PCF85176.h>
#include <LT6101A.h>
//================================================================
/********************************************************
功能描述 :PCF85176 (85176+TP) 芯片測(cè)試程序
設(shè) 計(jì) 人:ZQS
版 本 :1.0
說 明 :觸摸測(cè)試及顯示
完成時(shí)間 :2023.06.20
********************************************************/
sbit KEY = P5^0; // 按鍵數(shù)據(jù)輸入口
#define SET_KEY_IN P5n_pure_input(1<<0) //輸入口
#define RSTFLAG (*(unsigned char volatile xdata *)0xfE99)
#define LIMIT 55
xdata s16 keyTime[24];//= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ;
u8 LT_INDEX,LT_FIVE_OK;
xdata u16 LT_New_VAL[5][25];
xdata s16 LT_OLD_VAL[25] ;//= {0} ; // 觸摸按鍵24個(gè)點(diǎn)
idata s16 LT_OVER_VAL[25] ;
idata s16 LT_NNEW_VAL[25] ;
xdata u8 buf[60];
/******************** 主函數(shù) **************************/
void main(void)
{
u16 i,dd;
u16 maxIndex,maxVal;
delay(200);
//SET_KEY_IN;
RSTCFG=0X50; //開啟硬件復(fù)位
Init_Uart();
INIT_LT6101(); // 初始化后是從機(jī)模式
delay(200);
LCD_TEST();
Get_LT6101_BaseVal(LT_OLD_VAL); // 每次上電時(shí)讀到5組各通道數(shù)據(jù)平均值保存在LT_OLD_VAL[]
sprintf(buf, "run ************ \r\n");
buftx(buf);
LT_INDEX = 0;
LT_FIVE_OK = 0;
for(i=0;i<TL_CHANNEL_NUM;i++) keyTime[ i]=0;
while(1)
{
//RESET();
if(LT_FIVE_OK == 0) // 連續(xù)讀5組各通道數(shù)據(jù),保存到LT_New_Val[5][10]內(nèi)
{
for(i=0;i<5;i++)
{
Get_LT6101_Val(LT_INDEX);
LT_INDEX++;
delay(20);
}
LT_FIVE_OK = 1;
}
else
{
if(LT_INDEX>=5) LT_INDEX = 0 ; //新的數(shù)據(jù)替換最早一次采集的數(shù)據(jù)
Get_LT6101_Val(LT_INDEX);
LT_INDEX++;
for(i=0;i<TL_CHANNEL_NUM;i++)
{
//5次數(shù)據(jù)的平均值
LT_NNEW_VAL[ i]=(LT_New_VAL[0][ i]+LT_New_VAL[1][ i]+LT_New_VAL[2][ i]+LT_New_VAL[3][ i]+LT_New_VAL[4][ i])/5;
//跟基準(zhǔn)數(shù)據(jù)的差值
if (LT_NNEW_VAL[ i] < LT_OLD_VAL[ i])
LT_OVER_VAL[ i] =0;
else LT_OVER_VAL[ i]= (LT_NNEW_VAL[ i] - LT_OLD_VAL[ i]);
keyTime[ i] = 0 ;
}
//
////////////////////////////////////////////////////////////
maxIndex = 0;
maxVal = LT_OVER_VAL[0];
for(i=1;i<TL_CHANNEL_NUM;i++)//計(jì)算所有按鍵中,差值最大的值
{
if(maxVal<LT_OVER_VAL[ i])
{
maxIndex = i;
maxVal = LT_OVER_VAL[ i];
}
}
// sprintf(buf, "1111111111111111 \r\n");
// buftx(buf);
if(maxIndex==0)//差值最大的是第0通道按鍵
{
if(LT_OVER_VAL[0]>(LT_OVER_VAL[1]+LIMIT))
keyTime[0]=1;
else
keyTime[0]=0;
}
else if(maxIndex==(TL_CHANNEL_NUM-1))//差值最大的是最后通道按鍵
{
if(LT_OVER_VAL[TL_CHANNEL_NUM-1]>(LT_OVER_VAL[TL_CHANNEL_NUM-2]+LIMIT))
keyTime[TL_CHANNEL_NUM-1] = 1;
else
keyTime[TL_CHANNEL_NUM-1] = 0;
}
else
{ //最大差值的通道,同時(shí)就算其左右2邊按鍵的差值,防止干擾導(dǎo)致的數(shù)據(jù)
if(LT_OVER_VAL[maxIndex]>((LT_OVER_VAL[maxIndex-1]+LT_OVER_VAL[maxIndex+1])/2+LIMIT))
keyTime[maxIndex] = 1;
else
keyTime[maxIndex] = 0;
}
for(dd=0;dd<TL_CHANNEL_NUM;dd++) // 按鍵序號(hào)確認(rèn)
{
if(keyTime[dd]) // 有觸摸則在LCD顯示序號(hào)
{
dis_num(17 ,dd+1);
delay(100);
}
else // 無觸摸,清空顯示
{
delay(100);
}
}
}
}
}
原理圖: 無
仿真: 無
代碼:
STC8G2K16_LT6106+PCF85176.7z
(1.48 MB, 下載次數(shù): 17)
2023-10-20 17:30 上傳
點(diǎn)擊文件名下載附件
程序包 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|