⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 这是我用MSP430单片机控制ADS7843的触摸屏程序
💻 C
字号:

#include <msp430x16x.h>
#include "intrinsics.h"

#define uchar unsigned char 
#define uint unsigned int 
#define ulong unsigned long int 

//int txdata,tydata;


#define DCLK_1 P1OUT|=BIT3
#define DCLK_0 P1OUT&=~BIT3
#define CS_1   P1OUT|=BIT7
#define CS_0   P1OUT&=~BIT7
#define DIN_1   P1OUT|=BIT4 
#define DIN_0   P1OUT&=~BIT4
#define DOUT    P1IN&BIT5

//#define 7843_BUSY


void start() //SPI开始
{
P1DIR=0xff;
//P1DIR&=~BIT5;
DCLK_0;
CS_1;
DIN_1;
DCLK_1;
CS_0;
}


/*WriteCharTo7843(unsigned char num) //SPI写数据
{
P1DIR=0xff; 
//P1DIR&=~BIT5;
  
unsigned char count=0;
DCLK_0;
for(count=0;count<8;count++)
{
num<<=1;
if(num&BIT7)
DIN_1;
else DIN_0;

DCLK_0; _NOP();_NOP();_NOP();//_NOP();_NOP();_NOP();_NOP();_NOP(); //上升沿有效
DCLK_1; _NOP();_NOP();_NOP();//_NOP();_NOP();_NOP();_NOP();_NOP();

}
}*/


WriteCharTo7843(unsigned char num) 
{
  P1DIR=0xff;
unsigned char count=0;
DCLK_0;


for(count=0;count<8;count++)
{
DIN_0;
if(num&BIT7) DIN_1;
//else DIN_0;
//DIN=CY;
DCLK_0; _NOP();// _nop_();_nop_();_nop_(); //上升沿有效
DCLK_1; _NOP(); //_nop_();_nop_();_nop_();
num<<=1;
}
;

  }


 ReadFromCharFrom7843() //SPI 读数据
{
 P1DIR&=~BIT5;
unsigned char count=0;
unsigned int Num=0;



for(count=0;count<12;count++)
{
Num<<=1;
DCLK_1;  _NOP();//_NOP();_NOP();_NOP();_NOP();_NOP();  //下降沿有效
DCLK_0; _NOP();//_NOP();_NOP();_NOP();_NOP();_NOP(); 
if(DOUT) Num|=BIT0;
}

return (Num);
}



void delay(uint m)        // 12MHz Xtal, close to ms value
{
  do{_NOP();}	while(m--);
}

//=============AD7843



void int_clk()
{
    uchar i;
    BCSCTL1&=~XT2OFF;  //打开XT振荡器
    BCSCTL2|=SELM1+SELS;//MCLK 8M and SMCLK 1M  
    do
	{
        IFG1 &= ~OFIFG;                 //清除振荡错误标志 
        for(i = 0; i < 100; i++)
	  _NOP();			//延时等待
        }
    while ((IFG1 & OFIFG) != 0);	//如果标志为1继续循环等待
    IFG1&=~OFIFG;
}


void int_usart()
{  
  U0CTL|=SWRST;//复位串口
  U0CTL|=CHAR; //8位数据
  U0TCTL|=SSEL1;//select SMCLK AS CLK
  U0BR0=0xa0;
  U0BR1=0X01;
  UMCTL0=0Xc0;//19200
  ME1|=UTXE0+URXE0;//使能接收和发送 
  U0CTL&=~SWRST;//清除串口复位信号
  IE1|=URXIE0;//使能接收中断
  P3SEL|=BIT4;
  P3SEL|=BIT5;//选择I/O口使用扩展功能和方向
  P3DIR|=BIT4;  
}
sent_byte(uchar data)
{
  while((IFG1&UTXIFG0)==0);//判断发送缓冲区是否结束
  U0TXBUF=data;  
 }



void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
unsigned int X,Y;
unsigned char x,y;
unsigned char i,j,b,t;
unsigned int p;
int_clk();
int_usart();
//P1DIR=0xff;
  



 while(1)
   {
delay(100); //中断后延时以消除抖动,使得采样数据更准确
start(); //启动SPI
// while(BUSY); //如果BUSY信号不好使可以删除不用
delay(2);

//=====


 WriteCharTo7843(0xd0); //X坐标,可以直接使用
delay(20);
DCLK_1; 
DCLK_0;
X=ReadFromCharFrom7843();
x=(unsigned int)((X-260)*0.0533333 );

 i=x/100;       sent_byte(i);
 j=(x/10)%10;   sent_byte(j);
 b=x%10;       sent_byte(b);
 
 
 WriteCharTo7843(0x93); //y方向数据(未经过处理) 覃大哥
// while(BUSY); //如果BUSY信号不好使可以删除不用
//delay(2);
DCLK_1;
DCLK_0;
Y=ReadFromCharFrom7843();
y=(unsigned int)((Y-384)* 0.038953) ;

 i=y/100;   sent_byte(i);
 j=(y/10)%10; sent_byte(j);
 b=y%10;       sent_byte(b) ;
 
 
for(p=0;p<300;p++)
 {
    delay(10000);
      
 }   

 //CS_1;
   }


        
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -