版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)程序說明:該程序中有兩個(gè)C文件,均為同一Keil或TKstudio工程下的C源文件,分別為ADXL345_main和ADXL345_LCD,此程序在Keil uVision2或TKstudio version4.5編譯環(huán)境下均可正常運(yùn)行,ADXL345 - 0 Error(s), 0 Warning(s).項(xiàng)目說明:采用全集成的三軸加速度傳感器ADXL345進(jìn)行二維傾角的測(cè)量,用1602液晶(LCD省去了測(cè)忙函數(shù))顯示角度值,其值精確到小數(shù)點(diǎn)后兩位。ADXL345_ma
2、in.c文件:/*頭文件*/#include #include #include /*宏定義*/#define uchar unsigned char#define uint unsigned int/*位定義*/sbit CS = P21; / 片選信號(hào)端sbit SCLK = P31; / 時(shí)鐘sbit SDI = P30; / 數(shù)據(jù)讀/寫/*函數(shù)聲明*/void write_comd(uchar);/void write_data_LCD(uchar);void LCD_init(); / LCD 初始化void display_LCD();/ LCD顯示void calculate()
3、; / ASCII碼計(jì)算/*全局變量*/uint Data_X_22; / 讀出的數(shù)據(jù)儲(chǔ)存 X Y Zuint Data_Y_22;uint Data_Z_22;int Data_X,Data_Y,Data_Z; / 數(shù)值轉(zhuǎn)換后的值float XX,YY,ZZ;/ 3軸的重力加速度分量uchar ID;/ 機(jī)器ID值 用于看讀的是否對(duì)(調(diào)試時(shí)用)float roll,pitch;/* 函數(shù)名:Delayms()* 功能描述:產(chǎn)生延遲* 形參:ms 延遲的時(shí)間,單位ms* 返回值:無* 局部變量:i* 全局變量:無* 函數(shù)調(diào)用: 無*/void delay_ms(uchar ms)uchar i
4、;while(ms-)for(i = 0; i 250; i+)_nop_();_nop_(); /空?qǐng)?zhí)行消耗CPU時(shí)間達(dá)到等待的效果_nop_();_nop_();/* 函數(shù)名:Write_Data(uchar Data_write)* 功能描述:寫指令到寄存器 * 形參:Data_write 要寫的數(shù)據(jù) 8位* 返回值:無* 局部變量:i* 全局變量:無* 函數(shù)調(diào)用: _nop_(); */*寫數(shù)據(jù)函數(shù)*/void Write_Data(uchar Adress_Reg,uchar Data_write)uchar i=0;Adress_Reg=(Adress_Reg & 0 x7f);/
5、 置最高位位0 寫狀態(tài)Adress_Reg=(Adress_Reg & 0 xbf); / 置第二高位0 單字節(jié)讀寫CS=0;_nop_();SCLK=1;_nop_();for(i=0;i8;i+) / 8位串行輸出 寄存器地址值SCLK=0;_nop_();SDI=(bit)(Adress_Reg & 0 x80);_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();Adress_Reg=1;for(i=0;i8;i+)/ 8位串行輸出 指令值SCLK=0;_nop_();SDI=(bit)(Data_write & 0 x80);_nop_();
6、_nop_();_nop_();SCLK=1;_nop_();_nop_();Data_write=1;_nop_();_nop_();SCLK=1;_nop_();_nop_();SDI=1;CS=1;/* 函數(shù)名: Read_Data_Reg(uchar Adress_Reg) * 功能描述:往寄存器讀數(shù)據(jù) * 形參:Adress_Reg 寄存器地址* 返回值:Data_Read 讀取的數(shù)據(jù)* 局部變量:i Data_Read 讀取的數(shù)據(jù) * 全局變量:無* 函數(shù)調(diào)用: _nop_(); */uchar Read_Data_Reg(uchar Adress_Reg)uchar i=0;uc
7、har Data_Read;Adress_Reg=(Adress_Reg|0 x80); / 置最高位為1, 讀狀態(tài)Adress_Reg=(Adress_Reg&0 xbf); / 置第二高位位0, 單字節(jié)讀寫CS=0;_nop_();_nop_();SCLK=1;_nop_();_nop_();for(i=0;i8;i+) / 8位串行輸出 寄存器地址值SCLK=0;_nop_();SDI=(bit)(Adress_Reg & 0 x80);_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();Adress_Reg=1;for(i=0;i8;i+) /
8、 8位串行讀入 數(shù)據(jù)(8位) SCLK=0;Data_Read=1;_nop_();Data_Read|=(uchar)SDI;_nop_();_nop_();SCLK=1;_nop_();_nop_();for(i=0;i8;i+) / 產(chǎn)生8個(gè)脈沖 (手冊(cè)要求,目的不知道)SCLK=0;_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();_nop_();SCLK=1;_nop_();CS=1;return Data_Read;/* 函數(shù)名:Read_Data()* 功能描述:讀出6字節(jié)X Y Z 軸各兩字節(jié)的數(shù)據(jù) * 形參:無* 返回值:無* 局部
9、變量:無* 全局變量:Data_X_22 Data_Y_22 Data_Z_22 存放讀出值 * 函數(shù)調(diào)用:Read_Data_Reg(_);delay_ms(_); */void Read_Data()/*DATAX0是X軸加速度的低字節(jié)寄存器,DATAX1是高字節(jié)寄存器*/Data_X_20=Read_Data_Reg(0 x32); / 讀出X軸低位Data_X_21=Read_Data_Reg(0 x33); / 讀出X軸高位delay_ms(10);Data_Y_20=Read_Data_Reg(0 x34); / 讀出Y軸低位Data_Y_21=Read_Data_Reg(0 x3
10、5); / 讀出Y軸高位delay_ms(10);Data_Z_20=Read_Data_Reg(0 x36); / 讀出Z軸低位Data_Z_21=Read_Data_Reg(0 x37); / 讀出Z軸高位/* 函數(shù)名: ADXL345_init()* 功能描述:ADXL345 初始化 對(duì)寄存器寫指令 * 形參:無* 返回值:無* 局部變量:無* 全局變量:無* 函數(shù)調(diào)用:Write_Data_Reg(_,_);*/void ADXL345_init()Write_Data(0 x31,0 x4f); /測(cè)量范圍為正負(fù)16g 13位模式 3線SPI 中斷低有效 禁用自測(cè)力 左對(duì)齊(MSB)
11、模式delay_ms(10);Write_Data(0 x2C,0 x08); /速率設(shè)定為25HZ,帶寬12.5HZ delay_ms(10);Write_Data(0 x2D,0 x08); /選擇電源模式delay_ms(10);Write_Data(0 x2E,0 x80); /使能 DATA_READY 中斷delay_ms(10);Write_Data(0 x2f,0 x00); /中斷功能設(shè)定,不使用中斷delay_ms(10);/*Write_Data(0 x1E,0 x00); /X 偏移量 根據(jù)測(cè)試傳感器的delay_ms(10); Write_Data(0 x1F,0 x
12、00); /Y 偏移量 根據(jù)測(cè)試傳感器的delay_ms(10); Write_Data(0 x20,0 x00); /Z 偏移量 根據(jù)測(cè)試傳感器的delay_ms(10);Write_Data(0 x21,0 x00); /敲擊延時(shí)0:禁用; (1.25ms/LSB)delay_ms(10);Write_Data(0 x22,0 x00); /檢測(cè)第一次敲擊后的延時(shí)0:禁用; (1.25ms/LSB) delay_ms(10);Write_Data(0 x23,0 x00); /敲擊窗口0:禁用; (1.25ms/LSB)delay_ms(10);Write_Data(0 x24,0 x00
13、); /保存檢測(cè)活動(dòng)閥值; (62.5mg/LSB)delay_ms(10);Write_Data(0 x25,0 x00); /保存檢測(cè)靜止閥值; (62.5mg/LSB) delay_ms(10);Write_Data(0 x26,0 x2b); /檢測(cè)活動(dòng)時(shí)間閥值; (1s/LSB)delay_ms(10);Write_Data(0 x27,0 x00); / 活動(dòng) 靜止檢測(cè)禁止delay_ms(10);Write_Data(0 x28,0 x09); /保存檢測(cè)活動(dòng)閥值; (62.5mg/LSB)delay_ms(10);Write_Data(0 x29,0 xff); /保存檢測(cè)靜止
14、閥值; (62.5mg/LSB)delay_ms(10);Write_Data(0 x2a,0 x80); delay_ms(10);*/* 函數(shù)名: transform(void)* 功能描述:數(shù)值整合和轉(zhuǎn)換,并轉(zhuǎn)換為加速度 放大1000倍* 形參:無* 返回值:無* 局部變量:無* 全局變量:Data_X=0,Data_Y=0,Data_Z 整合后的X Y Z 軸值* 函數(shù)調(diào)用:無*/*從數(shù)據(jù)寄存器中獲取加速度數(shù)據(jù)后,用戶必須對(duì)數(shù)據(jù)進(jìn)行重建*/*數(shù)值轉(zhuǎn)換*/void transform(void)(int)Data_X=(Data_X_20)+(Data_X_218);(int)Data_
15、Y=(Data_Y_20)+(Data_Y_218); (int)Data_Z=(Data_Z_20)+(Data_Z_218);if(Data_X&0 x2000) / 若位負(fù)數(shù) 轉(zhuǎn)換為補(bǔ)碼Data_X=(Data_X)+1;Data_X=Data_X*3.90625; / 乘比例因素Data_X=-Data_X;elseData_X=Data_X*3.90625;if(Data_Y&0 x2000)/ 若位負(fù)數(shù) 轉(zhuǎn)換為補(bǔ)碼Data_Y=(Data_Y)+1;Data_Y=Data_Y*3.90625;/ 乘比例因素Data_Y=-Data_Y;elseData_Y=Data_Y*3.906
16、25;if(Data_Z&0 x2000) / 若位負(fù)數(shù) 轉(zhuǎn)換為補(bǔ)碼Data_Z=(Data_Z)+1;Data_Z=Data_Z*3.90625; / 乘比例因素Data_Z=-Data_Z;elseData_Z=Data_Z*3.90625;/*if(Data_X0) Data_X=-Data_X;Data_X=(float)Data_X*3.9;/Data_X單位為1000倍的g,即mgelseData_X=(float)Data_X*3.9;if(Data_Y0)Data_Y=-Data_Y;Data_Y=(float)Data_Y*3.9;elseData_Y=(float)Data
17、_Y*3.9;if(Data_Z0) Data_Z=-Data_Z;Data_Z=(float)Data_Z*3.9;elseData_Z=(float)Data_Z*3.9;*/*擴(kuò)大1000倍后結(jié)果*/*檢測(cè)軸始終檢測(cè)到的是正加速度*/XX=Data_X; / X軸重力加速度分量YY=Data_Y; / Y軸重力加速度分量ZZ=Data_Z; / Z軸重力加速度分量/* 函數(shù)名:calculate_angle(float V_x,float V_y,float V_z)* 功能描述:計(jì)算橫滾角和俯仰角 * 形參:G_x G_x G_zX Y Z軸的加速度值* 返回值:無* 局部變量:無 *
18、 全局變量:roll pitch 橫滾角和俯仰角* 函數(shù)調(diào)用:atan2(_,_); */ /*計(jì)算角度函數(shù)*/void calculate_angle(float G_x,float G_y,float G_z)roll=-(float)(atan2(G_z,G_x)*180)/3.)-90);/弧度轉(zhuǎn)成角度 pitch=-(float)(atan2(G_z,G_y)*180)/3.)-90);roll=roll*100;pitch=pitch*100;/*主函數(shù)*/void main(void)delay_ms(5); /上電延時(shí)ADXL345_init(); / ADXL345的初始化L
19、CD_init(); / LCD的初始化ID=Read_Data_Reg(0 x00);/ 讀出機(jī)器ID值,DEVID寄存器保存0 xE5的固定器件ID代碼while(1) Read_Data();/讀出X Y Z 軸加速度值 transform(); /數(shù)據(jù)重建過程calculate_angle(XX,YY,ZZ);/計(jì)算x和y軸相對(duì)于水平面的傾角calculate(); / ASCII碼計(jì)算display_LCD();/ 顯示ADXL345_LCD.c文件:#include /51寄存器文件#include /*宏定義*/#define uchar unsigned char#define uint unsigned int/*位定義及變量聲明*/sbit LCDEN=P34;sbit RS=P35;sbit DULA=P26;sbit WEILA=P27;extern uchar ID;extern float roll,pitch;uchar dis116 = X+00.00 Y+00.00;uchar dis216 = ID:000;/*計(jì)算函數(shù)*/void calculat
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年區(qū)域醫(yī)療服務(wù)承包協(xié)議
- 2024醫(yī)藥產(chǎn)品研發(fā)與銷售代理合同
- 2024年企業(yè)知識(shí)產(chǎn)權(quán)管理與運(yùn)用合同
- 2024員工福利外包服務(wù)合同
- 2024年度游戲委托開發(fā)與運(yùn)營(yíng)合同
- 2024年度新能源汽車電池制造與回收合同
- 2024城市配送車輛購置擔(dān)保合同
- 2024年產(chǎn)定做加工協(xié)議
- 2024年品牌授權(quán)使用合同(服裝業(yè))
- 2023年中級(jí)經(jīng)濟(jì)師考試真題及答案
- SB/T 10895-2012鮮蛋包裝與標(biāo)識(shí)
- GB/T 9115-2010對(duì)焊鋼制管法蘭
- GB/T 2423.3-2006電工電子產(chǎn)品環(huán)境試驗(yàn)第2部分:試驗(yàn)方法試驗(yàn)Cab:恒定濕熱試驗(yàn)
- GB/T 23221-2008烤煙栽培技術(shù)規(guī)程
- GB/T 16900-2008圖形符號(hào)表示規(guī)則總則
- 城市綠地系統(tǒng)規(guī)劃 第9章 工業(yè)綠地規(guī)劃
- 遼寧省遼南協(xié)作校2022-2023學(xué)年高二上學(xué)期期末考試語文答案 Word版含解析
- 中職英語統(tǒng)考復(fù)習(xí)講課教案
- 決策心理學(xué)第一講課件
- 高中化學(xué)趣味化學(xué)知識(shí)競(jìng)賽課件
評(píng)論
0/150
提交評(píng)論