三轴加速度传感器MMA8452 IIC测试程序_第1页
三轴加速度传感器MMA8452 IIC测试程序_第2页
三轴加速度传感器MMA8452 IIC测试程序_第3页
三轴加速度传感器MMA8452 IIC测试程序_第4页
三轴加速度传感器MMA8452 IIC测试程序_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、/uchar unsigned char umt unsigned int#define#defineSCL RDOSDA RE!/me时钟引脚定义/me数据引脚定义*;$:*;$:*:$:*:$:*;$:*;$:*:$:*:$:*/ GY-45 MMA8452 IIC 测试程序使用单片机PIC16F877A晶振:4M显示:Nokia 5110编译环境MPLAB时间:2012.9.11吴迪/ QQ: 362911737*;$:*;$:*;$:*;$:*;$:*;$:*;$:*;$:*#iiiclude #mcludeHSPLCHAR.hM#iiiclude #iiiclude _CONFIG(

2、Ox3b32);define#definedefine SDA.DIR TRISEI定义 E 口方向寄存器define SDA_HIGH() SDA.DIR =1设置数据 I I 为输入define SDA_LOW() SDA.DIR = 0设置数据I 为输出define _nop_ NOP()define SlaveAddress 0 x38 定义器件在HC总线中的从地址,根据SAO地址引脚不同修 改接收数据缓存区显示变量/变量/初始化MMA8452typedef unsigned chai BYTE; typedef unsigned shoit WORD: uchai BUF_drift

3、8;BYTE BUF8;uchar ge,shi,bai,qian,wan;hit dis_data;mt x,y,z;uchai CY;void delay(unsigned int k);void IniCMMA8452(void);void conversion(umt temp_data);/单个写入数据单个读取内部寄连续的读取void Smgle_Write_MMA8452(uchar REG_Address,uchar REG_data);uchai Smgle_Read_MMA8452(uchai REG.Address);存器数据void Miiltiple_Read_MNIA

4、8452(void);内部寄存器数据void Delay5us();void Delay5ms();void MMA8452_Start();void MMA8452_Stop();void MMA8452_SendACK(uchai ack);bit MMA8452_RecvACK();void MMA8452_SendByte(BYTE dat);BYTE MMA8452-RecvByte();void MMA8452_ReadPage();void MMA8452_WntePage();*#*void conversion(umt temp_data)wan=temp_data-zl 0

5、000+16 ;temp_data=temp_data% 10000:取余运算qian=temp_data-zl 000+16 ;temp_data=temp_data% 1000;取余运算bai=temp_data/100+Ox 10 ;temp_data=temp_data% 100:取余运算shi=temp_data/10T)x 10;temp_data=temp_data% 10;取余运算ge=temp_data+Ox 10;件*void delay(unsigned int k)unsigned int i,j;fbi(i=O;ik;i+)for(j=OjviiOj+);件*延时 5

6、 微秒(STC90C52RC12M)不同的工作环境,需要调整此函数,注意时钟过快时需要修改 当改用1T的MCU时,请调整此延时函数 */void Delay5us()NOP();NOP();NOP0;NOP();NOP();NOP();NOP();NOP();/NOP();NOP();NOP();NOP0;*:$:*:$:*:$:*:$:*:$:*:$:*:$:* 延时 5 亳秒(STC90C52RC12M) 不同的工作环境,需要调整此函数当改用1T的MCU时,请调整此延时函数 *:$: w*:*/ void Delay5ms()WORD n= 560;wliile (n);*:$:*:$:*

7、:$:*:$:*:$:*:$:*:$:*起始信号*:$:*:$:*:$:*:$:*:$:*:$:*:$:*:$:/void MMA8452_Start() SDA_LOW();拉高数据线拉高时钟线/延时/产生下降沿/延时/拉低时钟线SDA= 1;SCL= 1;Delay5usQ;SDA=0;Delay5usQ;SCL = 0;停止信号*:$: w*:*/void MMA8452_Stop()SDA_LOW();SDA=0;SCL= 1;Delay5usQ;SDA= 1;Delay5usQ;拉低数据线拉高时钟线/延时产生上升沿延时发送应答信号入 I I 参数:ack (0:ACK 1:NAK)*

8、左*/void MMA8452_SendACK(uchai ack)SDA_LOW();SDA= ack;SCL= 1;Delay5usQ;SCL = 0;Delay5usQ;写应答信号拉高时钟线/延时拉低时钟线延时,*:$:*:$:*:$:*:$:*:$:*:$:*:$:*接收应答信号*:$:*:$:*:$:*:$:*:$:*:$:*:$:*:$:/bit MMA8452_RecvACK() SDA_HIGH();SCL= 1;Delay5usQ;if(SDA=l)CY=1;elseCY = 0;/拉高时钟线延时读应答信号SCL = 0;Delay5usQ;SDA_LOW();return

