




已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
/*MPU6050?IIC測(cè)試程序?使用單片機(jī)STC89C52晶振:11.0592M顯示:LCD1602功能:?顯示加速度計(jì)和陀螺儀的10位原始數(shù)據(jù)*/#include#include#include/Keil library #include /Keil library #include typedef unsigned char uchar;typedef unsigned short ushort;typedef unsigned int uint; /*?定義51單片機(jī)端口?*/#define DataPort P0 /LCD1602數(shù)據(jù)端口sbit SCL=P10; /IIC時(shí)鐘引腳定義sbit SDA=P11; /IIC數(shù)據(jù)引腳定義sbit LCM_RS=P24; /LCD1602命令端口sbit LCM_RW=P25; /LCD1602命令端口sbit LCM_EN=P26; /LCD1602命令端口 /* 定義MPU6050內(nèi)部地址?*/#define SMPLRT_DIV 0x19 /陀螺儀采樣率,典型值:0x07(125Hz)?#define CONFIG 0x1A /低通濾波頻率,典型值:0x06(5Hz)?#define GYRO_CONFIG 0x1B /陀螺儀自檢及測(cè)量范圍, /典型值:0x18(不自檢,2000deg/s)?#define ACCEL_CONFIG 0x1C /加速計(jì)自檢、測(cè)量范圍及高通濾波頻率 /典型值: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地址寄存器(默認(rèn)數(shù)值0x68,只讀)?#define SlaveAddress 0xD0 /IIC寫入時(shí)的地址字節(jié)數(shù)據(jù),+1為讀取?/*?/定義類型及變量?/*?uchar dis4;/顯示數(shù)字(-511至512)的字符數(shù)組int dis_data;/變量/int?Temperature,Temp_h,Temp_l;?/溫度及高低位數(shù)據(jù)?/*?/函數(shù)聲明?/*?void delay(unsigned int k);/延時(shí)LCD相關(guān)函數(shù)?void InitLcd(); /初始化lcd1602?void lcd_printf(uchar *s,int temp_data);void WriteDataLCM(uchar dataW); /LCD數(shù)據(jù)?void WriteCommandLCM(uchar CMD,uchar Attribc); /LCD指令?void DisplayOneChar(uchar X,uchar Y,uchar DData); /顯示一個(gè)字符?void DisplayListChar(uchar X,uchar Y,uchar *DData,L); /顯示字符串MPU6050操作函數(shù)void InitMPU6050(); /初始化MPU6050?void Delay5us();void I2C_Start();void I2C_Stop();void I2C_SendACK(bit ack); bit I2C_RecvACK();void I2C_SendByte(uchar dat);uchar I2C_RecvByte();void I2C_ReadPage();void I2C_WritePage();void display_ACCEL_x();void display_ACCEL_y();void display_ACCEL_z();uchar Single_ReadI2C(uchar REG_Address); /讀取I2C數(shù)據(jù)?void Single_WriteI2C(uchar REG_Address,uchar REG_data); /向I2C寫入數(shù)據(jù)?/*?/整數(shù)轉(zhuǎn)字符串?/*?void lcd_printf(uchar *s,int temp_data) if(temp_data0) temp_data=-temp_data; *s=-; else *s=?; *+s=temp_data/100+0x30; temp_data=temp_data%100;/取余運(yùn)算*+s=temp_data/10+0x30;temp_data=temp_data%10;/取余運(yùn)算*+s=temp_data+0x30;/*/ 延時(shí)/*void delay(unsigned int k)unsigned int i,j;for(i=0;ik;i+)for(j=0;j121;j+);/*/LCD1602初始化/*void InitLcd()WriteCommandLCM(0x38,1); WriteCommandLCM(0x08,1); WriteCommandLCM(0x01,1); WriteCommandLCM(0x06,1); WriteCommandLCM(0x0c,1); DisplayOneChar(0,0,A); DisplayOneChar(0,1,G);/*/LCD1602寫允許/*void WaitForEnable(void)DataPort=0xff;LCM_RS=0;LCM_RW=1;_nop_();LCM_EN=1;_nop_();_nop_();while(DataPort&0x80);LCM_EN=0;/*/LCD1602寫入命令/*?void WriteCommandLCM(uchar CMD,uchar Attribc)if(Attribc) WaitForEnable();LCM_RS=0;LCM_RW=0;_nop_();DataPort=CMD;_nop_(); LCM_EN=1;_nop_();_nop_();LCM_EN=0;/*/LCD1602寫入數(shù)據(jù)? /*void WriteDataLCM(uchar dataW)WaitForEnable();LCM_RS=1;LCM_RW=0;_nop_();DataPort=dataW;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;/*/LCD1602寫入一個(gè)字符?/*void DisplayOneChar(uchar X,uchar Y,uchar DData)Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;WriteCommandLCM(X,0);WriteDataLCM(DData);/*/LCD1602顯示字符串?/*void DisplayListChar(uchar X,uchar Y,uchar *DData,L)uchar ListLength=0; Y&=0x1; X&=0xF; while(L-) DisplayOneChar(X,Y,DDataListLength);ListLength+;X+; /*/延時(shí)5微秒(STC90C52RC12M)/不同的工作環(huán)境,需要調(diào)整此函數(shù)/當(dāng)改用1T的MCU時(shí),請(qǐng)調(diào)整此延時(shí)函數(shù)/*void Delay5us()_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起始信號(hào)?/*?void I2C_Start()SDA=1; /拉高數(shù)據(jù)線SCL=1; /拉高時(shí)鐘線Delay5us(); /延時(shí)SDA=0; /產(chǎn)生下降沿Delay5us(); /延時(shí)SCL=0; /拉低時(shí)鐘線/*/I2C停止信號(hào)/*void I2C_Stop()SDA=0; /拉低數(shù)據(jù)線SCL=1; /拉高時(shí)鐘線Delay5us();/延時(shí)SDA=1; /產(chǎn)生上升沿Delay5us(); /延時(shí)/*/I2C發(fā)送應(yīng)答信號(hào)/入口參數(shù):/ack(0:ACK 1:NAK)/*void I2C_SendACK(bit ack)SDA=ack; /寫應(yīng)答信號(hào)SCL=1; /拉高時(shí)鐘線 Delay5us(); /延時(shí)SCL=0; /拉低時(shí)鐘線Delay5us(); /延時(shí)/*?/I2C接收應(yīng)答信號(hào)?/*?bit I2C_RecvACK()SCL=1;/拉高時(shí)鐘線Delay5us(); /延時(shí)CY=SDA; /讀應(yīng)答信號(hào)SCL=0; /拉低時(shí)鐘線Delay5us(); /延時(shí)return CY;/*?/向I2C總線發(fā)送一個(gè)字節(jié)數(shù)據(jù)?/*?void I2C_SendByte(uchar dat) uchar i; for(i=0;i8;i+) /8位計(jì)數(shù)器 dat=1; /移出數(shù)據(jù)的最高位 SDA=CY; /送數(shù)據(jù)口 SCL=1; /拉高時(shí)鐘線 Delay5us(); /延時(shí) SCL=0; /拉低時(shí)鐘線 Delay5us(); /延時(shí) I2C_RecvACK();/*?/從I2C總線接收一個(gè)字節(jié)數(shù)據(jù)?/*?uchar I2C_RecvByte()uchar i;uchar dat=0;SDA=1; /使能內(nèi)部上拉,準(zhǔn)備讀取數(shù)據(jù), for(i=0;i8;i+)/8位計(jì)數(shù)器 dat=1; SCL=1; /拉高時(shí)鐘線 Delay5us();/延時(shí) dat|=SDA; /讀數(shù)據(jù) SCL=0; /拉低時(shí)鐘線 Delay5us(); /延時(shí) return dat;/*?/向I2C設(shè)備寫入一個(gè)字節(jié)數(shù)據(jù)?/*?void Single_WriteI2C(uchar REG_Address,uchar REG_data)I2C_Start(); /起始信號(hào)I2C_SendByte(SlaveAddress); /發(fā)送設(shè)備地址+寫信號(hào)I2C_SendByte(REG_Address); /內(nèi)部寄存器地址,I2C_SendByte(REG_data); /內(nèi)部寄存器數(shù)據(jù),I2C_Stop(); /發(fā)送停止信號(hào)/*?/從I2C設(shè)備讀取一個(gè)字節(jié)數(shù)據(jù)?/*?uchar Single_ReadI2C(uchar REG_Address)uchar REG_data;I2C_Start();/起始信號(hào)?I2C_SendByte(SlaveAddress); /發(fā)送設(shè)備地址+寫信號(hào)?I2C_SendByte(REG_Address); /發(fā)送存儲(chǔ)單元地址,從0開始?I2C_Start(); /起始信號(hào)?I2C_SendByte(SlaveAddress+1); /發(fā)送設(shè)備地址+讀信號(hào)REG_data=I2C_RecvByte(); /讀出寄存器數(shù)據(jù)?I2C_SendACK(1); /接收應(yīng)答信號(hào)I2C_Stop(); /停止信號(hào)return REG_data;/*?/初始化MPU6050?/*?void InitMPU6050()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ù)?/*?int GetData(uchar REG_Address)char H,L;H=Single_ReadI2C(REG_Address);L=Single_ReadI2C(REG_Address+1);return (H8)+L; /合成數(shù)據(jù)/*?/在1602上顯示10位數(shù)據(jù)?/*?void Display10BitData(int value,uchar x,uchar y)value/=64;/轉(zhuǎn)換為10位數(shù)據(jù)lcd_printf(dis, value);/轉(zhuǎn)換數(shù)據(jù)顯示DisplayListChar(x,y,dis,4);/啟始列,行,顯示數(shù)組,顯示長(zhǎng)度void main()delay(500); /上電延時(shí)InitLcd(); /液晶初始化InitMPU6050(); /初始化MPU6050 delay(150);while(1)Display10BitData(GetData(ACCEL_XOUT_H
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)開發(fā)合作協(xié)議合同
- 三農(nóng)田改造方案設(shè)計(jì)指南
- 建筑木工分包合同
- 上海聲屏障施工方案
- 防水安全生產(chǎn)施工方案
- pvc地板膠施工方案
- 燜渣坑施工方案
- 余姚耐磨地坪施工方案
- 自建房水泥欄桿施工方案
- 青島市eps線條施工方案
- 夜空中最亮的星二部合唱簡(jiǎn)譜
- 《幼兒園課程》01 幼兒園課程概述
- 打井合同(范本8則)
- 風(fēng)電場(chǎng)道路和平臺(tái)工程施工設(shè)計(jì)方案
- GB/T 26695-2011家具用鋼化玻璃板
- GB/T 25052-2010連續(xù)熱浸鍍層鋼板和鋼帶尺寸、外形、重量及允許偏差
- GB/T 15057.1-1994化工用石灰石采樣與樣品制備方法
- GB/T 1094.2-2013電力變壓器第2部分:液浸式變壓器的溫升
- DB32/T 4402-2022 河湖和水利工程管理范圍劃定技術(shù)規(guī)程
- 高中課本劇 鴻門宴劇本
- 項(xiàng)目經(jīng)理崗位月度KPI績(jī)效考核表
評(píng)論
0/150
提交評(píng)論