




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*/QMC5883L IIC测试程序/使用单片机STC15W408AS/晶振频率:11.0592M/QMC5883是一款国产三轴磁阻传感器/其内部寄存器设置与霍尼韦尔公司生产的HMC5883/不尽相同,不能直接套用HMC5883的测试程序,否/则无法获得角度数据。/下面给出的测试程序可以通过串口助手/在PC机上直接读出QMC5883输出的角度数据。/宜昌三峡电院电子科技创新协会/*#include STC15F2K60S2.H#include intrins.h#include math.h#include stdio.h#define Slave_Address 0x1a /HMC5883为0x3ctypedef unsigned int u16;typedef unsigned char u8;u8 BUF8=0; sbitSCL=P12; /IIC时钟线sbitSDA=P13; /IIC数据线void Delay_5us();void Delay(u16 t);void InitUart();void QMC5883_Start();void QMC5883_Stop();void QMC5883_SendACK(bit ack);bit QMC5883_RecvACK();/void QMC5883_SendByte(u8 dat); /u8 QMC5883_RecvByte();/ void Single_Write_QMC5883(u8 REG_Address,u8 REG_data);/u8 Single_Read_QMC5883(u8 REG_Address);void Multiple_Read_QMC5883(void);void Init_QMC5883();/STC15W408AS无定时器1,只能用定时器2作串口波特率发生器void InitUart() SCON = 0x50;AUXR |= 0x01;AUXR &= 0xFB;T2L = 0xE8;T2H = 0xFF;AUXR |= 0x10; ES = 1; EA = 1; TI=1;void Delay(u16 t)u16 i,j;for(i=t;i0;i-)for(j=121;j0;j-);void Delay_5us() u8 x;x = 20;while (-x);/*起始信号*/void QMC5883_Start() SDA = 1; /拉高数据线 SCL = 1; /拉高时钟线 Delay_5us(); /延时 SDA = 0; /产生下降沿 Delay_5us(); /延时 SCL = 0; /拉低时钟线/*停止信号*/void QMC5883_Stop() SDA = 0; /拉低数据线 SCL = 1; /拉高时钟线 Delay_5us(); /延时 SDA = 1; /产生上升沿 Delay_5us(); /延时/*发送应答信号入口参数:ack (0:ACK 1:NAK)*/void QMC5883_SendACK(bit ack) SDA = ack; /写应答信号 SCL = 1; /拉高时钟线 Delay_5us(); /延时 SCL = 0; /拉低时钟线 Delay_5us(); /延时/*接收应答信号*/bit QMC5883_RecvACK() SCL = 1; /拉高时钟线 Delay_5us(); /延时 CY = SDA; /进位标志 读应答信号 SCL = 0; /拉低时钟线 Delay_5us(); /延时 return CY;/*向IIC总线发送一个字节数据*/void QMC5883_SendByte(u8 dat) u8 i; for (i=0; i8; i+) /8位计数器 dat = 1; /移出数据的最高位 SDA = CY; /送数据口 SCL = 1; /拉高时钟线 Delay_5us(); /延时 SCL = 0; /拉低时钟线 Delay_5us(); /延时 QMC5883_RecvACK();/*从IIC总线接收一个字节数据*/u8 QMC5883_RecvByte() u8 i; u8 dat = 0; SDA = 1; /使能内部上拉,准备读取数据, for (i=0; i8; i+) /8位计数器 dat = 1; SCL = 1; /拉高时钟线 Delay_5us(); /延时 dat |= SDA; /读数据 SCL = 0; /拉低时钟线 Delay_5us(); /延时 return dat;/*写入单字节数据*void Single_Write_QMC5883(u8 REG_Address,u8 REG_data) QMC5883_Start(); /起始信号 QMC5883_SendByte(Slave_Address); /发送设备地址+写信号 QMC5883_SendByte(REG_Address); /内部寄存器地址,请参考中文pdf QMC5883_SendByte(REG_data); /内部寄存器数据,请参考中文pdf QMC5883_Stop(); /发送停止信号/*读取单字节数据*/u8 Single_Read_QMC5883(u8 REG_Address)/ /u8 REG_data;/QMC5883_Start(); /起始信号/QMC5883_SendByte(Slave_Address); /发送设备地址+写信号/QMC5883_SendByte(REG_Address); /发送存储单元地址,从0开始/QMC5883_Start(); /起始信号/QMC5883_SendByte(Slave_Address+1); /发送设备地址+读信号/REG_data=QMC5883_RecvByte(); /读出寄存器数据/QMC5883_SendACK(1); /QMC5883_Stop(); /停止信号/ return REG_data; /*/连续读出QMC5883内部角度数据,地址范围0x000x05/*void Multiple_Read_QMC5883(void) u8 i; QMC5883_Start(); /起始信号 QMC5883_SendByte(Slave_Address); /发送设备地址+写信号 QMC5883_SendByte(0x00); /发送存储单元地址,从0x00开始;HMC5883从0x03开始 QMC5883_Start(); /起始信号 QMC5883_SendByte(Slave_Address+1); /发送设备地址+读信号 for (i=0; i6; i+) /连续读取6个地址数据,存储中BUF BUFi = QMC5883_RecvByte(); /BUF0存储数据 if (i = 5) QMC5883_SendACK(1); /最后一个数据需要回非应答NOACK else QMC5883_SendACK(0); /应答ACK QMC5883_Stop(); /停止信号 Delay(5);/初始化QMC5883,注意与HMC5883的区别void Init_QMC5883() Single_Write_QMC5883(0x09,0x0d); /控制寄存器配置Single_Write_QMC5883(0x0b,0x01); /设置清除时间寄存器Single_Write_QMC5883(0x20,0x40); /Single_Write_QMC5883(0x21,0x01); /void main()/u16 i;int X=0,Y=0,Z=0; double Angle_XY=0,Angle_XZ=0,Angle_YZ=0;InitUart(); Delay(200);/Init_Lcd();Init_QMC5883();Delay(300);while(1) Multiple_Read_QMC5883();/连续读取三轴角度数据,存储在BUF中 X=BUF1 8 | BUF0; /Combine MSB and LSB of X Data output register 最高有效位Y=BUF3 8 | BUF2; /Combine MSB and LSB of Y Data output registerZ=BUF5 0x7fff) X-=0xffff; if(Y0x7fff) Y-=0xffff;if(Z0x7fff) Z-=0xffff; /printf(X=%iVn,X); /输出int型数据 /Delay(2000); /printf(Y=%iVn,Y); /输出int型数据 /Delay(2000); / printf(Z=%iVn,Z); /输出int型数据 / Delay(2000);Angle_XY= atan2(double)Y,(double)X) * (180 / 3.14159265) + 180; /计算XY平面角度/Angle_XY*=10;printf(XY=%fDn,Angle_XY); /输出float型数据 Delay(1000);Angle_XZ= atan2(double)Z,(double)X) * (180 / 3.14159265) + 180; /计算XZ平面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年江苏泰州市第五人民医院招聘专业技术人员10人笔试备考题库及参考答案详解1套
- 人教版五年级语文上册月考试卷全集
- 三明市三明市行政服务中心管委会直属事业单位2025年公开选聘工作人员笔试历年参考题库附带答案详解
- 家庭教育心得与反思范文集
- IT技术支持工作流程与规范
- 消防设施验收标准操作流程及报表
- 2025年秀洲区塘汇街道公开招聘国企工作人员笔试参考题库附带答案详解
- 2025年口腔医学口腔疾病诊断治疗技能测试答案及解析
- 水利工程水质监测规程
- 湿式除尘设备维护保养实操指南
- 2025年度反洗钱阶段考试培训试考试题库(含答案)
- 收割芦苇施工方案
- 普通黄金现货购买合同8篇
- 三力测试考试题库及答案视频讲解
- 2025年河南省人民法院聘用书记员考试试题及答案
- 2025年中学教师资格考试《综合素质》核心考点与解析
- 口腔冠延长术
- 部编版七年级语文上册《闻王昌龄左迁龙标遥有此寄》课件
- 诊所经营管理课件
- 2024年江苏省连云港市辅警协警笔试笔试模拟考试(含答案)
- 铁路工务介入管理办法
评论
0/150
提交评论