📄 main.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 + -