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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1492|回復: 0
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
LT6101 觸摸面板


#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 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国内久久 | 亚洲第一天堂无码专区 | 成人免费在线视频 | 99精品欧美一区二区蜜桃免费 | 久久91 | 国产高清在线视频 | www.夜夜骑| 中文在线a在线 | 99久久婷婷国产综合精品 | 毛片免费视频 | 色爽女| 高清久久久 | 欧美日韩国产一区二区三区 | 中文av字幕| 欧美八区 | www.天天操 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 一区二区三区四区日韩 | 日本精品国产 | 玖玖国产 | 亚洲一区久久 | 国产h视频| 91精品国产一区二区三区 | 亚洲www啪成人一区二区麻豆 | 久久久九九 | 91佛爷在线观看 | 午夜天堂精品久久久久 | 亚洲啊v在线 | japanhd美女动| 国产精品a一区二区三区网址 | 国产日韩免费视频 | 午夜日韩 | 国产精品九九九 | 久久福利| 国产亚洲精品久久yy50 | 紧缚调教一区二区三区视频 | 久国产视频| 波多野结衣中文字幕一区二区三区 | 国产在线一区二 | 蜜桃五月天 | av福利网 |