《L3G4200D 51单片机IIC 测试程序》由会员分享,可在线阅读,更多相关《L3G4200D 51单片机IIC 测试程序(11页珍藏版)》请在金锄头文库上搜索。
1、/这是 L3G4200D 51 单片机 IIC 测试程序/这是 1602 头文件 保存为 1602.h#define DataPort P0 /LCD1602 数据端口sbitLCD_RS=P2人4;/LCD1602 命令端口sbitLCD_RW=P2A5;/LCD1602 命令端口sbitLCD_EN=P2A6;/LCD1602 命令端口#include #define uchar unsigned char void WaitForEnable(void) DataPort=0xff;LCD_RS=0;LCD_RW=1;_nop_();LCD_EN=1;_nop_();_nop_();wh
2、ile(DataPort&0x80);LCD_EN=0;void WriteCommandLCD(uchar CMD,uchar Attribc) if(Attribc) WaitForEnable();LCD_RS=0;LCD_RW=0;_nop_();DataPort=CMD;_nop_();LCD_EN=1;_nop_();_nop_();LCD_EN=0;void WriteDataLCD(uchar dataW)WaitForEnable();LCD_RS=1;LCD_RW=0;_nop_();DataPort=dataW;_nop_();LCD_EN=1;_nop_();_nop_
3、();LCD_EN=0;void InitLcd()WriteCommandLCD(0x38,1);WriteCommandLCD(0x08,1);WriteCommandLCD(0x01,1);WriteCommandLCD(0x06,1);WriteCommandLCD(0x0c,1);void DisplayOneChar(uchar X,uchar Y,uchar DData) Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;WriteCommandLCD(X,0);WriteDataLCD(DData);/下面是主程序部分/ / / / Tx Tx Tx Tx Tx
4、Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx / L3G4200D三轴陀螺仪IIC测试程序 / 使用单片机 STC89C51/ 晶振:11.0592M/ 显示: LCD1602/ 编译环境 Keil uVision2/ 参考 宏晶网站 24c04 通信程序/ 时间: 2011年3月1日/ / / Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx
5、Tx Tx Tx Tx Tx Tx Tx Tx Tx#include #include 1602.h #include #include #include #define uchar unsigned char#define uint unsigned intsbit SCL=P1A0 ; /IIC时钟引脚定义sbitSDA=P1T/IIC 数据引脚定义#define WHO_AM_I 0x0F#define CTRL_REG1 0x20/ 0010 0000#define CTRL_REG2 0x21#define CTRL_REG3 0x22#define CTRL_REG4 0x23#d
6、efine CTRL_REG5 0x24#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 SlaveAddress 0xD2/定义器件在 IIC 总线中的从地址,根据 ALT ADDRESS 地址引脚不同修改typedef unsigned char BYTE;typedef unsigned short WORD;BYTE BUF8; /接收数据缓存区long temp;uchar ge,
7、shi,bai,qian,wan;/显示变量int dis_data;变量/int temp;void delay(unsigned int k);void InitL3G4200D(uchar );/初始化 L3G4200Dvoid conversion(uint temp_data);void Single_WriteL3G4200D(uchar REG_Address,uchar REG_data);/单个写入数据uchar Single_ReadL3G4200D(uchar REG_Address);/单个读取内部寄存器数据void Delay5ms();/void Multiple_
8、readL3G4200D(void);/void Delay5us();void L3G4200D_Start();void L3G4200D_Stop();void L3G4200D_SendACK(bit ack);void L3G4200D_RecvACK();void L3G4200D_SendByte(BYTE dat);BYTE L3G4200D_RecvByte();void display_x();void display_y();void display_z();/void conversion(uint temp_data) temp_data*=0.875; wan=te
9、mp_data/10000+0x30 ;temp_data=temp_data%10000; /取余运算 qian=temp_data/1000+0x30 ;temp_data=temp_data%1000;/取余运算bai=temp_data/100+0x30 ;temp_data=temp_data%100;/取余运算shi=temp_data/10+0x30 ;temp_data=temp_data%10;/取余运算ge=temp_data+0x30;/ *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1*
10、 *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* / / Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx /void delay(unsigned int k)unsigned int i,j;for(i=0;ik;i+)for(j=0;j121;j+);/ Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx
11、Tx Tx Tx Tx Tx Tx*1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1*Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx延时 5 微秒(STC90C52RC12M)不同的工作环境,需要调
12、整此函数,注意时钟过快时需要修改当改用1T的MCU时,请调整此延时函数/Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx /void Delay5us()_nop_();_nop_();_nop_();_nop_();/延时 5 毫秒(STC90C52RC12M)不同的工作环境,需要调整此函数当改用1T的MCU时,请调整此延时函数/*void Delay5ms()WORD n = 560;while (n-);*/ T
13、x Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx起始信号*1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* /Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx /void L3G4200D_Start()/拉高数据线/拉高时钟线/延时/产生下降沿/延时/拉低时钟线SDA = 1;SCL = 1;Delay5us();SDA = 0;Delay5us();SCL = 0;/ *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1*