加速度传感器ADXL345模块测试程序_第1页
加速度传感器ADXL345模块测试程序_第2页
加速度传感器ADXL345模块测试程序_第3页
加速度传感器ADXL345模块测试程序_第4页
加速度传感器ADXL345模块测试程序_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、* ADXL345 模块*用途:ADXL345模块IIC测试程序*/# mclude <REG51.H># mclude# mclude<math.h><stdio.h>/Keil libraiy/Keil library# mclude<INTRINS.H>define uchar unsigned chardefine umt unsigned int#define DataPort P2/LCD 1602 数据端 I Isbit SCL=P0z4;UC时钟引脚定义sbit SDA=P0z3;/IIC数据引脚定义sbitLCM_RS=P(T2

2、;/LCD 1602 命令端口sbitLCM_RW=P(r 1;/LCD 1602 命令端 I IsbitLCM_EN=P(T 0;/LCD 1602 命令端口#define SlaveAddress 0xA6 定义器件在IIC总线中的从地址,根据ALT ADDRESS 地址引脚不同修改/ALT ADDRESS引脚接地时地址为0xA6,接电源时地 址为0x3Atvpedef unsigned chai BYTE;tvpedef unsigned short WORD:BYTE BUF8;uchai ge,shi,bai,qian,wan; mt dis_data;void delay(unsi

3、gned int k); void InitLcd();void Init_ADXL345(void);接收数据缓存区显示变量变量/初始化led 1602初始化ADXL345/单个写入数据单个读取内部寄/连续的读取内部void WriteDataLCM(uchai dataW);void WnteConunaiidLCM(uchar CMDuclw Attribc); void DisplayOneChai(uchar X,uchar Yuchar DData); void conversion(umt temp_data);void Siiigle_Wiite_ADXL345(uchai R

4、EG_Addiess,uchar REG_data); uchai Single_Read_ADXL345(uchai- REG_Address);存器数据void Mu ltiple_Read_ADXL345Q;寄存器数据void Delay5us();void Delay5ms();void ADXL345_Start();void ADXL345_Stop();void ADXL345_SendACK(bit ack);bit ADXL345_RecvACK();void ADXL345_SendBle(BYTE dat);BYTE ADXL345_RecvByte();void ADX

5、L345_ReadPage();void ADXL345_WntePage();* void conversion(umt temp_data)wan=temp_data/rl 0000+0x30 ; temp_data=temp_data%10000: qian=temp_data/zl000+0x30 ; temp_data=temp_data%1000; bai=temp_data/*l 00+0x30;temp_data=temp_data% 100; shi=temp_data/ 10-H)x30;temp_data=temp_data% 10; ge=temp_data+0x3 0

6、;取余运算取余运算取余运算取余运算严*,void delay(unsigned int k) unsigned int ij;fbr(i=O;i<k;i+) for(j=0;j<121j+); void WaitForEnable(void)DataPon=Oxff;LCM_RS=0;LCM_RW=l _nop_();LCM_EN=1 ;_nop_0_nop_0; while(DataPort&0x80);LCM_EN=0;严*/void WnteConunaiidLCM(uchar CMDuclw Attribc) if(Attnbc)WaitForEnableQ;LCM

7、_RS=0;LCM_RW=0nop_();DataP ort=CMD ;_nop_0;LCM_EN=1 ;_iiop_()op_();LCM_EN=0; void WriteDataLCM(uchai dataW) WaitFoiEnable();LCM_RS= 1 ;LCM_RW=0_nop_();DataPon=dataW ;_nop_Q;LCM_EN=l;_nop_()uiop_();LCM_EN=0; 严*/void InitLcd()WnteConunaiidLCM(0x3 & 1);WnteConunaiidLCM(OxO & 1);WnteConunaiidLCM

8、(OxO 1,1); WnteConmiaiidLCM(0x06 J);WnteConmiaiidLCM(OxOc. 1);严*/void DisplayOneChai(uchar Xuchar Yuchar DData)Y&=1;X&=15; if(Y)X|=0x40;X|=0x80;WnteConmiaiidLCM(X,0);WriteDataLCM(DData);严*延时 5 微秒(STC90C52RC12M)不同的工作坏境,需要调整此函数,注意时钟过快时需要修改 当改用1T的MCU时,请调整此延时函数*/void Delay5us()_nop_0;_iiop_0;_no

9、p_()op_O;_nop_0;_iiop_0;_nop_()op_O;_nop_0;_iiop_0;_iiop_()op_(); 严*延时 5 亳秒(STC90C52RC12M) 不同的工作坏境,需要调整此函数 当改用1T的MCU时,请调整此延时函数void Delay5ms()WORD n= 560;wliile (n-); 严*起始信号*/拉高数据线拉高时钟线延时产生下降沿延时拉低时钟线void ADXL345_Start() SDA= 1;SCL= 1;Delav5us();SDA=0;Delav5us();SCL = 0;严*停止信号*/void ADXL345_Stop() 拉低数

10、据线拉高时钟线延时产生上升沿延时SDA=0;SCL= 1;Delav5us();SDA= 1;Delav5us();发送应答信号 入丨 I 参数:ack (O:ACK 1:NAK)*/void ADXL345_SendACK(bit ack)SDA= ack;SCL= 1;Delav5usQ;SCL = 0;Delav5usQ; 写应答信号拉高时钟线延时拉低时钟线延时严*接收应答信号*/拉高时钟线延时读应答信号拉低时钟线延时bit ADXL345_RecvACKQ SCL= 1;Delav5usQ;CY = SDA;SCL = 0;Delav5usQ;return CY;严*向IIC总线发送一

11、个字节数据*/void ADXL345_SendBle(BYTE dat) BYTE i;for (i=0; i<8; i+)dat «= 1;SDA = CY;SCL= 1;Delav5usQ;SCL = 0;Delav5usQ;ADXL345_RecvACK();/8位计数器移出数据的最高位 送数据口拉高时钟线延时拉低时钟线延时严* 从lie总线接收一个字节数据 */BYTE ADXL345_RecvByte() BYTE i;BYTE dat = 0;SDA= 1; for (1=0; i<8; i+) dat «= 1;SCL= 1;Delav5usQ;

12、dat |= SDA;SCL = 0;Delav5usQ; return dat;使能内部上拉,准备读取数据, 8位计数器拉高时钟线延时/读数据拉低时钟线延时/*单字节写入*void Smgle_Wnte_ADXL345(uchar REG_Address,uchai- REG_data)ADXL345_SSit0;ADXL345_SendBvte(SlaveAddiess);ADXL345_SendByte(REG_Address);ADXL345_SendBvte(REG_data);ADXL345_StopQ;起始信号发送设备地址+写信号内部寄存器地址,请参考中文pd£22页内

13、部寄存器数据,请参考中文pd£22页 /发送停止信号*起始信号/发送设备地址+写信号发送存储单元地址,从0开始起始信号发送设备地址+读信号读出寄存器数据停止信号/*单字节读取uchai Smgle_Read_ADXL345(uchar REG_Addiess) uchai REG_data;ADXL345_Start();ADXL345_SendBvte(SlaveAddress); ADXL345_SendBvte(REG_Address); ADXL345_Start();ADXL345_SendBvte(SlaveAddress+l);REG_data=ADXL345_Recv

14、Bvte(); ADXL345_SendACK( 1);ADXL345_StopQ;return REG_data;* /连续读出ADXL345内部加速度数据,地址范I韦I 0x320x37/*void Multiple_read_ADXL345(void) uchar i;ADXL345_StartQ;ADXL345_SendBvte(SlaveAddress);ADXL345_SendBvte(0x32);起始信号/发送设备地址+写信号发送存储单元地址,从0x32开始ADXL345_SSit();ADXL345_SendByte(SlaveAddress+l); for (i=0; i&l

15、t;6; i+)BUFi = ADXL345_RecvByte(); if (1 = 5) ADXL345_SendACK( 1);elseADXL345_SendACK(0);ADXL345_Stop(J;Delav5nis();起始信号发送设备地址+读信号连续读取6个地址数据,存储中BUF/ZBUF0存储0x32地址中的数据最后一个数据需要回NOACK回应ACK停止信号void IH1CADXL345QSmgle_Wnte_ADXL345(0x3 l.OxOB);Smgle_Wnte_ADXL345(0x2C,0x08);Smgle_Wnte_ADXL345(0x2D,0x08);Smgl

16、e_Wnte_ADXL345(0x2E,0x80);Smgle_Wnte_ADXL345(0xlE,0x00);Smgle_Wnte_ADXL345(0xlF,0x00);Smgle_Wnte_ADXL345(0x20.0x05);*初始化ADXL345,根据需要请参考pdf进行修改*测量范围,正负16g, 13位模式速率设定为12.5参考pdf 13页/选择电源模式参考pdf24页使能DATA.READY中断/X偏移量根据测试传感器的状态写入pd£29页 /Y偏移量根据测试传感器的状态写入pd£29页 /Z偏移量根据测试传感器的状态写入pd£29页*显示X轴vo

17、id displav_x() float temp;dis_data=(BUF 1 «8)+BUF0; 合成数据 if(dis_data<O)dis_data=-dis_data;DisplayOneChar( 10.0;-*);显示正负符号位 _ else DisplayOneChar(10,0/'); 显示空格temp=(float)dis_data*3.9; 计算数据和显示,查考ADXL345快速入门第4页 conveision(temp);转换出显示需要的数据DisplavOneChar(8,0;X,);DisplavOneChar(9,0/:r);Displa

18、vOneChar(l 1.0.qian);DisplayOneChar(12,0/.r);DisplavOneChar( 13,0,bai);DisplavOneChar( 14.0, slii);DisplayOneChar(l 5.0/');*显示y轴void displav_y() float temp;dis.data=(BUF3«8)+BUF2; 合成数据 if(dis_data<0)dis_data=-dis_data;DisplayOneChar(2,1显示正负符号位 _ else DisplayOneChar(2,1 / '); 显示空格temp

19、=(float)dis_data*3.9; conversion(temp);计算数据和显示,查考ADXL345快速入门第4页转换出显示需要的数据DisplayOneChar(0,1 /Y1);第1行,第0列显示yDisplavOneChar( 1,1 /);DisplavOneChar(3 J .qiaii);DisplavOneChar(4,1 ,T);DisplavOneChar(54 .bai);DisplavOneChai (6,1、shi);DisplavOneChar(7,1 / *);显示Z轴void displav_z()float temp;dis.data=(BUF5«8)+BUF4;合成数据if(dis_data<O)dis_data=dis_data;DisplayOneChai( 10,1 /-*);/显示负符号位 _else DisplayOneChar(10J; *); 显示空格temp=(float)dis_data*3.9; 计算数据和显示,查考ADXL34

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论