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

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

QQ登錄

只需一步,快速開始

搜索
查看: 7732|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

電容屏(控制IC:GT9147)單片機(jī)驅(qū)動(dòng)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:90014 發(fā)表于 2015-9-14 18:47 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
以前用過(guò)電阻屏... 這電阻屏說(shuō)多了都是淚. 現(xiàn)在用上電容屏了.
/* I2C 總線發(fā)送接收有關(guān)函數(shù)聲明 */
void I2C_SendByte(uint8_t Byte );
uint8_t I2C_ReceiveByte( void );
uint8_t I2C_WaitAck( void );
void I2C_SendAck( void );
void I2C_SendNoAck( void );

/* GT9147 驅(qū)動(dòng) */
/* 參數(shù)1 16位寄存器地址,參數(shù)2:第一個(gè)數(shù)據(jù)地址,參數(shù)3:數(shù)據(jù)長(zhǎng)度 */
uint8_t GT9147_WriteBuff(uint16_t Reg,uint8_t *pData,uint8_t Length) //返回值
0: 寫成功  1:失敗
{
I2C_Start();
I2C_SendByte(GT_CMD_WR);// 寫地址 0x28  讀 0x29
if(I2C_WaitAck())
return 1;
I2C_SendByte(Reg>>8);
if(I2C_WaitAck())
return 2;
I2C_SendByte(Reg&0xff);
if(I2C_WaitAck())
return 3;
while(Length--)
{
I2C_SendByte(*pData++);
if(I2C_WaitAck())
return 4;
}
I2C_Stop();
return 0;
}
/* 從第一個(gè)地址為Reg 的地址上接收Length 個(gè)數(shù)據(jù) 放在pData 上   0:成功   1失敗 */
uint8_t GT9147_ReadBuff(uint16_t Reg,uint8_t *pData,uint8_t Length)
{
I2C_Start();
I2C_SendByte(GT_CMD_WR);
if(I2C_WaitAck())
return 1;
I2C_SendByte(Reg>>8);
if(I2C_WaitAck())
return 2;
I2C_SendByte(Reg&0xff);
if(I2C_WaitAck())
return 3;
I2C_Start();
I2C_SendByte(GT_CMD_RD);
if(I2C_WaitAck())
return 4;
while(Length--)
{
*pData=I2C_ReceiveByte();
pData++;
if(Length)
I2C_SendAck();
else
I2C_SendNoAck();
}
I2C_Stop();
return 0;
}

/* 寄存器設(shè)置表 */
const u8 GT9147_CFG_TBL[]={
0X60,0XE0,0X01,0X20,0X03,0X05,0X35,0X00,0X02,0X08,
0X1E,0X08,0X50,0X3C,0X0F,0X05,0X00,0X00,0XFF,0X67,
0X50,0X00,0X00,0X18,0X1A,0X1E,0X14,0X89,0X28,0X0A,
0X30,0X2E,0XBB,0X0A,0X03,0X00,0X00,0X02,0X33,0X1D,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X32,0X00,0X00,
0X2A,0X1C,0X5A,0X94,0XC5,0X02,0X07,0X00,0X00,0X00,
0XB5,0X1F,0X00,0X90,0X28,0X00,0X77,0X32,0X00,0X62,
0X3F,0X00,0X52,0X50,0X00,0X52,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,
0X0F,0X03,0X06,0X10,0X42,0XF8,0X0F,0X14,0X00,0X00,
0X00,0X00,0X1A,0X18,0X16,0X14,0X12,0X10,0X0E,0X0C,
0X0A,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X29,0X28,0X24,0X22,0X20,0X1F,0X1E,0X1D,
0X0E,0X0C,0X0A,0X08,0X06,0X05,0X04,0X02,0X00,0XFF,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,

};  


uint8_t GT9147_SendCFG(uint8_t Mode)  // 設(shè)置寄存器
{
uint8_t Buff[2];
uint8_t Byte=0;
Buff[0]=0;
Buff[1]=Mode;

for(Byte=0;Byte<sizeof(GT9147_CFG_TBL);Byte++)
Buff[0]+=GT9147_CFG_TBL[Byte];//計(jì)算校驗(yàn)和

    Buff[0]=(~Buff[0])+1;

GT9147_WriteBuff(GT_CFGS_REG,(u8*)GT9147_CFG_TBL,sizeof(GT9147_CFG_TBL));//發(fā)送寄存器配置

GT9147_WriteBuff(GT_CHECK_REG,Buff,2);//寫入校驗(yàn)和,和配置更新標(biāo)記

return 0;
}

