通过51单片机采集传感器的数据,然后再发送到PC端。不知道是不是代码哪里写错了,求大佬告知!!!
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
#define SIZE 28
u8 AD_Value[SIZE];
//---定义使用的IO口---//
sbit DOUT = P3^7; //输出
sbit CLK = P3^6; //时钟
sbit DIN = P3^4; //输入
sbit CS = P3^5; //片选
/****************************************************************************
函数名:SPI_Start
*输 入:无
*输 出:无
*功 能:初始化触摸SPI
***************************************************************************/
void SPI_Start(void)
{
CLK = 0;
CS = 1;
DIN = 1;
CLK = 1;
CS = 0;
}
/****************************************************************************
函数名:SPI_Write
*输 入:dat:写入数据
*输 出:无
*功 能:使用SPI写入数据
***************************************************************************/
void SPI_Write(u8 dat)
{
u8 i;
CLK = 0;
for(i=0; i
{
DIN = dat >> 7; //放置最高位
dat <<= 1;
CLK = 0; //上升沿放置数据
CLK = 1;
}
}
/****************************************************************************
函数名:SPI_Read
*输 入:无
*输 出:dat:读取 到的数据
*功 能:使用SPI读取数据
***************************************************************************/
u8 SPI_Read(void)
{
u16 i, dat=0;
CLK = 0;
for(i=0; i<12; i++) //接收12位数据
{
dat <<= 1;
CLK = 1;
CLK = 0;
dat |= DOUT;
}
return (u8)(dat>>4);
}
/****************************************************************************
函数名:Read_AD_Data
*输 入:cmd:读取的X或者Y
*输 出:endValue:最终信号处理后返回的值
*功 能:读取触摸数据
***************************************************************************/
void Read_AD_Data(u8 cmd)
{
u8 i,j;
CLK = 0;
CS = 0;
SPI_Write(cmd); //写入命令
for(i=6; i>0; i--); //延时等待转换结果
CLK = 1; //发送一个时钟周期,清除BUSY
nop();
nop();
CLK = 0;
nop();
nop();
for(j=0;j<SIZE;j++)
{
AD_Value[j]=SPI_Read();
}
CS = 1;
}
/*.....................串口初始化....................*/
void rs232_init()
{
TMOD=0x20; //定时器T1,工作在方式2
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
PCON=0X80; //波特率加倍
TR1=1; //启动定时器T1
//SCON=0X50;
SM0=0;
SM1=1; //串口工作在方式1
REN=1; //先设定好工作方式,在打开允许接收
//------
ES=1; //打开串口中断
EA=1; //打开总中断
}
void main()
{
rs232_init();
while(1)
{
u8 k;
Read_AD_Data(0xE4); //AIN3外部输入
for(k=0;k<SIZE;k++)
{
SBUF=AD_Value[k];
while(!TI);
TI=0;
//break;
}
break;
}
}