找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1435|回復(fù): 0
收起左側(cè)

STC8單片機(jī)+TL6101觸摸+pcf85176液晶顯示程序

[復(fù)制鏈接]
ID:369412 發(fā)表于 2023-10-20 16:38 | 顯示全部樓層 |閱讀模式
LT6101 觸摸面板
51hei圖片_20231020162311.png 51hei圖片_20231020164828.png 51hei圖片_20231020164824.png

#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
說(shuō)           明 :觸摸測(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                // 無(wú)觸摸,清空顯示
                                {               
                                       

                                        delay(100);
                                       
                                       
                                }
                                                                        
                        }

                }
        }

}


原理圖: 無(wú)
仿真: 無(wú)
代碼: STC8G2K16_LT6106+PCF85176.7z (1.48 MB, 下載次數(shù): 17)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表