




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、這個(gè)程序完成的功能為:使用msp430f5529在12864上串行顯示 GY-521, MPU605所測(cè)量的角度。在IAR親測(cè)成功。注意:我只給出了C文件,h文件自己去建立就好了。/* 主函數(shù) */#include #include stdio.h#include math.h#include 6050.h#include LCD12864.h void Delays( uchar i) unsigned int j; while(i-)j=2000;while(j-);void main(void)關(guān)閉看門狗串口發(fā)送緩存WDTCTL = WDTPW + WDTHOLD; / char sum
2、110,sum210,sum310; /float a_x,a_y,a_z; int_port() ;/ lcdinit();InitMPU6050(); / display(1,1, display(2,1, display(3,1, while(1) / Delays(2);管腳初始化角度角度角度初始化模塊X:);Y:);Z:);I;,僅供參考a_x = mpu6050_Angle(2);a_y = mpu6050_Angle(1);將測(cè)量?jī)A角值轉(zhuǎn)換為字符串a(chǎn)_z = mpu6050_Angle(0); sprintf(sum1,%.2f,a_x); / sprintf(sum2,%.2f
3、,a_y);sprintf(sum3,%.2f,a_z);display(1,4,sum1);display(2,4,sum2);display(3,4,sum3);/*6050IIC*/* *文件名:Mpu-6050.c* *編寫者:黃建軍* *描 述:三軸加速度,三軸陀螺儀傳感器Mpu-6050的驅(qū)動(dòng)程序,此處用于 149系歹U。* * 注意-此處MCLK 8Mhz* * 版本:2013-6 V1.0* */ #include msp430f5529.h#include mytype.h#include 6050.hstatic void I2C_Start();static void I
4、2C_Stop();static void I2C_SendACK(uchar ack);static uchar I2C_RecvACK();static void I2C_SendByte(uchar dat);static uchar I2C_RecvACK();short accData3=0;/*/I2C起始信號(hào)/* void I2C_Start() MPU_SCL_OUT(); SCL 設(shè)置為輸出MPU_SDA_OUT(); SDA 設(shè)置為輸出MPU_SDA_H(); /拉高數(shù)據(jù)線MPU_SCL_H(); /拉高時(shí)鐘線DELAY_US(5); /延時(shí)MPU_SDA_L(); /產(chǎn)生
5、下降沿DELAY_US(5); /延時(shí)MPU_SCL_L(); /拉低時(shí)鐘線*/I2C停止信號(hào)*void I2C_Stop() MPU_SCL_OUT(); SCL設(shè)置為輸出MPU_SDA_OUT(); SDA設(shè)置為輸出MPU_SDA_L();/拉低數(shù)據(jù)線MPU_SCL_H();/拉高時(shí)鐘線DELAY_US(5);/延時(shí)MPU_SDA_H(); /產(chǎn)生上升沿DELAY_US(5);/延時(shí)/*/I2C發(fā)送應(yīng)答信號(hào)/ 入口參數(shù):ack (0:ACK 1:NAK)*void I2C_SendACK(uchar ack)MPU_SCL_OUT(); SCL MPU_SDA_OUT(); SDA if(
6、ack)MPU_SDA_H();else設(shè)置為輸出設(shè)置為輸出MPU_SDA_L();/ SDA = ack;/MPU_SCL_H();/DELAY_US(5);/MPU_SCL_L();/DELAY_US(5);/*/I2C接收應(yīng)答信號(hào) *寫應(yīng)答信號(hào)拉高時(shí)鐘線延時(shí)拉低時(shí)鐘線延時(shí)uchar I2C_RecvACK()uchar cy;MPU_SCL_OUT(); SCL設(shè)置為輸出MPU_SDA_IN(); SDA設(shè)置為輸入MPU_SCL_H();/拉高時(shí)鐘線DELAY_US(5);/延時(shí)if(MPU_SDA_DAT() cy=1; else cy=0; / cy = SDA;/讀應(yīng)答信號(hào)MPU_
7、SCL_L();/拉低時(shí)鐘線DELAY_US(5);/延時(shí)MPU_SDA_OUT(); / SDA設(shè)置為輸出return cy;*/向I2C總線發(fā)送一個(gè)字節(jié)數(shù)據(jù)/*void I2C_SendByte(uchar dat) uchar i;MPU_SCL_OUT(); SCL 設(shè)置為輸出MPU_SDA_OUT(); SDA 設(shè)置為輸出位計(jì)數(shù)器送數(shù)據(jù)口拉高時(shí)鐘線延時(shí)拉低時(shí)鐘線延時(shí)for (i=0; i8; i+)8if(dati)&0x80)MPU_SDA_H(); else MPU_SDA_L();/ SDA = cy; / MPU_SCL_H();/DELAY_US(5);/MPU_SCL_L
8、();/DELAY_US(5);/I2C_RecvACK(); * /從I2C總線接收一個(gè)字節(jié)數(shù)據(jù) /*uchar I2C_RecvByte() uchar i;uchar dat = 0,cy;MPU_SCL_OUT(); SCL設(shè)置為輸出MPU_SDA_OUT(); SDA設(shè)置為輸出MPU_SDA_H(); 使能內(nèi)部上拉,準(zhǔn)備讀取數(shù)據(jù),MPU_SDA_IN(); SDA 設(shè)置為輸入,準(zhǔn)備向主機(jī)輸入數(shù)據(jù)for (i=0; i8; i+)/8位計(jì)數(shù)器dat = 1;MPU_SCL_H();/拉高時(shí)鐘線DELAY_US(5); /延時(shí)if(MPU_SDA_DAT()cy=1;elsecy=0;d
9、at |= cy; /讀數(shù)據(jù)MPU_SCL_L();DELAY_US(5);MPU_SDA_OUT(); return dat;/拉低時(shí)鐘線延時(shí)*/向I2C設(shè)備寫入一個(gè)字節(jié)數(shù)據(jù)*void ByteWrite6050(uchar REG_Address,uchar REG_data) I2C_Start();/I2C_SendByte(SlaveAddress); /I2C_SendByte(REG_Address); /I2C_SendByte(REG_data); /I2C_Stop(); /起始信號(hào)發(fā)送設(shè)備地址+寫信號(hào) 內(nèi)部寄存器地址,內(nèi)部寄存器數(shù)據(jù), 發(fā)送停止信號(hào)/*/從I2C設(shè)備讀取一
10、個(gè)字節(jié)數(shù)據(jù)*uchar ByteRead6050(uchar REG_Address) uchar REG_data;I2C_Start();/I2C_SendByte(SlaveAddress);I2C_SendByte(REG_Address);/I2C_Start();/I2C_SendByte(SlaveAddress+1); /REG_data=I2C_RecvByte(); /I2C_SendACK(1);/I-I2C_Stop();/return REG_data;起始信號(hào)發(fā)送設(shè)備地址+寫信號(hào) 發(fā)送存儲(chǔ)單元地址,從 起始信號(hào)發(fā)送設(shè)備地址+ 讀信號(hào) 讀出寄存器數(shù)據(jù)接收應(yīng)答信號(hào)停止信
11、號(hào)0開始*/合成數(shù)據(jù)*int Get6050Data(uchar REG_Address) char H,L;H=ByteRead6050(REG_Address);L=ByteRead6050(REG_Address+1);return (H=sinx,故乘以1.2適當(dāng)放大*返回參數(shù):測(cè)量的傾角值*傳入?yún)?shù):dir-需要測(cè)量的方向*ACCEL_XOUT - X力向*ACCEL_YOUT - Y力向*ACCEL_ZOUT - Z方向*/ -: i jr-T * j ufloat Mpu6050AccelAngle(uchar dir)float accel_agle;/測(cè)量的傾角值float
12、result; /測(cè)量值緩存變量result = (float)Get6050Data(dir); 測(cè)量當(dāng)前方向的加速度值,轉(zhuǎn)換為浮點(diǎn)數(shù)accel_agle = (result + MPU6050_ZERO_ACCELL); 去除零點(diǎn)偏移,計(jì)算得到角度(弧度)/ accel_agle = accel_agle*1.2*180/3.14;/弧度轉(zhuǎn)換為度一 _ j I Ireturn accel_agle; /返回測(cè)量值/* * 函數(shù)名 :float Mpu6050GyroAngle(int8 dir)* *函數(shù)功能:輸出陀螺儀測(cè)量的傾角加速度* *范圍為 2000deg/s 時(shí),換算關(guān)系:16.
13、4 LSB/(deg/s)* *返回參數(shù):測(cè)量的傾角加速度值*傳入?yún)?shù):dir -需要測(cè)量的方向*GYROXOUT - X*GYROYOUT-Y*GYROZOUT - Z軸方向軸方向軸方向*/float Mpu6050GyroAngle(uchar dir) float gyro_angle;/ float Angle_gy;gyro_angle = (float)Get6050Data(dir); /檢測(cè)陀螺儀的當(dāng)前值gyro_angle = -(gyro_angle + MPU6050_ZERO_GYRO)/16.4; /去除零點(diǎn)偏移,計(jì)算角速度值,負(fù)號(hào)為方向處理/ Angle_gy +=
14、 gyro_angle*0.005; return gyro_angle; 返回測(cè)量值/采樣10次去掉兩個(gè)最大最小值求平均void MPU6050ReadAcc()int i=0,j=0;int x_buf10;int y_buf10;int z_buf10;int temp=0;long temp2=0;for(i=0;i10;i+)x_bufi = Get6050Data(ACCEL_XOUT); y_bufi = Get6050Data(ACCEL_YOUT);z_bufi = Get6050Data(ACCEL_ZOUT);I - - I . /for(i=0;i9;i+)for(j=
15、i+1;jx_bufi)產(chǎn) L 一temp=x_bufj; i | 一 .、 jx_bufj=x_bufi; x_bufi=temp;if(y_bufjy_bufi)temp=y_bufj; y_bufj=y_bufi; y_bufi=temp;if(z_bufjz_bufi)temp=z_bufj; z_bufj=z_bufi; z_bufi=temp;temp2=0;for(i=2;i8;i+)temp2=temp2+x_bufi;accData0=temp2/6;temp2=0;for(i=2;i8;i+)temp2=temp2+y_bufi;accData1=temp2/6;temp2
16、=0;for(i=2;i8;i+)temp2=temp2+z_bufi; I XaccData2=temp2/6;/得到角度/x,y,z:x,y,z方向的重力加速度分量(不需要單位,直接數(shù)值即可)/dir:要獲得白角度.0,與x軸的角度;1,與Y軸的角度;2,與Z軸的角度./返回值:角度值.單位0.1 .float mpu6050_Angle(uchar dir) / y- 8 0float temp,x,y,z;float res=0;MPU6050ReadAcc(); 得至U accData口 值x = accData0;V i |.、jy = accData1;z = accData2;
17、switch(dir)case 0: 與自然Z軸的角度temp=sqrt(x*x+y*y)/z;res=atan(temp);break;case 1: 與自然X軸的角度temp=x/sqrt(y*y+z*z);res=atan(temp);break;case 2: 與自然Y軸的角度temp=y/sqrt(x*x+z*z);res=atan(temp);break;設(shè)置平放的基礎(chǔ)角度值return (res*180/3.14)+0;/*LCD12864*/#include #include LCD12864.h#define uchar unsigned char#define uint u
18、nsigned intextern unsigned char ADS1256_buf9;僅供參考void int_port(void) /P2SEL&=BIT4; /P2.4P2DIR|=BIT4;P2OUT&=BIT4;P2SEL&=BIT5; /P2.5P2DIR|=BIT5;P2OUT&=BIT5;管腳初始化模才S SID,設(shè)置為i/o 口輸出方向模才S SCLK設(shè)置為i/o 口輸出方向/*名稱:delay()*輸入:t輸出:無*/void delay(uint t) 延時(shí)函數(shù) /粗略延時(shí),滿足時(shí)序要求uint i,j;for(i=0; it; i+)for(j=0; j10; j+)
19、;名稱 功能 輸入 輸出/* sendbyte()按照液晶的串口通信協(xié)議,發(fā)送數(shù)據(jù)zdata無*/數(shù)據(jù)傳送函數(shù)void sendbyte(uchar zdata) / uchar code_seg7;uchar serial_clk;uchar serial_shift;code_seg7=zdata;serial_shift=0x80;for(serial_clk=0; serial_clk1; /準(zhǔn)備發(fā)送下一位數(shù)據(jù)/* 名稱:write_com()* 功能:寫串口指令* 輸入:cmdcode*輸出:無*/ I X Avoid write_com(unsigned char cmdcode)
20、 /寫命令函數(shù)/ 串口控制格式(11111AB0)/A數(shù)據(jù)方向控制,A=H時(shí)讀,A=L時(shí)寫/B數(shù)據(jù)類型選擇,B=H時(shí)為顯示數(shù)據(jù),B=L時(shí)為命令sendbyte(0xf8); /MCU 向 LCD發(fā)命令sendbyte(cmdcode & 0xf0);/ 發(fā)高四位數(shù)據(jù)(數(shù)據(jù)格式 D7D6D5D4_0000)sendbyte(cmdcode 4) & 0xf0);/發(fā)低四位數(shù)據(jù)(數(shù)據(jù)格式 D3D2D1D0_0000)delay(2); / 延時(shí)等待/* 名稱:write_data()* 功能:寫串口數(shù)據(jù)* 輸入:Dispdata* 輸出:無*/ void write_data(uchar Disp
21、data)/寫數(shù)據(jù)函數(shù)sendbyte(0xfa); /MCU 向 LCD發(fā)數(shù)據(jù)sendbyte(Dispdata & 0xf0); /發(fā)高四位數(shù)據(jù)sendbyte(Dispdata 4) & 0xf0);/發(fā)低四位數(shù)據(jù)delay(2);/* 名稱:lcdinit()* 功能:初始化函數(shù)* 輸入:cmdcode* 輸出:無*僅供參考void lcdinit() /LCDdelay(20000); / write_com(0x30); delay(50); /write_com(0x0c); / delay(50);write_com(0x01); / delay(50);write_com(0x06); / delay(50);初始化復(fù)位等待(內(nèi)部自帶上電復(fù)位電路)功能設(shè)定:基本指令集操作延時(shí)等待整體顯示,關(guān)游標(biāo)清屏入口設(shè)置/*函數(shù)名稱:LCD_1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)設(shè)備配置要點(diǎn)試題及答案
- 2025屆湖北省孝感市漢川市數(shù)學(xué)八下期末監(jiān)測(cè)試題含解析
- 行政法學(xué)高效學(xué)習(xí)試題及答案策略
- 2025軟考網(wǎng)絡(luò)管理員技巧與試題
- 高考數(shù)學(xué)復(fù)習(xí)資料試題及答案
- 經(jīng)營(yíng)風(fēng)險(xiǎn)管理計(jì)劃
- 部門目標(biāo)與個(gè)人目標(biāo)的協(xié)同計(jì)劃
- 新學(xué)年教學(xué)工作總體規(guī)劃計(jì)劃
- 策劃班級(jí)知識(shí)分享會(huì)計(jì)劃
- 內(nèi)部審核對(duì)生產(chǎn)計(jì)劃的支持
- 2025-2030年中國(guó)煤電行業(yè)市場(chǎng)深度發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025年醫(yī)院感染控制試題及答案
- 2025年黃山市祁門文化旅游發(fā)展集團(tuán)有限公司招聘5人筆試參考題庫附帶答案詳解
- 2025-2030中國(guó)植物蛋白行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025年內(nèi)蒙古自治區(qū)赤峰市通遼市中考二模歷史試題(含答案)
- 馬工程西方經(jīng)濟(jì)學(xué)(精要本第三版)教案
- 2025年北京龍雙利達(dá)知識(shí)產(chǎn)權(quán)代理有限公司招聘筆試參考題庫含答案解析
- 2025至2030年中國(guó)玻璃鋼夾砂給水管道市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 重慶財(cái)經(jīng)學(xué)院專職輔導(dǎo)員招聘真題2024
- 你好紅領(lǐng)巾課件
- 八年級(jí)道德與法治下冊(cè)《國(guó)家監(jiān)察機(jī)關(guān)》
評(píng)論
0/150
提交評(píng)論