//*************************************** // GY-50 L3G4200D 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命令端口 //**********L3G4200D内部寄存器地址********* #define WHO_AM_I 0x0F #define CTRL_REG1 0x20 #define CTRL_REG2 0x21 #define CTRL_REG3 0x22 #define CTRL_REG4 0x23 #define CTRL_REG5 0x24 #define REFERENCE 0x25 #define OUT_TEMP 0x26 #define STATUS_REG 0x27 #define OUT_X_L 0x28 #define OUT_X_H 0x29 #define OUT_Y_L 0x2A #define OUT_Y_H 0x2B #define OUT_Z_L 0x2C #define OUT_Z_H 0x2D #define FIFO_CTRL_REG 0x2E #define FIFO_SRC_REG 0x2F #define INT1_CFG 0x30 #define INT1_SRC 0x31 #define INT1_TSH_XH 0x32 #define INT1_TSH_XL 0x33 #define INT1_TSH_YH 0x34 #define INT1_TSH_YL 0x35 #define INT1_TSH_ZH 0x36 #define INT1_TSH_ZL 0x37 #define INT1_DURATION 0x38 //**************************************** #define SlaveAddress 0xD2 //定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改 typedef unsigned char BYTE; typedef unsigned short WORD; uchar dis[4]; //显示数组 BYTE BUF[8]; //接收数据缓存区 uchar ge,shi,bai,qian,wan; //显示变量 int dis_data; //变量 float temp; void delay(unsigned int k); void InitLcd(); //初始化lcd1602 void InitL3G4200D(); //初始化L3G4200D 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_WriteL3G4200D(uchar REG_Address,uchar REG_data); //单个写入数据 uchar Single_ReadL3G4200D(uchar REG_Address); //单个读取内部寄存器数据 //------------------------------------ void Delay5us(); void L3G4200D_Start(); void L3G4200D_Stop(); void L3G4200D_SendACK(bit ack); bit L3G4200D_RecvACK(); void L3G4200D_SendByte(BYTE dat); BYTE L3G4200D_RecvByte(); void L3G4200D_ReadPage(); void L3G4200D_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