//*************************************** // GY-52 MPU3050 IIC测试程序 // 使用单片机STC89C51 // 晶振:11.0592M // 显示:LCD1602 // 编译环境 Keil uVision2 // 参考宏晶网站24c04通信程序 // 时间:2011年9月1日 // QQ:531389319 //**************************************** #include #include //Keil library #include //Keil library #include #define uchar unsigned char #define uint unsigned int #define DataPort P0 //LCD1602数据端口 sbit SCL=P1^0; //IIC时钟引脚定义 sbit SDA=P1^1; //IIC数据引脚定义 sbit LCM_RS=P2^0; //LCD1602命令端口 sbit LCM_RW=P2^1; //LCD1602命令端口 sbit LCM_EN=P2^2; //LCD1602命令端口 //定义MPU3050内部地址******************** #define WHO 0x00 #define SMPL 0x15 #define DLPF 0x16 #define INT_C 0x17 #define INT_S 0x1A #define TMP_H 0x1B #define TMP_L 0x1C #define GX_H 0x1D #define GX_L 0x1E #define GY_H 0x1F #define GY_L 0x20 #define GZ_H 0x21 #define GZ_L 0x22 #define PWR_M 0x3E //**************************** #define SlaveAddress 0xD0 //定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改 typedef unsigned char BYTE; typedef unsigned short WORD; uchar dis[4]; //显示数组 BYTE BUF[8]; //接收数据缓存区 int dis_data; //变量 int Temperature,Temp_h,Temp_l; void delay(unsigned int k); void InitLcd(); //初始化lcd1602 void InitMPU3050(); //初始化MPU3050 void WriteDataLCM(uchar dataW); void WriteCommandLCM(uchar CMD,uchar Attribc); void DisplayOneChar(uchar X,uchar Y,uchar DData); void DisplayListChar(uchar X,uchar Y,uchar *DData,L); void Single_WriteMPU3050(uchar REG_Address,uchar REG_data); //单个写入数据 uchar Single_ReadMPU3050(uchar REG_Address); //单个读取内部寄存器数据 //****************************************模拟IIC使用函数 void Delay5us(); void MPU3050_Start(); void MPU3050_Stop(); void MPU3050_SendACK(bit ack); bit MPU3050_RecvACK(); void MPU3050_SendByte(BYTE dat); BYTE MPU3050_RecvByte(); void MPU3050_ReadPage(); void MPU3050_WritePage(); //**************************************** void display_x(); void display_y(); void display_z(); //**************************************** void lcd_printf(uchar *s,int temp_data) { if(temp_data<0){ temp_data=-temp_data; *s='-'; } else *s=' '; *++s =temp_data/100+0x30; temp_data=temp_data%100; //取余运算 *++s =temp_data/10+0x30; temp_data=temp_data%10; //取余运算 *++s =temp_data+0x30; } /*******************************/ void delay(unsigned int k) { unsigned int i,j; for(i=0;i