版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、這個(gè)程序完成的功能為:使用msp430f5529在12864上串行顯示gy-521,mpu6050所測量的角度。在iar親測成功。注意:我只給出了c文件 ,h文件自己去建立就好了。/*主函數(shù)*/#include #include stdio.h#include math.h#include 6050.h#include lcd12864.hvoid delays( uchar i) unsigned int j; while(i-) j=2000; while(j-); void main(void) wdtctl = wdtpw + wdthold; / 關(guān)閉看門狗 char sum110,
2、sum210,sum310; / 串口發(fā)送緩存 float a_x,a_y,a_z; int_port() ;/管腳初始化 lcdinit(); initmpu6050(); / 初始化模塊 display(1,1,角度x:); display(2,1,角度y:); display(3,1,角度z:); while(1) / delays(2); a_x = mpu6050_angle(2); a_y = mpu6050_angle(1); a_z = mpu6050_angle(0); sprintf(sum1,%.2f,a_x); / 將測量傾角值轉(zhuǎn)換為字符串 sprintf(sum2,%
3、.2f,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系列。* 注意-此處 mclk:8mhz*版 本:2013-6 v1.0*/#include msp430f5529.h/#include mytype.h#include 6050.hstatic void i2c_start();static void i2c_st
4、op();static void i2c_sendack(uchar ack);static uchar i2c_recvack();static void i2c_sendbyte(uchar dat);static uchar i2c_recvack();short accdata3=0;/*/i2c起始信號/*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停止信號/*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)答信號/入口參數(shù):ack (0:ack 1:nak)/*void i2c_sendack(uchar ack) mpu_scl_out(); / scl設(shè)
6、置為輸出 mpu_sda_out(); / sda設(shè)置為輸出 if(ack) mpu_sda_h(); else mpu_sda_l();/ sda = ack; /寫應(yīng)答信號 mpu_scl_h(); /拉高時(shí)鐘線 delay_us(5); /延時(shí) mpu_scl_l(); /拉低時(shí)鐘線 delay_us(5); /延時(shí)/*/i2c接收應(yīng)答信號/*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
7、_sda_dat() cy=1; else cy=0; / cy = sda; /讀應(yīng)答信號 mpu_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è)置為輸出 for (i=0; i8; i+) /8位計(jì)數(shù)器 if(dati)&0x80) mpu_sda_h(); else mpu_sda_l();
8、 / sda = cy; /送數(shù)據(jù)口 mpu_scl_h(); /拉高時(shí)鐘線 delay_us(5); /延時(shí) mpu_scl_l(); /拉低時(shí)鐘線 delay_us(5); /延時(shí) 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;
9、i8; i+) /8位計(jì)數(shù)器 dat = 1; mpu_scl_h(); /拉高時(shí)鐘線 delay_us(5); /延時(shí) if(mpu_sda_dat() cy=1; else cy=0; dat |= cy; /讀數(shù)據(jù) mpu_scl_l(); /拉低時(shí)鐘線 delay_us(5); /延時(shí) mpu_sda_out(); return dat;/*/向i2c設(shè)備寫入一個(gè)字節(jié)數(shù)據(jù)/*void bytewrite6050(uchar reg_address,uchar reg_data) i2c_start(); /起始信號 i2c_sendbyte(slaveaddress); /發(fā)送設(shè)備地址
10、+寫信號 i2c_sendbyte(reg_address); /內(nèi)部寄存器地址, i2c_sendbyte(reg_data); /內(nèi)部寄存器數(shù)據(jù), i2c_stop(); /發(fā)送停止信號/*/從i2c設(shè)備讀取一個(gè)字節(jié)數(shù)據(jù)/*uchar byteread6050(uchar reg_address)uchar reg_data;i2c_start(); /起始信號i2c_sendbyte(slaveaddress); /發(fā)送設(shè)備地址+寫信號i2c_sendbyte(reg_address); /發(fā)送存儲單元地址,從0開始i2c_start(); /起始信號i2c_sendbyte(slave
11、address+1); /發(fā)送設(shè)備地址+讀信號reg_data=i2c_recvbyte(); /讀出寄存器數(shù)據(jù)i2c_sendack(1); /接收應(yīng)答信號i2c_stop(); /停止信號return reg_data;/*/合成數(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ù):測量的傾角值*傳入?yún)?shù):dir - 需要測量的方向* accel_xout - x方向* ac
12、cel_yout - y方向* accel_zout - z方向*/float mpu6050accelangle(uchar dir) float accel_agle;/ 測量的傾角值 float result; / 測量值緩存變量 result = (float)get6050data(dir); / 測量當(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)換為度 return accel_a
13、gle; / 返回測量值/*函數(shù)名 :float mpu6050gyroangle(int8 dir)*函數(shù)功能:輸出陀螺儀測量的傾角加速度* 范圍為2000deg/s時(shí),換算關(guān)系:16.4 lsb/(deg/s)*返回參數(shù):測量的傾角加速度值*傳入?yún)?shù):dir - 需要測量的方向* gyro_xout - x軸方向* gyro_yout - y軸方向* gyro_zout - z軸方向*/float mpu6050gyroangle(uchar dir) float gyro_angle;/ float angle_gy; gyro_angle = (float)get6050data(di
14、r); / 檢測陀螺儀的當(dāng)前值 gyro_angle = -(gyro_angle + mpu6050_zero_gyro)/16.4; /去除零點(diǎn)偏移,計(jì)算角速度值,負(fù)號為方向處理 / angle_gy += gyro_angle*0.005; return gyro_angle; / 返回測量值/采樣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(ac
15、cel_xout);y_bufi = get6050data(accel_yout);z_bufi = get6050data(accel_zout);for(i=0;i9;i+)for(j=i+1;jx_bufi)temp=x_bufj;x_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;accda
16、ta0=temp2/6;temp2=0;for(i=2;i8;i+)temp2=temp2+y_bufi;accdata1=temp2/6;temp2=0;for(i=2;i8;i+)temp2=temp2+z_bufi;accdata2=temp2/6;/得到角度/x,y,z:x,y,z方向的重力加速度分量(不需要單位,直接數(shù)值即可)/dir:要獲得的角度.0,與x軸的角度;1,與y軸的角度;2,與z軸的角度./返回值:角度值.單位0.1.float mpu6050_angle(uchar dir)float temp,x,y,z; float res=0; mpu6050readacc()
17、; /得到accdata值 x = accdata0; y = accdata1; z = accdata2; 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; return (res*180/3.14)+0;/設(shè)置平放的基礎(chǔ)角度值/*lcd12864*/#
18、include #include lcd12864.h#define uchar unsigned char#define uint unsigned intextern unsigned char ads1256_buf9;void int_port(void) /管腳初始化 p2sel&=bit4; /p2.4模擬sid,設(shè)置為i/o口輸出方向 p2dir|=bit4; p2out&=bit4; p2sel&=bit5; /p2.5模擬sclk,設(shè)置為i/o口輸出方向 p2dir|=bit5; p2out&=bit5; /* 名稱 : delay()* 輸入 : t* 輸出 : 無*/vo
19、id delay(uint t) /延時(shí)函數(shù) /粗略延時(shí),滿足時(shí)序要求 uint i,j; for(i=0; it; i+) for(j=0; j10; j+);/* 名稱 : sendbyte()* 功能 : 按照液晶的串口通信協(xié)議,發(fā)送數(shù)據(jù)* 輸入 : zdata* 輸出 : 無*/void sendbyte(uchar zdata) /數(shù)據(jù)傳送函數(shù) uchar code_seg7; uchar serial_clk; uchar serial_shift; code_seg7=zdata; serial_shift=0x80; for(serial_clk=0; serial_clk1;
20、 /準(zhǔn)備發(fā)送下一位數(shù)據(jù) /* 名稱 : write_com()* 功能 : 寫串口指令* 輸入 : cmdcode* 輸出 : 無*/void write_com(unsigned char cmdcode) /寫命令函數(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ù)格式d
21、3d2d1d0_0000) delay(2); /延時(shí)等待/* 名稱 : write_data()* 功能 : 寫串口數(shù)據(jù)* 輸入 : dispdata* 輸出 : 無*/void write_data(uchar dispdata)/寫數(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() /lcd初始化 delay(20000); /復(fù)位等待(內(nèi)部自帶上電復(fù)位電路),時(shí)間較長 write_com(0x30); /功能設(shè)定:基本指令集操作 delay(50); /延時(shí)等待 write_com(0x0c); /整體顯示,關(guān)游標(biāo) delay(50); write_com(0x01); /清屏 delay(50); write_com(0x06); /入口設(shè)置 delay(50);/* 函數(shù)名稱 : lcd_12864_address_s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度戶外廣告招牌創(chuàng)意設(shè)計(jì)及廣告策劃合同
- 2025年度大數(shù)據(jù)平臺股權(quán)整體轉(zhuǎn)讓與數(shù)據(jù)安全服務(wù)合同
- 2025年度羊糞有機(jī)肥料生產(chǎn)及銷售合同
- 2025年度廣告牌租賃期滿后的回收與處理合同
- 20251 采購中心合同審批管理辦法
- 2025招商運(yùn)營合作合同
- 2025年度儲能電站項(xiàng)目合同能源管理運(yùn)維與維護(hù)服務(wù)合同3篇
- 2025年度國際研討會(huì)場地租賃服務(wù)合同
- 2025年度品牌授權(quán)合同續(xù)簽申請文件
- 2025年度旅游節(jié)會(huì)務(wù)會(huì)展接待服務(wù)合同
- 2025-2030全球廢棄食用油 (UCO) 轉(zhuǎn)化為可持續(xù)航空燃料 (SAF) 的催化劑行業(yè)調(diào)研及趨勢分析報(bào)告
- 北京市北京四中2025屆高三第四次模擬考試英語試卷含解析
- 2024年快遞行業(yè)無人機(jī)物流運(yùn)輸合同范本及法規(guī)遵循3篇
- 傷殘撫恤管理辦法實(shí)施細(xì)則
- 2024-2030年中國產(chǎn)教融合行業(yè)市場運(yùn)營態(tài)勢及發(fā)展前景研判報(bào)告
- 2024年微生物檢測試劑行業(yè)商業(yè)計(jì)劃書
- 高中英語選擇性必修一單詞表
- 物業(yè)公司介紹
- (正式版)SHT 3551-2024 石油化工儀表工程施工及驗(yàn)收規(guī)范
- 【永輝超市公司員工招聘問題及優(yōu)化(12000字論文)】
- 中國直銷發(fā)展四個(gè)階段解析
評論
0/150
提交評論