加速度傳感器ADXL345模塊測試程序_第1頁
加速度傳感器ADXL345模塊測試程序_第2頁
加速度傳感器ADXL345模塊測試程序_第3頁
加速度傳感器ADXL345模塊測試程序_第4頁
加速度傳感器ADXL345模塊測試程序_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

/**ADXL345模塊**用途:ADXL345模塊IIC測試程序*/#include<REG51.H>#include<math.h>//Keillibrary#include<stdio.h>//Keillibrary#include<INTRINS.H>#defineucharunsignedchar#defineuintunsignedint#defineDataPortP2 //LCD1602數(shù)據(jù)端口sbit SCL=P0A4; //IIC時鐘引腳定義sbit SDA=P0A3; //IIC數(shù)據(jù)引腳定義sbit LCM_RS=P0A2; //LCD1602命令端口sbit LCM_RW=P0A1;//LCD1602命令端口sbit LCM_EN=P0A0; //LCD1602命令端口#defineSlaveAddress0xA6 〃定義器件在IIC總線中的從地址,根據(jù)ALTADDRESS地址引腳不同修改//ALTADDRESS引腳接地時地址為0xA6,接電源時地址為0x3AtypedefunsignedcharBYTE;typedefunsignedshortWORD;BYTEBUF[8]; 〃接收數(shù)據(jù)緩存區(qū)ucharge,shi,bai,qian,wan; 〃顯示變量intdis_data; 〃變量voiddelay(unsignedintk);voidInitLcd(); 〃初始化lcd1602voidInit_ADXL345(void); 〃初始化ADXL345voidWriteDataLCM(uchardataW);voidWriteCommandLCM(ucharCMD,ucharAttribc);voidDisplayOneChar(ucharX,ucharY,ucharDData);voidconversion(uinttemp_data);voidSingle_Write_ADXL345(ucharREG_Address,ucharREG_data); 〃單個寫入數(shù)據(jù)ucharSingle_Read_ADXL345(ucharREG_Address); //單個讀取內(nèi)部寄存器數(shù)據(jù)voidMultiple_Read_ADXL345(); 〃連續(xù)的讀取內(nèi)部寄存器數(shù)據(jù)// voidDelay5us();voidDelay5ms();voidADXL345_Start();voidADXL345_Stop();voidADXL345_SendACK(bitack);bitADXL345_RecvACK();voidADXL345_SendByte(BYTEdat);BYTEADXL345_RecvByte();voidADXL345_ReadPage();voidADXL345_WritePage();// //*********************************************************voidconversion(uinttemp_data){wan=temp_data/10000+0x30;temp_data=temp_data%10000; //取余運算qian=temp_data/1000+0x30;temp_data=temp_data%1000; //取余運算bai=temp_data/100+0x30;temp_data=temp_data%100; 〃取余運算shi=temp_data/10+0x30;temp_data=temp_data%10; 〃取余運算ge=temp_data+0x30;}/*******************************/voiddelay(unsignedintk){unsignedinti,j;for(i=0;i<k;i++){for(j=0;j<121;j++){;}}}/*******************************/voidWaitForEnable(void){DataPort=0xff;LCM_RS=0;LCM_RW=1;_nop_();LCM_EN=1;_nop_();_nop_();while(DataPort&0x80);LCM_EN=0;/*******************************/voidWriteCommandLCM(ucharCMD,ucharAttribc){if(Attribc)WaitForEnable();LCM_RS=0;LCM_RW=0;_nop_();DataPort=CMD;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;}/*******************************/voidWriteDataLCM(uchardataW){WaitForEnable();LCM_RS=1;LCM_RW=0;_nop_();DataPort=dataW;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;}/***********************************/voidInitLcd(){WriteCommandLCM(0x38,1);WriteCommandLCM(0x08,1);WriteCommandLCM(0x01,1);WriteCommandLCM(0x06,1);WriteCommandLCM(0x0c,1);}/***********************************/voidDisplayOneChar(ucharX,ucharYucharDData){Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;WriteCommandLCM(X,0);WriteDataLCM(DData);}3“““““““““““““““““““““““““““““““““““““/**************************************延時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_();/**************************************延時5毫秒(STC90C52RC@12M)不同的工作環(huán)境,需要調(diào)整此函數(shù)當改用1T的MCU時,請調(diào)整此延時函數(shù)**************************************/voidDelay5ms(){WORDn=560;while(n--);}/**************************************起始信號**************************************/〃拉高數(shù)據(jù)線〃拉高時鐘線//〃拉高數(shù)據(jù)線〃拉高時鐘線//延時〃產(chǎn)生下降沿//延時〃拉低時鐘線SDA=1;SCL=1;Delay5us();SDA=0;Delay5us();SCL=0;}/**************************************停止信號**************************************///拉低數(shù)據(jù)線////拉低數(shù)據(jù)線//拉高時鐘線//延時〃產(chǎn)生上升沿//延時SDA=0;SCL=1;Delay5us();SDA=1;Delay5us();}/**************************************發(fā)送應(yīng)答信號

