您的位置 首页 模拟

根据MSP430F249的ADC7864接触程序函数

这个例子是我参照51单片机的例子写的,测试过,能正常读取数据,没转换为坐标使用的是中断法,下降沿促发文件名:tourch_screenh基于A

这个比如是我参照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<msp430x24x.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; //清中止标志位
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/261874.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部