#define GT_CTRL_REG 0X8040   //GT9147控制寄存器
#define GT_CFGS_REG 0X8047   //GT9147配置起始地址寄存器
#define GT_CHECK_REG 0X80FF   //GT9147校驗(yàn)和寄存器
#define GT_PID_REG 0X8140   //GT9147產(chǎn)品ID寄存器

#define GT_GSTID_REG 0X814E   //GT9147當(dāng)前檢測(cè)到的觸摸情況
#define GT_TP1_REG      0X8150  //第一個(gè)觸摸點(diǎn)數(shù)據(jù)地址
#define GT_TP2_REG 0X8158//第二個(gè)觸摸點(diǎn)數(shù)據(jù)地址
#define GT_TP3_REG 0X8160//第三個(gè)觸摸點(diǎn)數(shù)據(jù)地址
#define GT_TP4_REG 0X8168//第四個(gè)觸摸點(diǎn)數(shù)據(jù)地址
#define GT_TP5_REG 0X8170//第五個(gè)觸摸點(diǎn)數(shù)據(jù)地址  

uint8_t GT9147_Init(void){
uint8_t Buff[5];
TOUCH_GPIO_Configuration();//引腳初始化  INT 上拉輸入
        /* 復(fù)位 */

GT9147_RST_LOW();
I2C_Delay(10000);
GT9147_RST_HIGH();
I2C_Delay(10000);

        /* INT 浮空輸入 */
         

GPIOB->MODER|=GPIO_Mode_IN<<2*1;
GPIOB->PUPDR&=(~((uint32_t)(1<<2)-1))<<2*1;

I2C_Delay(100000);

        /* 讀取器件ID */

GT9147_ReadBuff(GT_PID_REG,Buff,4);
Buff[4]=0;
printf("TOUCH ID=%s\n",Buff);
          /* 中斷初始化 */

INT_Configuration();
Buff[0]=0x02;
if(GT9147_WriteBuff(GT_CTRL_REG,Buff,1))
{
printf("xie ru cuo wu 1 \n");
return 1;
}
if(GT9147_ReadBuff(GT_CFGS_REG,Buff,1))
{
printf("du qu cuo wu \n");
}
if(Buff[0]<0X60)//默認(rèn)版本比較低,需要更新flash配置
{
printf("Default Ver:%0x\n",Buff[0]);
GT9147_SendCFG(1);//更新并保存配置
}
I2C_Delay(10000);
Buff[0]=0X00;
if(GT9147_WriteBuff(GT_CTRL_REG,Buff,1))
{
printf("fu wi shi bai \n");
return 1;
}
//結(jié)束復(fù)位   
return 0;
}

/* 讀取坐標(biāo)的時(shí)候先 讀取 GT_GSTID_REG 寄存器  判斷第七位是不是為1 如果是1 就有數(shù)據(jù) 否則沒(méi)有數(shù)據(jù)  讀取完畢的時(shí)候 要清零  3:0 位保存的值表示有多少個(gè)點(diǎn)同時(shí)被按下 */




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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美福利精品 | 日韩精品一区二 | 精品国产一区探花在线观看 | 中文字幕一区二区三区乱码在线 | 亚洲精品视 | 亚洲一区亚洲二区 | 在线色网 | 亚洲精品欧美 | 天堂一区二区三区四区 | 国产成人精品久久 | 久久爱综合 | 亚洲精品中文字幕中文字幕 | 久久亚洲欧美日韩精品专区 | 免费同性女女aaa免费网站 | 在线中文字幕日韩 | 日韩不卡三区 | 欧美色综合网 | 99资源| 久久视频精品 | 欧美精品综合在线 | 精品国产伦一区二区三区观看说明 | 91pron在线 | 国产美女一区二区 | 特级一级黄色片 | 精品国产视频 | 日韩精品一区在线 | 成人免费福利 | 国产成人在线一区二区 | 成人av一区 | 国产伊人精品 | 中文在线一区二区 | 日本精品一区 | 欧美一级久久 | 国产精品久久九九 | 视频一区二区三区四区五区 | 亚洲成人免费观看 | 欧美中文字幕在线观看 | 成人一区二区三区视频 | 精品一区在线 | 999在线精品 | 亚洲五码久久 |