摇摆检测通讯程序
0赞
发表于 3/1/2012 2:52:45 PM
阅读(4004)
#include#include"IIC.h" #include "OCM12864.h" #define slave 0xA6 #define time 10000 #define count 5 //读取字节数=count+1; int i ; unsigned char Aspeed[6]; //从ADXL345寄存器中读出来的6个值组成的数组 extern unsigned int ValueX,ValueY,ValueZ; // 对取出的数重新组合,为绝对值 extern int XAPP,YAPP,ZAPP; //处理后的加速度值 void delay(int lengh) { while(lengh>0) lengh--; } void write(unsigned char slvadd,unsigned char subadd,char data) { I2C1MTX=subadd; // 装载子地址 I2C1ADR=slvadd; // 装载从机地址 while((I2C1FSTA&0X30)!=0X00){} // 等待FIFO发送成功 // I2C1MTX=data; // 向子地址中装载数据 while((I2C1FSTA&0X30)!=0X00){} // 等待FIFO发送完成 delay(time); // I2C1CCNT=0X80; // 停止信号 } void read(unsigned char slvadd,unsigned char subadd) { I2C1MTX=subadd; // 装载子地址 I2C1ADR=slvadd; // 装载从机地址 while((I2C1FSTA & 0X30)!= 0x00) {} // 等待FIFO发送成功 delay(4000); // 长延时 I2C1CNT=count; // 在从机中一次读出的字节数 (默认值为0,表示一个字节) I2C1ADR=slvadd+1; // 装载从机地址(LSB=1,主机读) // while((I2C1FSTA&0XC0)!=0X80){} // 等待数据接收完成 // I2C1CCNT=0X80; // 停止信号 } void Init_ADXL345() { write(slave,0x31,0x0B); //测量范围,正负16g,13位模式 write(slave,0x2C,0x08); //速率设定为12.5 参考pdf13页 write(slave,0x2D,0x08); //选择电源模式 参考pdf24页 write(slave,0x2E,0x80); //使能 DATA_READY 中断 write(slave,0x1E,0x00); //X 偏移量 根据测试传感器的状态写入pdf29页 write(slave,0x1F,0x00); //Y 偏移量 根据测试传感器的状态写入pdf29页 write(slave,0x20,0x05); //Z 偏移量 根据测试传感器的状态写入pdf29页 } void Init_IIC(void) { // GP0CON=0X00; GP1CON=0X2200; //配置P1.2,P1.3 为SCL和SDA; I2C1DIV=0XCFCF;//配置串行时钟的速率为100kHz //400k 0x3232 I2C1CFG=0X82;//使能主机并且使能主机时钟 Init_ADXL345(); } void Value_ADXL345() { // float temp; delay(10000); // write(slave,0x31,0x0b); // read(slave,0x00); read(slave,0x32); for(i=0;i<6;i++) { while((I2C1FSTA&0XC0)!=0X80){} Aspeed[i]=I2C1MRX; // delay(400);导致出错 } // GP4DAT=0X04000000; ValueX=((Aspeed[1]<<8))|Aspeed[0] ; if(ValueX&0x1000) { ValueX=0xffff-ValueX+1; disp_str(68,2,"-"); } else { disp_str(70,2,"+"); } ValueY=((Aspeed[3]<<8))|Aspeed[2] ; if(ValueY&0x1000) { ValueY=0xffff-ValueY+1; disp_str(68,4,"-"); } else { disp_str(70,4,"+"); } ValueZ=((Aspeed[5]<<8))|Aspeed[4] ; if(ValueZ&0x1000) { ValueZ=0xffff-ValueZ+1; disp_str(68,6,"-"); } else { disp_str(70,6,"+"); } XAPP=ValueX*3.9; YAPP=ValueY*3.9; ZAPP=ValueZ*3.9; }