入口參數(shù):ack(0:ACK1:NAK)**************************************/〃寫應(yīng)答信號〃拉高時鐘線〃寫應(yīng)答信號〃拉高時鐘線〃延時〃拉低時鐘線//延時SDA=ack;SCL=1;Delay5us();SCL=0;Delay5us();}/**************************************接收應(yīng)答信號**************************************/bitADXL345_RecvACK()//拉高時鐘線//拉高時鐘線//延時〃讀應(yīng)答信號//拉低時鐘線//延時SCL=1;Delay5us();CY=SDA;SCL=0;Delay5us();returnCY;}/**************************************向IIC總線發(fā)送一個字節(jié)數(shù)據(jù)**************************************/voidADXL345_SendByte(BYTEdat){BYTEi;for(i=0;i<8;i++){dat<<=1;SDA=CY;SCL=1;Delay5us();SCL=0;Delay5us();}ADXL345_RecvACK();

//8位計數(shù)器//移出數(shù)據(jù)的最高位//送數(shù)據(jù)口//拉高時鐘線//延時//拉低時鐘線//延時/**************************************從IIC總線接收一個字節(jié)數(shù)據(jù)**************************************/BYTEADXL345_RecvByte(){BYTEi;BYTEdat=0;〃使能內(nèi)部上拉,準備讀取數(shù)據(jù)〃使能內(nèi)部上拉,準備讀取數(shù)據(jù),//8位計數(shù)器〃拉高時鐘線〃延時//讀數(shù)據(jù)〃拉低時鐘線//延時for(i=0;i<8;i++){dat<<=1;SCL=1;Delay5us();dat1=SDA;SCL=0;Delay5us();}returndat;}/z-i--i--i--i--i--i-iVr ~1“““““““““““““““““““““““““““““““““““““““““““〃個個個個個個口=1二—rt*=?八個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個〃 I」『/V//起始信號//起始信號//發(fā)送設(shè)備地址+寫信號〃內(nèi)部寄存器地址,請參考中文pdf22頁〃內(nèi)部寄存器數(shù)據(jù),請參考中文pdf22頁//發(fā)送停止信號ADXL345_Start();ADXL345_SendByte(SlaveAddress);ADXL345_SendByte(REG_Address);ADXL345_SendByte(REG_data);ADXL345_Stop();}/3+++++++tzi^ra=z^±,TTf?+++++++++++++++++++++++++++++++++++++++++//********單字節(jié)讀取************************不不不不不不不不不不不不不不不不不ucharSingle_Read_ADXL345(ucharREG_Address)(ucharREG_data;〃起始信號〃發(fā)送設(shè)備地址〃起始信號〃發(fā)送設(shè)備地址+寫信號〃發(fā)送存儲單元地址,從0開始//起始信號//發(fā)送設(shè)備地址+讀信號〃讀出寄存器數(shù)據(jù)ADXL345_SendByte(SlaveAddress);ADXL345_SendByte(REG_Address);ADXL345_Start();ADXL345_SendByte(SlaveAddress+1);REG_data=ADXL345_RecvByte();ADXL345_SendACK(1);〃停止信號ADXL345_Stop();〃停止信號returnREG_data;

