xpt2046驱动后在液晶上读取ad采样值不规律

2019-07-15 15:16发布

板子用的是msp430f149,驱动xpt2046时,触屏上点不同点,ad采样值不规律。水平和垂直方向滑动,增加到9000多时又会变为1000多。以下是驱动,请帮忙看看,看是不是驱动的问题,我都找了好几天了。
//向TPIC写入1byte数据   
void TP_Write_Byte(unsigned char data)   
{  
  unsigned char temp,i                              ;
  temp       =  data                                ;  
  for(i=0;i<8;i++)  
  {
    if(temp&0x80)      SET_PMOSI                    ;  
    else               CLR_PMOSI                    ;   
    temp   <<=1                                     ;   
    CLR_PSCK                                        ;
//   __delay_cycles(3)                               ;
    SET_PSCK                                        ;   
// __delay_cycles(3)                               ;   
  }                 
}
//从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)                                ; // 发送命令字
//    SET_PSCK                                        ;            
//    __delay_cycles(3)                               ;
//    CLR_PSCK                                        ;
//    __delay_cycles(3)                               ;
//    SET_PSCK                                        ;            
//    __delay_cycles(3)                               ;
//   CLR_PSCK                                        ;
//    __delay_cycles(3)                               ;
//    SET_PSCK                                        ;            
//    __delay_cycles(3)                               ;
//    CLR_PSCK                                        ;
  //  __delay_cycles(20)                               ;
  
__delay_cycles(1)                               ; // 等待响应
  for(i=0;i<12;i++)  
  {                  
    rec          <<= 1                              ;     
    SET_PSCK                                        ;            
//    __delay_cycles(3)                               ;
    CLR_PSCK                                        ;
//    __delay_cycles(3)                               ;

    if(PMISO_IS_SET)    rec++                       ;         
  }      
//  rec            >>= 4                              ; //高12位有效
  SET_TP_CS                                         ;     
  return(rec)                                       ;   
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。