×
嵌入式 > 技术百科 > 详情

基于MSP430F249的ADC7864触摸程序函数

发布时间:2020-06-20 发布时间:
|
这个例子是我参照51单片机的例子写的,测试过,能正常读取数据,没转换为坐标
使用的是中断法,下降沿促发
 
//文件名:tourch_screen.h
//基于ADS7846的触摸屏程序
//宏定义:对管脚的定义
//
 
#ifndef _touch_screen_h_
#define _touch_screen_h_
 
extern unsigned int x_zb,y_zb;  //测的x,y坐标
//函数:Touch_Port_Ini()
//描述:初始化触摸控制端口
//返回值:无
void Touch_Port_Ini();  //初始化端口
#endif
 
//描述:管脚的宏定义
//
//
#ifdef _touch_
#include
 
#define tch_out P2OUT
#define tch_in P2IN
#define tch_dir P2DIR //触摸控制端口
#define tch_ie P2IE   //用来产生中断
#define tch_ies P2IES
#define tch_ifg P2IFG
 
#define DCLK BIT0
#define DCLKSET() tch_out|=DCLK
#define DCLKCLR() tch_out&=~DCLK
 
#define DCS BIT1
#define CSSET()  tch_out|=DCS
#define CSCLR() tch_out&=~DCS
 
#define SOUT BIT3
#define DOUT tch_in&SOUT    //数据接受脚
 
#define DIN BIT2
#define DINSET() tch_out|=DIN
#define DINCLR() tch_out&=~DIN
 
#define DINIT BIT5
 
#define SBUSY BIT4
#define DBUSY tch_in&SBUSY  //忙检测
 
#endif
 
 
 
//文件名:tourch_screen.c
//基于ADS7846的触摸屏程序
//
//
#define _touch_
#include"touch_screen.h"
 
unsigned int x_zb=0,y_zb=0;
 
//函数:Touch_Port_Ini()
//描述:初始化触摸控制端口
//返回值:无
void Touch_Port_Ini() //触摸端口初始化
{
  tch_dir|=DCLK|DCS|DIN;  //设置端口方向
  tch_dir&=~SOUT;
  tch_ie|=DINIT;         //设置允许中断
  tch_ies|=DINIT;        //设置下降沿触发
  tch_ifg=0;             //清中断标志
  _EINT();                //开总中断
}
 
//函数:Spi_Start()
//描述:和ADC7846数据传输开始
//返回值:无
void Spi_Start()  //spi开始
{
  CSSET();
  DCLKCLR();
  DINCLR();
  CSCLR();
}
 
//函数:Write_7846()
//描述:对7843写数据
//返回值:无
void Write_7846(unsigned char num) //spi写数据
{
   unsigned char i;
   
   DCLKCLR();
   for(i=0;i<8;i++)
   {
      if(num&0x80)
      {
        DINSET();
      }
      else
      {
        DINCLR();
      }
      DCLKCLR();_NOP();_NOP();_NOP();_NOP();
      DCLKSET();_NOP();_NOP();_NOP();_NOP();
      
      num<<=1;
   }
}
//函数:Read12_7846()
//描述:读7843的12位数据
//返回值:无
unsigned int Read12_7846()  // SPI读取数据
{
  unsigned char i;
  unsigned int data;
  
  DCLKCLR();
  for(i=0;i<12;i++)
  {
    data<<=1;
    DCLKSET();_NOP();_NOP();_NOP();_NOP();
    DCLKCLR();_NOP();_NOP();_NOP();_NOP();
    
    if(DOUT) data++;
  }
  
  return data;
}
 
//函数:Read8_7846()
//描述:读7843的8为数据
//返回值:无
unsigned char Read8_7846()  // SPI读取数据
{
  unsigned char i;
  unsigned char data;
  
  DCLKCLR();
  for(i=0;i<8;i++)
  {
    data<<=1;
    DCLKSET();_NOP();_NOP();_NOP();_NOP();
    DCLKCLR();_NOP();_NOP();_NOP();_NOP();
    
    if(DOUT) data++;
  }
  
  return data;
}
//函数:delay_ADC7846()
//描述:延时函数
//返回值:无
void delay_ADC7846(unsigned int i)
{
  unsigned char j;
  
  for(;i>0;i--)
    for(j=100;j>0;j--);
}
//12精度:读y坐标写入0x90,x坐标写入0xd0
//8位精度:读y坐标写入0x98,x坐标写入0xd8
//
 
#pragma vector=PORT2_VECTOR
__interrupt void touch_int()
{
   unsigned int x,y;
    
   delay_ADC7846(500);
   Spi_Start();
   delay_ADC7846(1);
   Write_7846(0x98);
   delay_ADC7846(1);
   y=Read8_7846();
   Write_7846(0xD8);
   delay_ADC7846(1);
   x=Read8_7846();
   CSSET();
   delay_ADC7846(10000);
   if(x!=0&&y!=4095) //防止在结束时再读取错误数据
   {
      x_zb=x;
      y_zb=y;
   }
   
   tch_ifg=0;    //清中断标志位
}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
中国国产第三代核电实现并网发电