//〃連續(xù)讀出ADXL345內(nèi)部加速度數(shù)據(jù),地址范圍0x32?0x37////*********************************************************//起始信號//起始信號//發(fā)送設(shè)備地址+寫信號〃發(fā)送存儲單元地址,從0x32開始ADXL345_Start();ADXL345_SendByte(SlaveAddress);ADXL345_SendByte(0x32);ADXL345_Start();ADXL345_SendByte(SlaveAddress+1);for(i=0;i<6;i++){BUF[i]=ADXL345_RecvByte();if(i==5)ADXL345_Start();ADXL345_SendByte(SlaveAddress+1);for(i=0;i<6;i++){BUF[i]=ADXL345_RecvByte();if(i==5){ADXL345_SendACK(1);}else{ADXL345_SendACK(0);}}ADXL345_Stop();Delay5ms();}〃起始信號〃發(fā)送設(shè)備地址+讀信號〃連續(xù)讀取6個地址數(shù)據(jù),存儲中BUF//BUF[0]存儲0x32地址中的數(shù)據(jù)〃最后一個數(shù)據(jù)需要回NOACK〃回應(yīng)ACK〃停止信號〃測量范圍〃測量范圍,正負16g,13位模式//速率設(shè)定為12.5參考pdf13頁〃選擇電源模式 參考pdf24頁//使能DATA_READY中斷//X偏移量根據(jù)測試傳感器的狀態(tài)寫入pdf29頁//Y偏移量根據(jù)測試傳感器的狀態(tài)寫入pdf29頁//Z偏移量根據(jù)測試傳感器的狀態(tài)寫入pdf29頁//*****************************************************************//初始化ADXL345,根據(jù)需要請參考pdf進行修改************************voidInit_ADXL345(){Single_Write_ADXL345(0x31,0x0B);Single_Write_ADXL345(0x2C,0x08);Single_Write_ADXL345(0x2D,0x08);Single_Write_ADXL345(0x2E,0x80);Single_Write_ADXL345(0x1E,0x00);Single_Write_ADXL345(0x1F,0x00);Single_Write_ADXL345(0x20,0x05);//***********************************************************************〃顯示x軸voiddisplay_x()(floattemp;dis_data=(BUF[1]<<8)+BUF[0];//合成數(shù)據(jù)if(dis_data<0)(dis_data=-dis_data;DisplayOneChar(10,0,'-'); 〃顯示正負符號位}elseDisplayOneChar(10,0,'');〃顯示空格temp=(float)dis_data*3.9;〃計算數(shù)據(jù)和顯示,查考ADXL345快速入門第4頁conversion(temp); 〃轉(zhuǎn)換出顯示需要的數(shù)據(jù)DisplayOneChar(8,0,'X');DisplayOneChar(9,0,':');DisplayOneChar(11,0,qian);DisplayOneChar(12,0,'.');DisplayOneChar(13,0,bai);DisplayOneChar(14,0,shi);DisplayOneChar(15,0,'');}/3““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““//***********************************************************************〃顯示y軸voiddisplay_y()(floattemp;dis_data=(BUF[3]<<8)+BUF[2];//合成數(shù)據(jù)if(dis_data<0)(dis_data=-dis_data;DisplayOneChar(2,1,'-'); 〃顯示正負符號位}elseDisplayOneChar(2,1,'');〃顯示空格temp=(float)dis_data*3.9;〃計算數(shù)據(jù)和顯示,查考ADXL345快速入門第4頁conversion(temp); //轉(zhuǎn)換出顯示需要的數(shù)據(jù)DisplayOneChar(0,1,'Y'); //第1行,第0列顯示yDisplayOneChar(1,1,':');DisplayOneChar(3,1,qian);DisplayOneChar(4,1,'.');DisplayOneChar(5,1,bai);DisplayOneChar(6,1,shi);DisplayOneChar(7,1,'');

//***********************************************************************〃顯示z軸voiddisplay_z(){floattemp;dis_data=(BUF[5]<<8)+BUF[4]; //合成數(shù)據(jù)if(dis_data<0){dis_data=-dis_data;DisplayOneChar(10,1,'-'); 〃顯示負符號位}elseDisplayOneChar(10,1,'');〃顯示空格temp=(fl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論