下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精心整理这个程序完成的功能为:使用msp430f5529在12864上串行显示GY-521, MPU6050所测量的 角度。在IAR亲测成功。注意:我只给出了 C文件,h文件自己去建立就好了。 /* 主函数 */#in cludevms p430f5529.h>#i nclude"stdio.h"#i nclude"math.h"#i nclude"6050.h"#i nclude"LCD12864.h"voidDelays(uchan)un sig nedintj;while(i-)j=2000;while
2、(j-);Ivoidmain(void).,WDTCTL=WDTPW+WDTHOLD;/ 关闭看门狗 Charsum110,sum210,sum310;/串 口发送缓存 floata_x,a_y,a_z;in t_port();/管脚初始化lcdi ni t();-Ini tM PU6050();/ 初始化模块'display(1,1,"角度 X:");display(2,1,"角度 丫:");display(3,1,"角度 Z:");while(1) ,-/Delays (2);a_x=mp u6050_A ngle(2);
3、a_y=mp u6050_A ngle(1);a_z=mp u6050_A ngle(0);sprin tf(sum1,"%.2f",a_x);/将测量倾角值转换为字符串sprin tf(sum2,"%.2f",a_y);sprin tf(sum3,"%.2f",a_z);dis play(1,4,sum1);dis play(2,4,sum2);dis play(3,4,sum3);精心整理/*6050IIC*/* * 文件名:MpU-6050.C*编写者:黄建军*描述:三轴加速度,三轴陀螺仪传感器 Mpu-6050的驱动程序,此处
4、用于149系列。*注意-此处MCLK : 8Mhz* 版本:2013-6V1.0*/#i nclude"ms p430f5529.h"/#in clude"myty pe.h"#i nclude"6050.h" staticvoidl2C_Start(); staticvoidl2C_Sto p(); staticvoidI2C_Se ndACK(ucharack); staticucharl2C_RecvACK(); staticvoidI2C_Se ndByte(uchardat); staticucharI2C_RecvACK(
5、); shortaccData3=0;/* /I2C起始信号/* voidI2C_Start()MPU_SCL_OUT();/SCL 设置为输出 MPU_SDA_OUT();/SDA 设置为输出 MP U_SDA_H();/拉高数据线MP U_SCL_H();/拉高时钟线' DELAY_US(5);/ 延时 MPU_SDA_L();/产生下降沿 DELAY_US(5);/ 延时 MP U_SCL_L();/拉低时钟线 - /* /I2C停止信号/*voidI2C_Sto p()MPU_SCL_OUT();/SCL 设置为输出 MPU_SDA_OUT();/SDA 设置为输出 MPU_S
6、DA_L();/拉低数据线 MP U_SCL_H();/拉高时钟线 DELAY_US(5);/ 延时MP U_SDA_H();/产生上升沿 DELAY_US(5);/ 延时精心整理* /I2C发送应答信号入口参数:ack(0:ACK1:NAK)/*voidl2C_Se ndACK(ucharack)"MPU_SCL_OUT();/SCL 设置为输出MPU_SDA_OUT();/SDA 设置为输出 if(ack)MP U_SDA_H();elseMP U_SDA_L();/SDA=ack;/写应答信号MP U_SCL_H();/拉高时钟线DELAY_US(5);/ 延时MP U_SCL
7、_L();/拉低时钟线DELAY_US(5);/ 延时/* /I2C接收应答信号/*ucharI2C_RecvACK() "ucharcy;MPU_SCL_OUT();/SCL 设置为输出MPU_SDA_IN();/SDA 设置为输入MP U_SCL_H();/拉高时钟线 DELAY_US(5);/ 延时 if(MP U_SDA_DAT()' -cy=1;Ielse-cy=0;'/cy=SDA;/读应答信号MP U_SCL_L();/拉低时钟线DELAY_US(5);/ 延时MPU_SDA_OUT();/SDA 设置为输出 returncy;/*向I2C总线发送一个字
8、节数据/*voidI2C_Se ndByte(uchardat)"精心整理uchari;MPU_SCL_OUT();/SCL 设置为输出MPU_SDA_OUT();/SDA 设置为输出 for(i=0;iv8;i+)/8 位计数器if(datvvi)&0x80)MP U_SDA_H();elseMP U_SDA_L();/SDA=cy;/ 送数据口MP U_SCL_H();/拉高时钟线DELAY_US(5);/ 延时MP U_SCL_L();/拉低时钟线DELAY_US(5);/ 延时,I2C_RecvACK();: :. /*/从 I2C总线接收一个字节数据:/*uchar
9、l2C_RecvByte()丨uchari;uchardat=0,cy;MPU_SCL_OUT();/SCL 设置为输出MPU_SDA_OUT();/SDA 设置为输出MPU_SDA_H();/使能内部上拉,准备读取数据,MPU_SDA_IN();/SDA设置为输入,准备向主机输入数据 for(i=0;i<8;i+)/8 位计数器 -dat<<=1;MP U_SCL_H();/拉高时钟线DELAY_US(5);/ 延时if(MP U_SDA_DAT()cy=1;elsecy=0;dat|=cy;/读数据MP U_SCL_L();/拉低时钟线精心整理DELAY_US(5);/
10、延时MP U_SDA_OUT();returndat;/*向I2C设备写入一个字节数据/*voidByteWrite6050(ucharREG_Address,ucharREG_data) " "I2C_Start();/ 起始信号I2C_Se ndByte(SlaveAddress);/发送设备地址 + 写信号I2C_Se ndByte(REG_Address);/内部寄存器地址,I2C_Se ndByte(REG_data);/内部寄存器数据,I2C_Sto p();/发送停止信号/*/从 I2C设备读取一个字节数据/*ucharByteRead6050(ucharRE
11、G_Address)'- "ucharREG_data;I2C_Start()?/ 起始信号I2C_Se ndByte(SlaveAddress);/发送设备地址 + 写信号I2C_Se ndByte(REG_Address);/发送存储单元地址,从 0开始 I2C_Start();/ 起始信号I2C_Se ndByte(SlaveAddress+1);/发送设备地址 + 读信号REG_data=l2C_RecvByte();/读出寄存器数据I2C_Se ndACK(1);/接收应答信号I2C_Sto p();/ 停止信号 returnREG_data;I/*合成数据-/*i
12、n tGet6050Data(ucharREG_Address)charH,L;H=ByteRead6050(REG_Address);L=ByteRead6050(REG_Address+1);return(H<<8)+L;/ 合成数据/*初始化MPU6050/*voidI nitMP U6050()精心整理ByteWrite6050(PWR_MGMT_1,0x00);/ 解除休眠状态ByteWrite6050(S MP LRT_DIV,0x07);/ 陀螺仪采样率设置(125HZ)ByteWrite6050(C0NFIG,0x06);/低通滤波器频率设置(5HZ)ByteWri
13、te6050(GYR0_C0NFIG,0x18);/陀螺仪自检及检测范围设置(不自 检,16.4LSB/DBS/S)ByteWrite6050(ACCEL_CONFIG,0x01);/加速计自检、测量范围及高通滤波频率(不自检, 2G(16384LSB/G),5Hz)/* 函数名:floatMpu6050AccelAngle(int8dir)*函数功能:输出加速度传感器测量的倾角值*范围为2g时,换算关系:16384LSB/g*角度较小时,x=sinx得到角度(弧度),deg=rad*180/3.14*因为x>=sinx,故乘以1.2适当放大*返回参数:测量的倾角值*传入参数:dir-需
14、要测量的方向*ACCEL_XOUT-X 方向,*ACCEL_YOUT-Y 方向,''*ACCEL_ZOUT-Z 方向'*/floatM pu6050AccelA ngle(uchardir)floataccel_agle;/测量的倾角值_丨floatresult;/测量值缓存变量result=(float)Get6050Data(dir);/测量当前方向的加速度值,转换为浮点数 accel_agle=(result+MPU6050_ZERO_ACCELL);/去除零点偏移,计算得到角度(弧度) /accel_agle=accel_agle*1.2*180/3.14;/弧
15、度转换为度returnaccel_agle;/返 回测量值/* - ' '* 函数名:floatMpu6050GyroAngle(int8dir)*函数功能:输出陀螺仪测量的倾角加速度* 范围为 2000deg/s时,换算关系:16.4LSB/(deg/s)*返回参数:测量的倾角加速度值*传入参数:dir-需要测量的方向*GYRO_XOUT-X 轴方向*GYRO_YOUT-Y 轴方向*GYRO_ZOUT-Z 轴方向*/floatM pu6050GyroA ngle(uchardir) floatgyro_a ngle;/floatA ngle_gy;精心整理gyro_a ngl
16、e=(float)Get6050Data(dir);/检测陀螺仪的当前值gyro_angle=-(gyro_angle+MPU6050_ZER0_GYR0)/16.4;/去除零点偏移,计算角速度值,负号为 方向处理/An gle_gy+=gyro_a ngle*0.005;return gyro_a ngle;/返 回测量值采样10次去掉两个最大最小值求平均void MP U6050ReadAcc()in ti=0,j=0;in tx_buf10;in ty_buf10;in tz_buf10;in tte mp=0;Ion gte mp 2=0;'for(i=0;i<10;i+
17、)-x_bufi=Get6050Data(ACCEL_XOUT);y_bufi=Get6050Data(ACCEL_YOUT);, '乙 bufi=Get6050Data(ACCEL_ZOUT);'for(i=0;i<9;i+)for(j=i+1;jv10;j+)if(x_bufj>x_bufi) _temp=x_bufj; x_bufj=x_bufi;_x_bufi=te mp; if(y_bufj>y_bufi) temp=y_bufj; y_bufj=y_bufi; y_bufi=te mp;if(z_bufj>z_bufi) temp=z_buf
18、j; 乙 bufj=乙bufi; z_bufi=te mp;"temp 2=0;for(i=2;i<8;i+)精心整理temp 2=te mp 2+x_bufi; " accDataO=te mp 2/6;temp 2=0;for(i=2;i<8;i+)temp 2=te mp 2+y_bufi; accData1=te mp 2/6;temp 2=0;for(i=2;i<8;i+)temp 2=te mp 2+z_bufi; - accData2=te mp 2/6;得到角度1/x,y,z:x,y,z方向的重力加速度分量(不需要单位,直接数值即可)/di
19、r:要获得的角度.0,与 x轴的角度;1,与丫轴的角度;2,与 Z轴的角度. /返回值:角度值单位0.1° .floatm pu6050_A ngle(uchardir) "floattem p, x,y, z;floatres=0;_'MPU6050ReadAcc();/得到 accData值 x=accData0;y=accData1;z=accData2;'switch(dir)-'case。:/与自然Z轴的角度temp 二sqrt(x*x+y*y)/z;res=ata n(tem p); break;'easel:/与自然X轴的角度t
20、emp二 x/sqrt(y*y+z*z);res=ata n(te mp); break;case2:/与自然丫轴的角度temp=y /sqrt(x*x+z*z);res=ata n(tem p);break;return(res*180/3.14)+0;/设置平放的基础角度值 /*Lcdi2864*/精心整理#i ncludevms p430f5529.h>#in clude"LCD12864.h"#defi neuchar un sig nedchar#defi neuintun sig nedintextern un sig nedcharADS1256_buf
21、9;voidi nt_port(void)/ 管脚初始化P2SEL&=BIT4;/P2.4模拟SID,设置为i/o 口输出方向P 2DIR|=BIT4;P 2OUT&=BIT4;P2SEL&=BIT5;/P2.5 模拟 SCLK,设置为 i/o 口输出方向P 2DIR|=BIT5;P 2OUT&=BIT5;/* 名称:delay()*输入:t*输出:无'i*/voiddelay(ui ntt)/ 延时函数/粗略延时,满足时序要求uin ti,j;for(i=0;i<t;i+)for(j=0;jv10;j+);/* 名称:se ndbyteO*功能:
22、按照液晶的串口通信协议,发送数据* 输入:zdata_*输出:无*/voidse ndbyte(ucharzdata)数 据传送函数 - ucharcode_seg7;ucharserialClk; ucharserialShift;code_seg7=zdata;serial_shift=0x80; for(serial_clk=0;serial_clk<8;serial_clk+)" " " if(code_seg7&senal_shift)" "P2OUT|=BIT4;/SID 为 1else精心整理P20UT&=B
23、IT4;/SID 为 0P20UT&=BIT5;/产生时钟信号下沿P 2OUT|=BIT5;/产生时钟信号上沿serial_shift=serial_shift>>1;/ 准备发送下一位数据/* 名称:write_com()*功能:写串口指令* 输入:cmdcode*输出:无*/ voidwrite_com(u nsig nedcharcmdcode)/写 命令函数 - 串口控制格式(11111AB0)-/A数据方向控制,A=H时读,A=L时写/B数据类型选择,B=H时为显示数据,B=L时为命令sendbyte(0xf8);/MCU 向 LCD 发命令'sendby
24、te(cmdcode&0xf0);/发高四位数据(数据格式 D7D6D5D4_0000)sendbyte(cmdcode<<4)&0xf0);/发低四位数据(数据格式 D3D2D1D0_0000) delay(2);/延 时等待/* 名称:write_data()丨*功能:写串口数据* 输入:Dis pdata*输出:无.*/ voidwrite_data(ucharDis pdata)/写 数据函数sendbyte(0xfa);/MCU 向 LCD 发数据sen dbyte(Dis pdata&0 xf0);/发高四位数据se ndbyte(Dis pda
25、tavv4)&0 xf0);/ 发低四位数据 delay(2);'/* 名称:lcdi nit()*功能:初始化函数* 输入:cmdcode*输出:无*/voidlcdinit()/LCD 初始化delay(20000);/复位等待(内部自带上电复位电路),时间较长write_com(0x30);/功能设定:基本指令集操作delay(50);/延 时等待精心整理write_com(OxOc);/整体显示,关游标 delay(50);write_com(0x01);/ 清屏delay(50);write_com(0x06);/ 入口设置 delay(50);/*函数名称:LCD_12864_address_set(ucharx,y)*函数功能:12864地址坐标设置*函数参数:X坐标,丫坐标*函数返回值:无*/vo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年农业品牌化发展前景可行性分析
- 2026年株洲市教育局直属学校面向高校毕业生公开招聘教师备考题库及一套参考答案详解
- 2026年陕西邮政招聘备考题库及完整答案详解
- 2026年中国农业科学院油料作物研究所南方大豆遗传育种创新团队科研助理招聘备考题库及答案详解(夺冠系列)
- 中银国际证券股份有限公司2025年社会招聘备考题库及一套完整答案详解
- 2026年泸州市龙马高中招聘教职工4名备考题库及参考答案详解1套
- 高中体育教学中运动营养学知识在训练中的应用研究课题报告教学研究课题报告
- 2026年中国十五冶金建设集团有限公司招聘备考题库及答案详解一套
- 2026年江阴市云亭中学教师招聘备考题库及完整答案详解一套
- 芜湖市镜湖区改制企业管理办公室2025年公开招聘工作人员备考题库及答案详解一套
- 文心雕龙赏析课件
- 2025中国融通集团信息技术有限公司社会招聘笔试参考试题附答案解析
- 失能老人尊严照护中的精神慰藉策略
- 2026云南中烟工业有限责任公司招聘502人笔试考试参考题库及答案解析
- 2025年无人机林业无人机:森林防火行业应用分析报告
- 区块链知识讲解课件
- 雨课堂学堂在线学堂云军事理论国防大学单元测试考核答案
- 2025年甘肃省酒泉市中级人民法院招聘聘用制司法警察参考模拟试题及答案解析
- 2025中原农业保险股份有限公司招聘67人笔试考试备考试题及答案解析
- 技工学校校长2025年度述职报告
- 仓库-拆除施工方案(3篇)
评论
0/150
提交评论