




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
君悅的三軸陀螺儀MPU6050測試程序。IIC接口,51單片機驅(qū)動,LCD1602同步顯示。硬件原理圖//****************************************//MPU6050IIC測試程序//使用單片機STC89C52//晶振:11.0592M//顯示:LCD1602//編譯環(huán)境KeiluVision2//參考宏晶網(wǎng)站24c04通信程序//功能:顯示加速度計和陀螺儀的10位原始數(shù)據(jù)//時間:2013年3月1日//****************************************#include<REG52.H>#include<math.h>//Keillibrary#include<stdio.h>//Keillibrary#include<INTRINS.H>typedefunsignedcharuchar;typedefunsignedshortushort;typedefunsignedintuint;//****************************************//定義51單片機端口//****************************************#defineDataPortP0 //LCD1602數(shù)據(jù)端口sbitSCL=P1^0; //IIC時鐘引腳定義sbitSDA=P1^1; //IIC數(shù)據(jù)引腳定義sbitLCM_RS=P2^0; //LCD1602命令端口sbitLCM_RW=P2^1; //LCD1602命令端口sbitLCM_EN=P2^2; //LCD1602命令端口//****************************************//定義MPU6050內(nèi)部地址//****************************************#define SMPLRT_DIV 0x19 //陀螺儀采樣率,典型值:0x07(125Hz)#define CONFIG 0x1A //低通濾波頻率,典型值:0x06(5Hz)#define GYRO_CONFIG 0x1B //陀螺儀自檢及測量范圍,典型值:0x18(不自檢,2000deg/s)#define ACCEL_CONFIG 0x1C //加速計自檢、測量范圍及高通濾波頻率,典型值:0x01(不自檢,2G,5Hz)#define ACCEL_XOUT_H 0x3B#define ACCEL_XOUT_L 0x3C#define ACCEL_YOUT_H 0x3D#define ACCEL_YOUT_L 0x3E#define ACCEL_ZOUT_H 0x3F#define ACCEL_ZOUT_L 0x40#define TEMP_OUT_H 0x41#define TEMP_OUT_L 0x42#define GYRO_XOUT_H 0x43#define GYRO_XOUT_L 0x44#define GYRO_YOUT_H 0x45#define GYRO_YOUT_L 0x46#define GYRO_ZOUT_H 0x47#define GYRO_ZOUT_L 0x48#define PWR_MGMT_1 0x6B //電源管理,典型值:0x00(正常啟用)#define WHO_AM_I 0x75 //IIC地址寄存器(默認數(shù)值0x68,只讀)#define SlaveAddress 0xD0 //IIC寫入時的地址字節(jié)數(shù)據(jù),+1為讀取//****************************************//定義類型及變量//****************************************uchardis[4]; //顯示數(shù)字(-511至512)的字符數(shù)組int dis_data; //變量//int Temperature,Temp_h,Temp_l; //溫度及高低位數(shù)據(jù)//****************************************//函數(shù)聲明//****************************************voiddelay(unsignedintk); //延時//LCD相關函數(shù)//****************************************voidWriteDataLCM(uchardataW){ WaitForEnable(); LCM_RS=1;LCM_RW=0;_nop_(); DataPort=dataW;_nop_(); LCM_EN=1;_nop_();_nop_();LCM_EN=0;}//****************************************//LCD1602寫入一個字符//****************************************voidDisplayOneChar(ucharX,ucharY,ucharDData){ Y&=1; X&=15; if(Y)X|=0x40; X|=0x80; WriteCommandLCM(X,0); WriteDataLCM(DData);}//****************************************//LCD1602顯示字符串//****************************************voidDisplayListChar(ucharX,ucharY,uchar*DData,L){ ucharListLength=0; Y&=0x1; X&=0xF; while(L--) { DisplayOneChar(X,Y,DData[ListLength]); ListLength++; X++; }}//**************************************//延時5微秒(STC90C52RC@12M)//不同的工作環(huán)境,需要調(diào)整此函數(shù)//當改用1T的MCU時,請調(diào)整此延時函數(shù)//**************************************voidDelay5us(){ _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();}//**************************************//I2C起始信號//**************************************voidI2C_Start(){SDA=1;//拉高數(shù)據(jù)線SCL=1;//拉高時鐘線Delay5us();//延時SDA=0;//產(chǎn)生下降沿Delay5us();//延時SCL=0;//拉低時鐘線}//**************************************//I2C停止信號//**************************************voidI2C_Stop(){SDA=0;//拉低數(shù)據(jù)線SCL=1;//拉高時鐘線Delay5us();//延時SDA=1;//產(chǎn)生上升沿Delay5us();//延時}//**************************************//I2C發(fā)送應答信號//入口參數(shù):ack(0:ACK1:NAK)//**************************************voidI2C_SendACK(bitack){SDA=ack;//寫應答信號SCL=1;//拉高時鐘線Delay5us();//延時SCL=0;//拉低時鐘線Delay5us();//延時}//**************************************//I2C接收應答信號//**************************************bitI2C_RecvACK(){SCL=1;//拉高時鐘線Delay5us();//延時CY=SDA;//讀應答信號SCL=0;//拉低時鐘線Delay5us();//延時returnCY;}//**************************************//向I2C總線發(fā)送一個字節(jié)數(shù)據(jù)//**************************************voidI2C_SendByte(uchardat){uchari;for(i=0;i<8;i++)//8位計數(shù)器{dat<<=1;//移出數(shù)據(jù)的最高位SDA=CY;//送數(shù)據(jù)口SCL=1;//拉高時鐘線Delay5us();//延時SCL=0;//拉低時鐘線Delay5us();//延時}I2C_RecvACK();}//**************************************//從I2C總線接收一個字節(jié)數(shù)據(jù)//**************************************ucharI2C_RecvByte(){uchari;uchardat=0;SDA=1;//使能內(nèi)部上拉,準備讀取數(shù)據(jù),for(i=0;i<8;i++)//8位計數(shù)器{dat<<=1;SCL=1;//拉高時鐘線Delay5us();//延時dat|=SDA;//讀數(shù)據(jù)SCL=0;//拉低時鐘線Delay5us();//延時}returndat;}//**************************************//向I2C設備寫入一個字節(jié)數(shù)據(jù)//**************************************voidSingle_WriteI2C(ucharREG_Address,ucharREG_data){I2C_Start();//起始信號I2C_SendByte(SlaveAddress);//發(fā)送設備地址+寫信號I2C_SendByte(REG_Address);//內(nèi)部寄存器地址,I2C_SendByte(REG_data);//內(nèi)部寄存器數(shù)據(jù),I2C_Stop();//發(fā)送停止信號}//**************************************//從I2C設備讀取一個字節(jié)數(shù)據(jù)//**************************************ucharSingle_ReadI2C(ucharREG_Address){ ucharREG_data; I2C_Start();//起始信號 I2C_SendByte(SlaveAddress);//發(fā)送設備地址+寫信號 I2C_SendByte(REG_Address);//發(fā)送存儲單元地址,從0開始 I2C_Start();//起始信號 I2C_SendByte(SlaveAddress+1);//發(fā)送設備地址+讀信號 REG_data=I2C_RecvByte();//讀出寄存器數(shù)據(jù) I2C_SendACK(1);//接收應答信號 I2C_Stop();//停止信號 returnREG_data;}//**************************************//初始化MPU6050//**************************************voidInitMPU6050(){ Single_WriteI2C(PWR_MGMT_1,0x00); //解除休眠狀態(tài) Single_WriteI2C(SMPLRT_DIV,0x07); Single_WriteI2C(CONFIG,0x06); Single_WriteI2C(GYRO_CONFIG,0x18); Single_WriteI2C(ACCEL_CONFIG,0x01);}//**************************************//合成數(shù)據(jù)//**************************************intGetData(ucharREG_Address){ charH,L; H=Single_ReadI2C(REG_Address); L=Single_ReadI2C(REG_Address+1); return(H<<8)+L;//合成數(shù)據(jù)}//**************************************//在1602上顯示10位數(shù)據(jù)//**************************************voidDisplay10BitData(intvalue,ucharx,uchary){ value/=64; //轉換為10位數(shù)據(jù) lcd_printf(dis,value); //轉換數(shù)據(jù)顯示 DisplayListChar(x,y,dis,4); //啟始列,行,顯示數(shù)組,顯示長度}//**************************************//顯示溫度//**************************************//voiddisplay_temp()//{// Temp_h=Single_ReadI2C(TEMP_OUT_H);//讀取溫度// Temp_l=Single_ReadI2C(TEMP_OUT_L);//讀取溫度// Temperatu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年湖北國土資源職業(yè)學院單招職業(yè)技能測試題庫及參考答案
- 商業(yè)綜合體改造抵押協(xié)議
- 2025年度養(yǎng)豬場動物疫病監(jiān)測與預警協(xié)議
- 2025年度個人信息保護與信息安全保密協(xié)議書
- 二零二五年度食品飲料企業(yè)財務代理記帳服務合同
- 2025年廣西自然資源職業(yè)技術學院單招職業(yè)技能測試題庫及答案一套
- 商業(yè)廣場改造貸款協(xié)議
- 2025年度公司終止職工勞動合同解除與就業(yè)援助合同
- 2025年北京綠色生態(tài)居住區(qū)拆遷補償與生態(tài)修復合同
- 2025年度商鋪轉租定金及租賃期終止處理合同
- 床位預約管理提高患者就診效率減少等待時間
- 吉利圍墻施工組織設計樣本
- 人教版三年級上冊數(shù)學應用題100題及答案
- 第6課《飛向藍天的恐龍》兩課時學習任務單部編版四年級語文下冊
- 語文新課標背景下單元整體教學:六下第4單元大單元設計
- 福州地鐵公司招聘考試題目
- 小學語文期末質(zhì)量分析報告
- 口腔醫(yī)院客服培訓課件
- 駕照體檢表完整版本
- 04G325吊車軌道聯(lián)結及車擋
- 華為公司員工培訓與績效管理
評論
0/150
提交評論