专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
求助三轴加速度MMA8451的使用程序和使用方法?
2020-01-23 14:49
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
4792
28
28
我在做小车,用到三轴加速度MMA8451,但论坛没有MMA8451的使用程序和使用方法?求哪位大侠帮一下小弟!
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
27条回答
新月弯刀
1楼-- · 2020-01-23 17:46
也可以发我邮箱
1216529013@qq.com
,小弟感激不尽!
加载中...
新月弯刀
2楼-- · 2020-01-23 21:13
void main()
{
unsigned char x, y, z,v=0,tv;
char piancha=0;
uchar jiasudu=0;//
uchar jiao=0;
// float jiasudu=0.0001;//
// float jiao=0.0001;
init_12864();
clear();
// locate( 1, 1 );write_hz("偏离垂直方向角度");
delayms(10);
TMOD=0x21; //定时T1方式2,接P3.5 C/T=0,M1=1,定时T0方式1, M0=1 接P3.4
SCON=0x60; //8 bit SM1=SM2=1,SM0=0, REN=0
TL1=0xfd; //9600
TH1=0xfd;
TR1=1;
ET0=1;
EA=1;
MMA845x_init(); //初始化MMA845x
MMA845x_readbyte( 0x08);
MMA845x_readbyte( 0x04);
MMA845x_readbyte( 0x02);
v= MMA845x_readbyte(WHO_AM_I_REG); //把读取的字节赋给v
if((v == MMA8451Q_ID)||(v == MMA8452Q_ID)||(v == MMA8453Q_ID))
{
send232byte('O');
send232byte('K');
send232byte('!');
}
else
{
send232byte('F');
send232byte('a');
send232byte('i');
send232byte('l');
send232byte('!');
}
while(1)
{ //读取重力信息
x = MMA845x_readbyte(OUT_X_MSB_REG); //x轴重力信息
y = MMA845x_readbyte(OUT_Y_MSB_REG); //y轴重力信息
z = MMA845x_readbyte(OUT_Z_MSB_REG); //z轴重力信息
send232byte(0x55);
send232byte(0xAA);
send232byte(x);
send232byte(y);
send232byte(z);
if(x>127) //读取8位数据 只读取z轴的数据
{
tv=~x+1; //取反加一
send232byte('-'); locate( 2, 1 ); write_hz("x=-");
}
else
{
send232byte('+'); locate( 2, 1 ); write_hz("x=+");
tv=x;
}
//
// // jiao=(atan(x/z)*180.0/3.1415926)*1000; //角度计算
// // jiao=((float)(acos(tv/63))*180/3.14)*1000; //角度计算
// // jiaodu[0]=jiao%10000/1000;
// jiaodu[1]=jiao%10000%1000/100;
// jiaodu[2]=jiao%10000%1000%100/10;
// jiaodu[3]=jiao%10000%1000%100%10;
// locate( 2, 3 );
// // write_number(jiaodu[0]);
// write_number(jiaodu[1]);
// write_number(jiaodu[2]);
// write_number(jiaodu[3]);
jiasudu=(((float)tv)/0x3f)*10000;//计算加速度值大小
//jiasud[0]=jiasudu%10000/1000;
jiasud[1]=jiasudu%10000%1000/100;
jiasud[2]=jiasudu%10000%1000%100/10;
jiasud[3]=jiasudu%10000%1000%100%10;
// jiasud[3]=jiasudu%10000%1000%100/10;
locate( 2, 3 );
//write_number(jiasud[0]);
write_number(jiasud[1]);
write_number(jiasud[2]);delayms(1);
write_number(jiasud[3]);
if(y>127) //读取8位数据 只读取z轴的数据
{
tv=~y+1; //取反加一
send232byte('-'); locate( 3, 1 ); write_hz("y=-");
}
else
{
send232byte('+'); locate( 3, 1 ); write_hz("y=+");
tv=y;
}
// jiao=((float)(acos(tv/63))*180/3.14)*1000; //角度计算
// jiaodu[0]=jiao%10000/1000;
// jiaodu[1]=jiao%10000%1000/100;
// jiaodu[2]=jiao%10000%1000%100/10;
// jiaodu[3]=jiao%10000%1000%100%10;
// locate( 3, 3 );
// write_number(jiaodu[0]);
// write_number(jiaodu[1]);
// write_number(jiaodu[2]);
// write_number(jiaodu[3]);
jiasudu=(((float)tv)/0x3f)*10000;//计算加速度值大小
jiasud[0]=jiasudu%10000/1000;
jiasud[1]=jiasudu%10000%1000/100;
jiasud[2]=jiasudu%10000%1000%100/10;
jiasud[3]=jiasudu%10000%1000%100%10;
locate( 3, 3 );
// write_number(jiasud[0]);
write_number(jiasud[1]);
write_number(jiasud[2]);delayms(1);
write_number(jiasud[3]);
if(z>127) //读取8位数据 只读取z轴的数据
{
tv=~z+1; //取反加一
send232byte('-'); locate( 4, 1 ); write_hz("z=-");
}
else
{
send232byte('+'); locate( 4, 1 ); write_hz("z=+");
tv=z;
}
// jiao=((float)(acos(tv/63))*180/3.14)*1000; //角度计算
// jiaodu[0]=jiao%10000/1000;
// jiaodu[1]=jiao%10000%1000/100;
// jiaodu[2]=jiao%10000%1000%100/10;
// jiaodu[3]=jiao%10000%1000%100%10;
// locate( 4, 3 );
// write_number(jiaodu[0]);
// write_number(jiaodu[1]);
// write_number(jiaodu[2]);
// write_number(jiaodu[3]);
// printf("偏离垂直方向角度=%f",jiao);
jiasudu=(((float)tv)/0x3f)*10000;//计算加速度值大小
//jiasud[0]=jiasudu%10000/1000;
jiasud[1]=jiasudu%1000/100;
jiasud[2]=jiasudu%100/10;
jiasud[3]=jiasudu%100%10;
locate( 4, 3 );
// write_number(jiasud[0]);
write_number(jiasud[1]);
write_number(jiasud[2]);delayms(1);
write_number(jiasud[3]);
//getAll();
}
}
为啥我测不出角度值啊,!难道转换公式不对吗! 请大侠 帮助
加载中...
diyeyuye
3楼-- · 2020-01-23 23:59
楼主,有关于MMA8451加速度传感器的资料吗?发我一份吧,
wangyao19920204@qq.com
多谢!
加载中...
1249924451
4楼-- · 2020-01-24 00:07
精彩回答 2 元偷偷看……
加载中...
行知
5楼-- · 2020-01-24 00:45
渴望资料
1131038786@qq.com
加载中...
viqomk
6楼-- · 2020-01-24 04:41
我在弄,现在差不多了...
加载中...
1
2
3
4
5
下一页
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
东软载波ESF0654 PDS开发板串口USART0代码分享
1 个回答
普通32位单片机使用linux的应用代码
5 个回答
东软载波ESF0654 PDS开发板AT24C04的调试
9 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
{
unsigned char x, y, z,v=0,tv;
char piancha=0;
uchar jiasudu=0;//
uchar jiao=0;
// float jiasudu=0.0001;//
// float jiao=0.0001;
init_12864();
clear();
// locate( 1, 1 );write_hz("偏离垂直方向角度");
delayms(10);
TMOD=0x21; //定时T1方式2,接P3.5 C/T=0,M1=1,定时T0方式1, M0=1 接P3.4
SCON=0x60; //8 bit SM1=SM2=1,SM0=0, REN=0
TL1=0xfd; //9600
TH1=0xfd;
TR1=1;
ET0=1;
EA=1;
MMA845x_init(); //初始化MMA845x
MMA845x_readbyte( 0x08);
MMA845x_readbyte( 0x04);
MMA845x_readbyte( 0x02);
v= MMA845x_readbyte(WHO_AM_I_REG); //把读取的字节赋给v
if((v == MMA8451Q_ID)||(v == MMA8452Q_ID)||(v == MMA8453Q_ID))
{
send232byte('O');
send232byte('K');
send232byte('!');
}
else
{
send232byte('F');
send232byte('a');
send232byte('i');
send232byte('l');
send232byte('!');
}
while(1)
{ //读取重力信息
x = MMA845x_readbyte(OUT_X_MSB_REG); //x轴重力信息
y = MMA845x_readbyte(OUT_Y_MSB_REG); //y轴重力信息
z = MMA845x_readbyte(OUT_Z_MSB_REG); //z轴重力信息
send232byte(0x55);
send232byte(0xAA);
send232byte(x);
send232byte(y);
send232byte(z);
if(x>127) //读取8位数据 只读取z轴的数据
{
tv=~x+1; //取反加一
send232byte('-'); locate( 2, 1 ); write_hz("x=-");
}
else
{
send232byte('+'); locate( 2, 1 ); write_hz("x=+");
tv=x;
}
//
// // jiao=(atan(x/z)*180.0/3.1415926)*1000; //角度计算
// // jiao=((float)(acos(tv/63))*180/3.14)*1000; //角度计算
// // jiaodu[0]=jiao%10000/1000;
// jiaodu[1]=jiao%10000%1000/100;
// jiaodu[2]=jiao%10000%1000%100/10;
// jiaodu[3]=jiao%10000%1000%100%10;
// locate( 2, 3 );
// // write_number(jiaodu[0]);
// write_number(jiaodu[1]);
// write_number(jiaodu[2]);
// write_number(jiaodu[3]);
jiasudu=(((float)tv)/0x3f)*10000;//计算加速度值大小
//jiasud[0]=jiasudu%10000/1000;
jiasud[1]=jiasudu%10000%1000/100;
jiasud[2]=jiasudu%10000%1000%100/10;
jiasud[3]=jiasudu%10000%1000%100%10;
// jiasud[3]=jiasudu%10000%1000%100/10;
locate( 2, 3 );
//write_number(jiasud[0]);
write_number(jiasud[1]);
write_number(jiasud[2]);delayms(1);
write_number(jiasud[3]);
if(y>127) //读取8位数据 只读取z轴的数据
{
tv=~y+1; //取反加一
send232byte('-'); locate( 3, 1 ); write_hz("y=-");
}
else
{
send232byte('+'); locate( 3, 1 ); write_hz("y=+");
tv=y;
}
// jiao=((float)(acos(tv/63))*180/3.14)*1000; //角度计算
// jiaodu[0]=jiao%10000/1000;
// jiaodu[1]=jiao%10000%1000/100;
// jiaodu[2]=jiao%10000%1000%100/10;
// jiaodu[3]=jiao%10000%1000%100%10;
// locate( 3, 3 );
// write_number(jiaodu[0]);
// write_number(jiaodu[1]);
// write_number(jiaodu[2]);
// write_number(jiaodu[3]);
jiasudu=(((float)tv)/0x3f)*10000;//计算加速度值大小
jiasud[0]=jiasudu%10000/1000;
jiasud[1]=jiasudu%10000%1000/100;
jiasud[2]=jiasudu%10000%1000%100/10;
jiasud[3]=jiasudu%10000%1000%100%10;
locate( 3, 3 );
// write_number(jiasud[0]);
write_number(jiasud[1]);
write_number(jiasud[2]);delayms(1);
write_number(jiasud[3]);
if(z>127) //读取8位数据 只读取z轴的数据
{
tv=~z+1; //取反加一
send232byte('-'); locate( 4, 1 ); write_hz("z=-");
}
else
{
send232byte('+'); locate( 4, 1 ); write_hz("z=+");
tv=z;
}
// jiao=((float)(acos(tv/63))*180/3.14)*1000; //角度计算
// jiaodu[0]=jiao%10000/1000;
// jiaodu[1]=jiao%10000%1000/100;
// jiaodu[2]=jiao%10000%1000%100/10;
// jiaodu[3]=jiao%10000%1000%100%10;
// locate( 4, 3 );
// write_number(jiaodu[0]);
// write_number(jiaodu[1]);
// write_number(jiaodu[2]);
// write_number(jiaodu[3]);
// printf("偏离垂直方向角度=%f",jiao);
jiasudu=(((float)tv)/0x3f)*10000;//计算加速度值大小
//jiasud[0]=jiasudu%10000/1000;
jiasud[1]=jiasudu%1000/100;
jiasud[2]=jiasudu%100/10;
jiasud[3]=jiasudu%100%10;
locate( 4, 3 );
// write_number(jiasud[0]);
write_number(jiasud[1]);
write_number(jiasud[2]);delayms(1);
write_number(jiasud[3]);
//getAll();
}
}
为啥我测不出角度值啊,!难道转换公式不对吗! 请大侠 帮助
一周热门 更多>