初级会员

- 积分
- 119
- 金钱
- 119
- 注册时间
- 2015-1-28
- 在线时间
- 44 小时
|

楼主 |
发表于 2016-3-31 10:42:02
|
显示全部楼层
本帖最后由 琉璃 于 2016-3-31 19:11 编辑
[mw_shl_code=c,true]void GT9147_Init() //初始化GT9147触摸屏
{
GPIO_InitTypeDef G;
u8 temp;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOF, ENABLE);
// G.GPIO_Pin = GPIO_Pin_1 ; //GT9147_INT 本程序中未使用
// G.GPIO_Mode = GPIO_Mode_IN;
// G.GPIO_OType = GPIO_OType_PP;
// G.GPIO_Speed = GPIO_Speed_100MHz;
// G.GPIO_PuPd = GPIO_PuPd_UP;
// GPIO_Init(GPIOB, &G);
G.GPIO_Pin = GPIO_Pin_13; //GT9147_RST
G.GPIO_Mode = GPIO_Mode_OUT;
G.GPIO_OType = GPIO_OType_PP;
G.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOC, &G);
G.GPIO_Pin = GPIO_Pin_0; //GT9147_SCL
G.GPIO_Mode = GPIO_Mode_OUT;
G.GPIO_OType = GPIO_OType_PP;
G.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &G);
G.GPIO_Pin = GPIO_Pin_11; //GT9147_SDA
G.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(GPIOF, &G);
GT_RST=0; //硬复位
delay_us(10000);
GT_RST=1;
delay_us(10000);
temp=0X02; //开始软复位
GT9147_WR_Reg(GT_CTRL_REG,&temp,1);
delay_us(10000);
GT9147_Send_Cfg(0); //更新但不保存配置,每次上电都写一遍好了
delay_us(10000);
temp=0X00;
GT9147_WR_Reg(GT_CTRL_REG,&temp,1); //结束软复位
delay_us(1000000);
}
void GT9147_Scan()
{
u8 mode=0;
u8 buf[4];
u8 i=0;
u8 temp;
GT9147_RD_Reg(GT_GSTID_REG,&mode,1); //读取触摸点的状态
if(mode&0X80&&((mode&0XF)<6)) //仅当第一位为1(表示数据准备完成)和点数不超过5时进入
{
sta=mode&0x07; //获取触摸点数,本应0x0F才对,但0x07足够了
if(sta) //触摸点数不可为0
{
for(i=0;i<sta;i++) //有几处坐标就扫描几次
{
GT9147_RD_Reg(GT9147_TPX_TBL,buf,4); //读取XY坐标值,进行字节合成
xx=((u16)buf[1]<<8)+buf[0];
yy=((u16)buf[3]<<8)+buf[2];
}
}
temp=0,GT9147_WR_Reg(GT_GSTID_REG,&temp,1); //获取完成,清除状态标志
}
}[/mw_shl_code]
|
|