Stm32_电容式触摸屏- GT9147获取ID

目录

*GT9147寄存器*

头文件:

 读写时序图:

写寄存器

读寄存器

主函数


*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");
    }
}
		

*串口打印*

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值