6050 STC89C52 单片机LCD调试程序.doc_第1页
6050 STC89C52 单片机LCD调试程序.doc_第2页
6050 STC89C52 单片机LCD调试程序.doc_第3页
6050 STC89C52 单片机LCD调试程序.doc_第4页
6050 STC89C52 单片机LCD调试程序.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

/*MPU6050?IIC测试程序?使用单片机STC89C52晶振:11.0592M显示:LCD1602功能:?显示加速度计和陀螺仪的10位原始数据*/#include#include#include/Keil library #include /Keil library #include typedef unsigned char uchar;typedef unsigned short ushort;typedef unsigned int uint; /*?定义51单片机端口?*/#define DataPort P0 /LCD1602数据端口sbit SCL=P10; /IIC时钟引脚定义sbit SDA=P11; /IIC数据引脚定义sbit LCM_RS=P24; /LCD1602命令端口sbit LCM_RW=P25; /LCD1602命令端口sbit LCM_EN=P26; /LCD1602命令端口 /* 定义MPU6050内部地址?*/#define SMPLRT_DIV 0x19 /陀螺仪采样率,典型值:0x07(125Hz)?#define CONFIG 0x1A /低通滤波频率,典型值:0x06(5Hz)?#define GYRO_CONFIG 0x1B /陀螺仪自检及测量范围, /典型值:0x18(不自检,2000deg/s)?#define ACCEL_CONFIG 0x1C /加速计自检、测量范围及高通滤波频率 /典型值:0x01(不自检,2G,5Hz)?#define ACCEL_XOUT_H 0x3B #define ACCEL_XOUT_L 0x3C#define ACCEL_YOUT_H 0x3D#define ACCEL_YOUT_L 0x3E#define ACCEL_ZOUT_H 0x3F#define ACCEL_ZOUT_L 0x40#define TEMP_OUT_H 0x41#define TEMP_OUT_L 0x42#define GYRO_XOUT_H 0x43#define GYRO_XOUT_L 0x44#define GYRO_YOUT_H 0x45#define GYRO_YOUT_L 0x46#define GYRO_ZOUT_H 0x47#define GYRO_ZOUT_L 0x48#define PWR_MGMT_1 0x6B /电源,典型值:0x00(正常启用)#define WHO_AM_I 0x75 /IIC地址寄存器(默认数值0x68,只读)?#define SlaveAddress 0xD0 /IIC写入时的地址字节数据,+1为读取?/*?/定义类型及变量?/*?uchar dis4;/显示数字(-511至512)的字符数组int dis_data;/变量/int?Temperature,Temp_h,Temp_l;?/温度及高低位数据?/*?/函数声明?/*?void delay(unsigned int k);/延时LCD相关函数?void InitLcd(); /初始化lcd1602?void lcd_printf(uchar *s,int temp_data);void WriteDataLCM(uchar dataW); /LCD数据?void WriteCommandLCM(uchar CMD,uchar Attribc); /LCD指令?void DisplayOneChar(uchar X,uchar Y,uchar DData); /显示一个字符?void DisplayListChar(uchar X,uchar Y,uchar *DData,L); /显示字符串MPU6050操作函数void InitMPU6050(); /初始化MPU6050?void Delay5us();void I2C_Start();void I2C_Stop();void I2C_SendACK(bit ack); bit I2C_RecvACK();void I2C_SendByte(uchar dat);uchar I2C_RecvByte();void I2C_ReadPage();void I2C_WritePage();void display_ACCEL_x();void display_ACCEL_y();void display_ACCEL_z();uchar Single_ReadI2C(uchar REG_Address); /读取I2C数据?void Single_WriteI2C(uchar REG_Address,uchar REG_data); /向I2C写入数据?/*?/整数转字符串?/*?void lcd_printf(uchar *s,int temp_data) if(temp_data0) 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;ik;i+)for(j=0;j121;j+);/*/LCD1602初始化/*void InitLcd()WriteCommandLCM(0x38,1); WriteCommandLCM(0x08,1); WriteCommandLCM(0x01,1); WriteCommandLCM(0x06,1); WriteCommandLCM(0x0c,1); DisplayOneChar(0,0,A); DisplayOneChar(0,1,G);/*/LCD1602写允许/*void WaitForEnable(void)DataPort=0xff;LCM_RS=0;LCM_RW=1;_nop_();LCM_EN=1;_nop_();_nop_();while(DataPort&0x80);LCM_EN=0;/*/LCD1602写入命令/*?void WriteCommandLCM(uchar CMD,uchar Attribc)if(Attribc) WaitForEnable();LCM_RS=0;LCM_RW=0;_nop_();DataPort=CMD;_nop_(); LCM_EN=1;_nop_();_nop_();LCM_EN=0;/*/LCD1602写入数据? /*void WriteDataLCM(uchar dataW)WaitForEnable();LCM_RS=1;LCM_RW=0;_nop_();DataPort=dataW;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;/*/LCD1602写入一个字符?/*void DisplayOneChar(uchar X,uchar Y,uchar DData)Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;WriteCommandLCM(X,0);WriteDataLCM(DData);/*/LCD1602显示字符串?/*void DisplayListChar(uchar X,uchar Y,uchar *DData,L)uchar ListLength=0; Y&=0x1; X&=0xF; while(L-) DisplayOneChar(X,Y,DDataListLength);ListLength+;X+; /*/延时5微秒(STC90C52RC12M)/不同的工作环境,需要调整此函数/当改用1T的MCU时,请调整此延时函数/*void Delay5us()_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); /*?/I2C起始信号?/*?void I2C_Start()SDA=1; /拉高数据线SCL=1; /拉高时钟线Delay5us(); /延时SDA=0; /产生下降沿Delay5us(); /延时SCL=0; /拉低时钟线/*/I2C停止信号/*void I2C_Stop()SDA=0; /拉低数据线SCL=1; /拉高时钟线Delay5us();/延时SDA=1; /产生上升沿Delay5us(); /延时/*/I2C发送应答信号/入口参数:/ack(0:ACK 1:NAK)/*void I2C_SendACK(bit ack)SDA=ack; /写应答信号SCL=1; /拉高时钟线 Delay5us(); /延时SCL=0; /拉低时钟线Delay5us(); /延时/*?/I2C接收应答信号?/*?bit I2C_RecvACK()SCL=1;/拉高时钟线Delay5us(); /延时CY=SDA; /读应答信号SCL=0; /拉低时钟线Delay5us(); /延时return CY;/*?/向I2C总线发送一个字节数据?/*?void I2C_SendByte(uchar dat) uchar i; for(i=0;i8;i+) /8位计数器 dat=1; /移出数据的最高位 SDA=CY; /送数据口 SCL=1; /拉高时钟线 Delay5us(); /延时 SCL=0; /拉低时钟线 Delay5us(); /延时 I2C_RecvACK();/*?/从I2C总线接收一个字节数据?/*?uchar I2C_RecvByte()uchar i;uchar dat=0;SDA=1; /使能内部上拉,准备读取数据, for(i=0;i8;i+)/8位计数器 dat=1; SCL=1; /拉高时钟线 Delay5us();/延时 dat|=SDA; /读数据 SCL=0; /拉低时钟线 Delay5us(); /延时 return dat;/*?/向I2C设备写入一个字节数据?/*?void Single_WriteI2C(uchar REG_Address,uchar REG_data)I2C_Start(); /起始信号I2C_SendByte(SlaveAddress); /发送设备地址+写信号I2C_SendByte(REG_Address); /内部寄存器地址,I2C_SendByte(REG_data); /内部寄存器数据,I2C_Stop(); /发送停止信号/*?/从I2C设备读取一个字节数据?/*?uchar Single_ReadI2C(uchar REG_Address)uchar REG_data;I2C_Start();/起始信号?I2C_SendByte(SlaveAddress); /发送设备地址+写信号?I2C_SendByte(REG_Address); /发送存储单元地址,从0开始?I2C_Start(); /起始信号?I2C_SendByte(SlaveAddress+1); /发送设备地址+读信号REG_data=I2C_RecvByte(); /读出寄存器数据?I2C_SendACK(1); /接收应答信号I2C_Stop(); /停止信号return REG_data;/*?/初始化MPU6050?/*?void InitMPU6050()Single_WriteI2C(PWR_MGMT_1,0x00); /解除休眠状态Single_WriteI2C(SMPLRT_DIV,0x07);Single_WriteI2C(CONFIG,0x06);Single_WriteI2C(GYRO_CONFIG,0x18);Single_WriteI2C(ACCEL_CONFIG,0x01);/*?/合成数据?/*?int GetData(uchar REG_Address)char H,L;H=Single_ReadI2C(REG_Address);L=Single_ReadI2C(REG_Address+1);return (H8)+L; /合成数据/*?/在1602上显示10位数据?/*?void Display10BitData(int value,uchar x,uchar y)value/=64;/转换为10位数据lcd_printf(dis, value);/转换数据显示DisplayListChar(x,y,dis,4);/启始列,行,显示数组,显示长度void main()delay(500); /上电延时InitLcd(); /液晶初始化InitMPU6050(); /初始化MPU6050 delay(150);while(1)Display10BitData(GetData(ACCEL_XOUT_H

温馨提示

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

评论

0/150

提交评论