#include "MMA7455.H"
//sbit sda=P2^3; //I2C 数据传送位
//sbit scl=P2^4; //I2C 时钟传送位
unsigned char sign_flag; //输出数据正负标记位
void IIC_MMA7455_init()
{
IIC_start();
IIC_writebyte(MMA7455_ADDER_WRITE); //1. 在IIC总线上寻址MMA7455
while(IIC_respons());
IIC_writebyte(MMA7455_Mode_Control_Register); //2. 模式设置寄存器寻址
while(IIC_respons());
IIC_writebyte(MMA7455_2G_Measurement_Mode); //3. 模式寄存器数据写入
while(IIC_respons());
IIC_stop();
IIC_start();
IIC_writebyte(MMA7455_ADDER_WRITE); //1. 在IIC总线上寻址MMA7455
while(IIC_respons());
IIC_writebyte(MMA7455_Mode_Control_Register); //2. 模式设置寄存器寻址
while(IIC_respons());
IIC_writebyte(MMA7455_2G_Measurement_Mode); //3. 模式寄存器数据写入
while(IIC_respons());
IIC_stop();
}
void IIC_MMA7455_writedata(uchar byte_add,uchar wdata)//函数功能:按地址写入一字节数据
{
unsigned char temp;
temp=(IIC_WRITE<<1);
IIC_start();
IIC_writebyte(temp);
while(IIC_respons());
IIC_writebyte(byte_add);
while(IIC_respons());
IIC_writebyte(wdata);
while(IIC_respons());
IIC_stop();
}
unsigned char IIC_MMA7455_readdata(uchar byte_add) //函数功能:按地址读出一字节数据
{
unsigned char temp;
char x_y_z ;
temp=(IIC_WRITE<<1);
IIC_start();
IIC_writebyte(0x3A);
while(IIC_respons());
IIC_writebyte(byte_add);
while(IIC_respons());
temp=((IIC_READ<<1)|0x01);
IIC_start();
IIC_writebyte(0x3B);
while(IIC_respons());
x_y_z=IIC_readbyte();
while(IIC_respons());
IIC_stop();
return x_y_z;
}
unsigned char IIC_MMA7455_test()
{
unsigned char temp;
for(temp=255;temp<=1;temp--);
IIC_MMA7455_writedata(0x16,0x05);
for(temp=255;temp<=1;temp--);
temp=IIC_MMA7455_readdata(0x16);
if(temp==0x05) {return 1;}
else{return 0;}
}
unsigned char IIC_MMA7455_checkbusy()
{
unsigned char temp;
temp=IIC_MMA7455_readdata(MMA7455_READ_STATUS);
if((temp&0x01)==1)
{
return 1;
}
else
{
return 0;
}
}
unsigned char IIC_MMA7455_getvalue(unsigned char address_byte)
{
unsigned char temp;
while(!IIC_MMA7455_checkbusy());
temp=IIC_MMA7455_readdata(address_byte);
if((temp&0x80)==0x00)
{
sign_flag=0;
return temp;
}
else
{
sign_flag=1;
temp=temp-0x01;
temp=~temp;
return temp;
}
}
unsigned char IIC_MMA7455_getaverage(unsigned char address_byte)
{
unsigned char num,temp;
unsigned int temps=0x00;
for(num=50;num>0;num--)
{
temp=IIC_MMA7455_getvalue(address_byte);
temps=temps+temp;
}
temp=temps/50;
return temp;
}
unsigned char IIC_MMA7455_getacceleration(unsigned char address_byte)
{
unsigned int temp;
temp=IIC_MMA7455_getaverage(address_byte);
temp=temp*200;
temp=temp>>7;
return temp;
}
unsigned char IIC_MMA7455_calibrate_X()
{
unsigned char tempX,time;
while(!IIC_MMA7455_checkbusy());
tempX=IIC_MMA7455_readdata(MMA7455_READ_X);
for(time=100;time>0;time--)
{
if((tempX&0x80)==0x00)
{
tempX=tempX+tempX;
tempX=~tempX+1;
IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempX);
}
else
{
tempX=tempX-1;
tempX=~tempX;
tempX=tempX+tempX;
IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempX);
}
tempX=IIC_MMA7455_readdata(MMA7455_READ_X);
if((tempX<=10)&&(tempX>=-10)){break;}
}
return 1;
}
unsigned char IIC_MMA7455_calibrate_Y()
{
unsigned char tempY,time;
while(!IIC_MMA7455_checkbusy());
tempY=IIC_MMA7455_readdata(MMA7455_READ_Y);
for(time=100;time>0;time--)
{
if((tempY&0x80)==0x00)
{
tempY=tempY+tempY;
tempY=~tempY+1;
IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempY);
}
else
{
tempY=tempY-1;
tempY=~tempY;
tempY=tempY+tempY;
IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempY);
}
tempY=IIC_MMA7455_readdata(MMA7455_READ_Y);
if((tempY<=10)&&(tempY>=-10)){break;}
}
return 1;
}
unsigned char IIC_MMA7455_calibrate_Z()
{
unsigned char tempZ,time;
while(!IIC_MMA7455_checkbusy());
tempZ=IIC_MMA7455_readdata(MMA7455_READ_Z);
for(time=100;time>0;time--)
{
if((tempZ&0x80)==0x00)
{
tempZ=64-tempZ;
if(tempZ==0){break;}
if(tempZ>0)
{
tempZ=tempZ+tempZ;
tempZ=~tempZ+1;
IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempZ);
}
if(tempZ<0)
{
tempZ=tempZ+tempZ;
IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempZ);
}
}
else
{
tempZ=tempZ-1;
tempZ=~tempZ;
tempZ=64+tempZ;
tempZ=tempZ+tempZ;
IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempZ);
}
tempZ=IIC_MMA7455_readdata(MMA7455_READ_Z);
if((tempZ<=70)&&(tempZ>=50)){break;}
}
return 1;
}
大富大贵7
- 粉丝: 396
- 资源: 8870
最新资源
- 基于matlab的传统滤波、Butterworth滤波、FIR、移动平均滤波、中值滤波、现代滤波、维纳滤波、自适应滤波、小波变,七种滤波方法,可替自己的数据进行滤波,程序已调通,可直接运行
- 基于Java语言开发的ASR+TTS+声纹识别功能的智能聊天小程序设计源码
- 含风电-光伏-光热电站电力系统N-k安全优化调度模型 关键词:N-K安全约束 光热电站 优化调度 参考文档:参考《光热电站促进风电消纳的电力系统优化调度》光热电站模型; 仿真软件: matlab+y
- 基于TypeScript和JavaScript的每日饮食与运动记录工具设计源码
- 基于JavaScript的仪器预约系统设计源码
- 基于Vue的依沫一站式内容资源变现博客设计源码
- 基于SSM框架与微信小程序的宠物管理系统源码设计
- 基于宝塔Linux面板7.9.0免费版的7.9.2兼容CSS美化设计源码
- 基于ActiveReports的C#报表控件设计源码
- 基于C#与Shell语言的SangServerTool服务器DDNS与SSL证书申请工具设计源码
- 基于SpringBoot+Vue的智能停车场管理系统设计源码
- 基于Shell、Python、PHP、HTML的zzxia-op-super-invincible-lollipop代码构建部署运维工具箱设计源码
- 华为FusionCompute 8.0.1 集成设计指导书
- 基于C语言实现的新型疫苗接种管理系统设计源码
- 基于JavaScript和微信小程序的抖音本地生活团购系统源码搭建与部署方案
- 电力电子boost升压电路MATLAB仿真,pi控制闭环(15r)滑模控制改进版(29r)24升48V,电压可修改 基于反激变器的升压电路,降压电路boost buck的MATLAB仿真,PLECS也
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