目录
*GT9147寄存器*
头文件:
#ifndef __GT9147_H
#define __GT9147_H
#include "sys.h"
//INT PB1
//RESET PC13
#define GT_INT PBout(1)
#define GT_RST PCout(13)
//IIC读写命令
#define GT_CMD_WR 0x28 //写
#define GT_CMD_RD 0x29 //读
//GT9147部分寄存器定义
#define GT_CTRL_REG 0x8040 //控制寄存器
#define GT_CFGS_REG 0x8047 //配置起始地址寄存器
#define GT_CHECK_REG 0x80FF //校验和寄存器
#define GT_PID_REG 0x8140 //产品ID寄存器
//GT9147当前检测到的触摸情况
#define GT_GSTID_REG 0x814E
//触摸点数据地址
#define GT_TP1_REG 0x8150
#define GT_TP2_REG 0x8158
#define GT_TP3_REG 0x8160
#define GT_TP4_REG 0x8168
#define GT_TP5_REG 0x8170
void GT9147_Reset();
void GT9147_Init(void);
u8 GT9147_Send_Cfg(u8 mode);
u8 GT9147_WR_Reg(u16 reg,u8 *buf,u8 len);
void GT9147_RD_Reg(u16 reg,u8 *buf,u8 len);
u8 GT9147_Scan(u8 mode);
#endif
读写时序图:
写寄存器
读寄存器
写寄存器
u8 GT9147_WR_Reg(u16 reg,u8 *buf,u8 len)
{
u8 i;
u8 ret = 0;
CT_IIC_Start();
CT_IIC_Send_Byte(GT_CMD_WR);//发送写命令
CT_IIC_Wait_Ack();
CT_IIC_Send_Byte(reg>>8); //发送高8位地址
CT_IIC_Wait_Ack();
CT_IIC_Send_Byte(reg&0xFF); //发送低8位地址
CT_IIC_Wait_Ack();
for(i=0;i<len;i++)
{
CT_IIC_Send_Byte(buf[i]);//发数据
ret = CT_IIC_Wait_Ack();
if(ret)
break;
}
//CT_IIC_Stop();//产生一个停止条件
return ret;
}
读寄存器
void GT9147_RD_Reg(u16 reg,u8 *buf,u8 len)
{
u8 i;
CT_IIC_Start();
CT_IIC_Send_Byte(GT_CMD_WR);
CT_IIC_Wait_Ack();
CT_IIC_Send_Byte(reg>>8); //发送高8位地址
CT_IIC_Wait_Ack();
CT_IIC_Send_Byte(reg&0xFF); //发送低8位地址
CT_IIC_Wait_Ack();
CT_IIC_Stop();
CT_IIC_Start();
CT_IIC_Send_Byte(GT_CMD_RD);
CT_IIC_Wait_Ack();
for(i=0;i<len;i++)
{
buf[i]=CT_IIC_Read_Byte(i==(len-1)?1:0); //发数据
//*buf++=CT_IIC_Read_Byte((i==len-1)?1:0);
}
}
主函数
#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"
#include "CT_IIC.h"
#include "AT24XX.h"
#include "key.h"
#include "lcd.h"
#include "gt9147.h"
int main(void)
{
u8 ucID[4]; //存储GT9147ID
u8 i;
uart_init(115200);
delay_init(84);
CT_IIC_Init();
LCD_Init();
GT9147_Init();
AT24CXX_Init();
while(1)
{
GT9147_RD_Reg(GT_PID_REG,ucID,4);
for(i=0;i<4;i++)
printf("%c",ucID[i]);
printf("\r\n");
}
}
*串口打印*