u16 TP_Read_AD(u8 CMD) { u8 count=0; u16 Num=0; GPIO_ResetBits(GPIOB,GPIO_Pin_0);//TCLK=0; //先拉低时钟 GPIO_ResetBits(GPIOH,GPIO_Pin_7);//TDIN=0; //拉低数据线 GPIO_ResetBits(GPIOF,GPIO_Pin_11);//TCS=0; //选中触摸屏IC TP_Write_Byte(CMD);//发送命令字 delay_us(6);//ADS7846的转换时间最长为6us GPIO_ResetBits(GPIOB,GPIO_Pin_0);//TCLK=0; delay_us(1); GPIO_SetBits(GPIOB,GPIO_Pin_0);//TCLK=1; //给1个时钟,清除BUSY delay_us(1); GPIO_ResetBits(GPIOB,GPIO_Pin_0);//TCLK=0; for(count=0;count<16;count++)//读出16位数据,只有高12位有效 { Num<<=1; GPIO_ResetBits(GPIOB,GPIO_Pin_0);//TCLK=0; //下降沿有效 delay_us(1); GPIO_SetBits(GPIOB,GPIO_Pin_0);//TCLK=1; if(DOUT)Num++; } Num>>=4; //只有高12位有效. GPIO_SetBits(GPIOF,GPIO_Pin_11);//TCS=1; //释放片选 return(Num); }
//从TPIC读取ADC值 unsigned int TP_Read_AD(unsigned char CMD) { unsigned char i ; unsigned int rec = 0 ; CLR_PSCK ; CLR_TP_CS ; TP_Write_Byte(CMD) ; // 发送命令字 __delay_cycles(200) ; // 等待响应 for(i=0;i<16;i++) { SET_PSCK ; __delay_cycles(5) ; CLR_PSCK ; rec <<= 1 ; if(PMISO_IS_SET) rec++ ; } rec >>= 4 ; //高12位有效 SET_TP_CS ; return(rec) ; }
u16 TP_Read_AD(u8 CMD) { u8 count=0; u16 Num=0; TCLK=0; //先拉低时钟 TDIN=0; //拉低数据线 TCS=0; //选中触摸屏IC TP_Write_Byte(CMD);//发送命令字 delay_us(6);//ADS7846的转换时间最长为6us TCLK=0; delay_us(1); TCLK=1; //给1个时钟,清除BUSY TCLK=0; for(count=0;count<16;count++)//读出16位数据,只有高12位有效 { Num<<=1; TCLK=0; //下降沿有效 TCLK=1; if(DOUT)Num++; } Num>>=4; //只有高12位有效. TCS=1; //释放片选 return(Num); }