9、CY;/拉低时钟线延时,*:$:*:$:*:$:*:$:*:$:*:$:*:$:*向IIC总线发送一个字节数据*:$:*:$:*:$:*:$:*:$:*:$:*:$:*:$:/void MMA8452_SendByte(BYTE dat)BYTE i;SDA_LOW();for (1=0; i8; i+)/8 位计数器if(dat&0 x80)CY=1;else CY=O:SDA = CY;SCL= 1;Delay5usQ;SCL = 0;Delay5usQ;dat = 1;MMA8452_RecvACK();送数据11/拉高时钟线延时/拉低时钟线延时移出数据的最高位/* *:$:*:$:*

10、*从IIC总线接收一个字节数据*#*#*:$:/BYTE MMA8452_RecvByte() BYTE i;BYTE dat = 0;SDA_LOW();SDA= 1;SDA_HIGH();for (1=0; i8; i+)dat = 1;SCL= 1;Delay5usQ; if(SDA=l) dat |= 1; else dat |=0;SCL = 0;Delay5usQ;SDA_LOW(); letuin dat;/使能内部上拉,准备读取数据,/8位计数器/拉高时钟线延时读数据/拉低时钟线延时/*单字节写入* *:$:*:$:* *:$:* *void Smgle_Write_MMA84

11、52(uchai- REG_Adchess,uchar REG_data)MMA8452_Stait();起始信号MMA8452_SendByte(SlaveAciclress);发送设备地址+写信号俨*单字节读取起始信号/发送设备地址+写信号发送存储单元地址,从0开起始信号发送设备地址+读信号读出寄存器数据停止信号MMA8452_SendByte(REG_Address);内部寄存器地址MMA8452_SendByte(REG_data);内部寄存器数据MMA8452_Stop;发送停止信号*uchai Siiigle_Read_MMA8452(uchar REG_Add冀ss) ( uch

12、ar REG_data;MMA8452_Start();MMA8452_SendByte(SlaveAddress);MMA8452_SendByte(REG_Addiess);始MMA8452_Stail();MMA8452_SendByte(SlaveAddress+l);REG_data=NCvIA8452_RecvByte();MMA8452_SendACK( 1);MMA8452_Stop。;return REG_data;*:$:*/连续读出MMA8452内部加速度数据,地址范W 0 x01-0 x06/*void Multiple_Read_MMA8452(void) ( ucl

13、iar i;MMA8452_Start();MMA8452_SendByte(SlaveAddress);MMA8452_SendByte(0 x01);起始信号发送设备地址+写信号发送存储单元地址,从0 x01开始MMA8452_Start();MMA8452_SendByte(SlaveAddress+l);fbr (1=0; i6; i+)BUFi = MMA8452_RecvByte();if (i = 5)/IMMA8452_SendACK( 1);else起始信号发送设备地址+读信号/连续读取6个地址数据,存储中BUF/BUF0存储0 x32地址中的数据最后一个数据需要回NOACK

14、MMA8452_SendACK(0);回应ACK)停止信号MMA8452_S top。;Delay5nisQ;void Write_diift_MMA8452(int Lint z )MMA8452_Start();MNIA8452_SendByte(SlaveAddiess);MMA8452_SendByte(0 x2F);MMA8452-SendByte(i);MMA8452_Start();MNIA8452_SendByte(SlaveAddiess);MMA8452-SendByte(0 x30);MMA8452-SendByte(j);MMA8452_Start();MN

15、IA8452_SendByte(SlaveAddiess);MMA8452-SendByte(0 x31);MMA8452-SendByte(z);*/*void Read_diift_MMA8452(void)uchar i;起始信号/发送设备地址+写信号发送存储单元地址,从0 x32开始MMA8452_Stail();MMA8452_SendByte(SlaveAddress);MMA8452_SendByte(0 xl0);MMA8452_Start();MMA8452-SendByte(SlaveAddress+l);fbr (1=0; i0 x7f)dis_data=(dis_dat

16、a-l)A0 xff)&0 x7f); 取反并屏掉符号位 temp 1=(float)dis_data/63; temp! *=100; dis_data=BUFl;if(dis_data0 x7f)dis_data=(dis_data-l)A0 xff)&0 x7f); 取反并屏掉符号位 temp2=(float)dis_data/63; temp2*=100;dis_data=BUF2;if(dis_data0 x7f)dis_data=(dis_data-1 )A0 xff)&0 x7f); /取反并屏掉符号位 tenip3=(float)dis_data/63;temp3*=100;W

17、rite_drift_MMA8452(i,j,k);if(temp2! =0)&flag2)J+;elseflag2=0:if(temp30 x7f)(dis_data=Oxffdis_data;sign_bit=l;)elsesign_bit=O;确定正负符号位temp=(float)dis_data/63;temp*=100:conveision(temp);计算数据和显示LCD_write_char(0,0,56); /X LCD_write_char(1026); iRsign_bit=l)LCD_write_chai(2013);/-else LCD_write_chai(2,0,0

18、); 显示正负符号位 LCD_write_char(3,0,bai);LCD_write_char(4,0,14); /.LCD_write_char(5 Qshi);LCD_write_char(6,0,ge);LCD_write_char(7,0,G);/显示Y轴dis_data=BUF2;if(dis_data0 x7f)(dis data=Oxfidis data;sign_bit=l;)elsesign_bit=O;确定正负符号位temp=(float)dis_data/63;temp*=100;conversion(temp);计算数据和显示LCD_write_char(O.JL,57); /YLCD_write_char( 1,1,26); /:iRsign_bit=

温馨提示

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

评论

0/150

提交评论