久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1572|回復: 0
收起左側

STC8單片機+TL6101觸摸+pcf85176液晶顯示程序

[復制鏈接]
ID:369412 發表于 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) 芯片測試程序
設        計        人:ZQS
版           本 :1.0
說           明 :觸摸測試及顯示
完成時間 :2023.06.20
********************************************************/
sbit KEY = P5^0;                // 按鍵數據輸入口

#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個點

idata s16 LT_OVER_VAL[25] ;

idata s16 LT_NNEW_VAL[25] ;

xdata u8 buf[60];






/******************** 主函數 **************************/
void main(void)
{
        
        u16 i,dd;
        u16 maxIndex,maxVal;
               
        delay(200);

  //SET_KEY_IN;
        RSTCFG=0X50;  //開啟硬件復位
        Init_Uart();
        
        INIT_LT6101();        // 初始化后是從機模式
        delay(200);
         
        LCD_TEST();
        
        Get_LT6101_BaseVal(LT_OLD_VAL);        // 每次上電時讀到5組各通道數據平均值保存在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)                // 連續讀5組各通道數據,保存到LT_New_Val[5][10]內
                {               
                        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 ;        //新的數據替換最早一次采集的數據
                        Get_LT6101_Val(LT_INDEX);
                        LT_INDEX++;               
                        for(i=0;i<TL_CHANNEL_NUM;i++)
                        {
                                //5次數據的平均值
                                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;
                                //跟基準數據的差值        

                                         
                                       
                                  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++)//計算所有按鍵中,差值最大的值
                        {
                                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
                        {  //最大差值的通道,同時就算其左右2邊按鍵的差值,防止干擾導致的數據
                                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++)        // 按鍵序號確認
                        {        
                                
                                if(keyTime[dd])        // 有觸摸則在LCD顯示序號                                
                                {
                        
                                       
               dis_num(17 ,dd+1);                        
                                 delay(100);                                                               
                                }
                                                               
                else                // 無觸摸,清空顯示
                                {               
                                       

                                        delay(100);
                                       
                                       
                                }
                                                                        
                        }

                }
        }

}


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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美久久 | aaa一级片 | 日韩精品大片 | 狠狠干在线视频 | 国产黄a三级三级看三级 | 亚洲综合在线播放 | 亚洲福利片 | 国产日本在线 | 久久久久久九九九九 | 精品久久网 | 久久精品视频一区二区 | 国产午夜精品久久 | 最新中文字幕在线观看 | 日韩在线观看 | 九九热免费视频 | 毛片网站在线观看 | 国产精品成人网 | 日韩三级黄色片 | 成人三级在线观看 | 99午夜| 成人羞羞国产免费 | 欧美精品在线观看 | 精品亚洲一区二区 | 成人综合婷婷国产精品久久 | 欧美成人一级片 | 精品黄色片 | 色涩av| 亚洲黄色网址 | 放几个免费的毛片出来看 | 一区二区三区蜜桃 | 97国产在线观看 | 一区视频在线 | 一本伊人 | 97精品国产97久久久久久免费 | 久久久少妇 | 久久一级视频 | 欧美在线 | 免费的黄色网址 | 欧美伊人久久 | 日韩在线观看中文字幕 | 国产做爰免费观看视频 |