#ifndef sca100t_H
#define sca100t_H
//#include "math.h"
#define CLK GPBCON[4]
#define MISO GPBCON[6]
#define MOSI GPBCON[7]
#define CSB GPBCON[5]
void init_sca();
void SPI_Reset(void);
void SPI_Delay(unsigned char n);
void SPI_Start(void);
void SPI_Stop(void);
unsigned int SPI_ReadBits(unsigned char n);
void SPI_WriteByte(unsigned char cmd);
void Meas();
uint SPI_GetX( void );
uint SPI_GetY( void );
uint SPI_GetTR( void );
double GET_Xangle(uint X_data);
double GET_Yangle(uint Y_data);
//////////////////////////////////////////////////
#include "sca100t.h"
#include "math.h"
/*程序的调用在主程序main.c的定时器函数中,请注意查找*/
/*为了便于模拟输出的实现,这里将命令做了更改,即首位倒序,请注意和文档上的差异*/
#define MEAS 0x00 //测量模式
#define RWTR 0x10 //读写温度数据寄存器,0x08
#define STX 0x0E //x通道自检
#define STY 0x0F //Y通道自检
#define RDAX 0x08 //读X通道加速度值,0x10
#define RDAY 0x88 //读Y通道加速度值,0x11
#define LOW 0
#define HIGH 1
///////////////延时子函数/////////////
void SPI_Delay(unsigned char n)
{
while(n--)
;
}
///////////////////////////////////
void SPI_Start(void)
{
CSB = HIGH;
SPI_Delay(100);
CLK = LOW;
CSB = LOW;
SPI_Delay(5);
}
/////////////////////////////////////
void SPI_Stop( void )
{
CLK = LOW;
CSB = HIGH;
SPI_Delay(10);
}
////////////////////////////////////
//写命令函数,注意数据是在时钟的上升沿
void SPI_WriteByte(unsigned char cmd)
{
unsigned char i;
for(i=0;i<8;i++)
{
CLK = LOW;
SPI_Delay(9);
MOSI=cmd&0x01;
cmd>>=1;
SPI_Delay(6);
CLK = HIGH;
SPI_Delay(18);
}
}
//主机读入N个比特
//n 限制为16及其以下
//结束状态 CLK = 0
unsigned int SPI_ReadBits( unsigned char n ) //读数据函数,
{
uint rtemp=0,i;
MOSI = LOW;
CLK = LOW;
SPI_Delay(18);
for( i = 0 ; i < n ; ++i )
{
rtemp <<= 1;
if( MISO == 1 )
{
rtemp |= 0x0001;
}
else
{
rtemp &= 0xFFFE;
}
CLK = HIGH;
SPI_Delay(18);
CLK = LOW;
SPI_Delay(15);
}
return rtemp;
}
////////////////设定为测量模式,一般用于自检模式后/////////////////
void Meas(void)
{
uint result;
SPI_Start();
SPI_WriteByte(MEAS);
result = SPI_ReadBits(11);
SPI_Stop();
}
////////////////////获取x轴加速度///////////////////////
uint SPI_GetX( void )
{
uint result;
PORTCD_PD7 = 1;
SPI_Start();
SPI_WriteByte( RDAX );
result = SPI_ReadBits(11);
SPI_Stop();
PORTCD_PD7 = 0;
return result;
}
//////////////////获取y轴加速度////////////////////
uint SPI_GetY( void )
{
uint result;
SPI_Start();
SPI_WriteByte( RDAY );
result = SPI_ReadBits(11);
SPI_Stop();
return result;
}
/////////////////获取温度/////////////////
uint SPI_GetTR( void )
{
uint result;
SPI_Start();
SPI_WriteByte(RWTR);
result = SPI_ReadBits(11);
SPI_Stop();
return result;
}
///////////////////获取x轴角度值///////////////////
double GET_Xangle(uint X_data)
{
double angle;
angle= (X_data-1024.0)/1638.0;
angle= asin(angle)*180/3.1415926; //此处的反正弦函数为S12库函数,调用时注意相应更改
return angle;
}
///////////////////获取y轴角度值///////////////////
double GET_Yangle(uint Y_data)
{
double angle;
angle= (Y_data-1024.0)/1638.0;
angle= asin(angle)*180/3.1415926;
return angle;
}

Kinonoyomeo
- 粉丝: 106
最新资源
- 基于PLC的病床呼叫器控制系统设计.doc
- 精华版国家开放大学电大专科《网络系统管理与维护》机考多项选择判断题题库及答案.pdf
- 市场营销模拟软件实训报告.doc
- 网络产品推广方案范文怎么写.pdf
- 2023年江苏省中小学教师班主任知识网络竞赛题库附答案.doc
- 几类互连网络的容错哈密顿性.doc
- 基于二维空间定向搜索算法的TD边界小区渗透率提升的三个一方法.doc
- 移动电子商务微信的案例分析PPT课件.ppt
- 嵌入式系统可信平台模块研究-张焕国(15页).doc
- 电子商务网站建设策划方案.doc
- 项目成本管理项目管理(精品)复习资料.pdf
- (源码)基于ESP32的无线网络分析器.zip
- 物联网应用系统设计.doc
- 武汉奕创广告于婚纱摄影行业网络品牌建设方案浅析样本.doc
- 上海滨江凯旋门住宅发展项目EIB智能家居系统方案.doc
- 写字楼工程的项目管理范文.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



评论0