微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于MSP430F249的ADC7864触摸程序函数

基于MSP430F249的ADC7864触摸程序函数

时间:11-22 来源:互联网 点击:
这个例子是我参照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_

#includemsp430x24x.h>

#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; //清中断标志位

}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top