下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/* /qmc5883l iic测试程序/使用单片机stc15w408as /qmc5883 是一款国产三轴磁阻传感器/其内部寄存器设置与霍尼韦尔公司生产的hmc5883 /不尽相同,不能直接套用hmc5883 的测试程序,否/则无法获得角度数据。/下面给出的测试程序可以通过串口助手/在 pc 机上直接读出qmc5883 输出的角度数据。/宜昌三峡电院电子科技创新协会/* #include stc15f2k60s2.h #include intrins.h #include math.h #include stdio.h #define slave_address 0 x1a /hmc5883
2、 为 0 x3c typedef unsigned int u16; typedef unsigned char u8; u8 buf8=0; sbit scl=p12; /iic 时钟线sbit sda=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); /
3、 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 = 0 x50; auxr |= 0 x01; auxr &= 0 xfb; t2l = 0 xe8; t2h = 0 xff
4、; auxr |= 0 x10; 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
5、= 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; /进位标志
6、读应答信号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 d
7、at = 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_
8、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 开始/
9、qmc5883_start(); /起始信号/ qmc5883_sendbyte(slave_address+1); /发送设备地址 +读信号/ reg_data=qmc5883_recvbyte(); /读出寄存器数据/ qmc5883_sendack(1); / qmc5883_stop(); /停止信号/ return reg_data; / /* /连续读出qmc5883 内部角度数据,地址范围0 x000 x05 /* void multiple_read_qmc5883(void) u8 i; qmc5883_start(); /起始信号qmc5883_sendbyte(slave
10、_address); /发送设备地址 +写信号qmc5883_sendbyte(0 x00); /发送存储单元地址,从0 x00 开始 ;hmc5883 从 0 x03 开始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_sendac
11、k(0); /应答 ack qmc5883_stop(); /停止信号delay(5); /初始化 qmc5883 ,注意与hmc5883 的区别void init_qmc5883() single_write_qmc5883(0 x09,0 x0d); /控制寄存器配置single_write_qmc5883(0 x0b,0 x01); /设置清除时间寄存器single_write_qmc5883(0 x20,0 x40); / single_write_qmc5883(0 x21,0 x01); / void main() / u16 i; int x=0,y=0,z=0; double
12、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 register z=buf5 0 x7fff
13、) x-=0 xffff; if(y0 x7fff) y-=0 xffff; if(z0 x7fff) z-=0 xffff; /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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现代简约风格与科技公司办公环境的融合
- 现代物流技术与医疗物资保障体系
- 沟通技巧在教育工作中的创新应用
- 环保技术在现代城市建设中的应用
- 物流信息技术在商业领域的应用
- Unit 3 Where did you go?PartB (说课稿)-2023-2024学年人教PEP版英语六年级下册
- 2《烛之武退秦师》说课稿-2024-2025学年高一语文下学期同步说课稿(统编版必修下册)
- 2024新教材高中地理 第四章 区域发展战略 第二节 我国区域发展战略说课稿 湘教版必修第二册
- Unit3 Amazing animals(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册001
- 2024年高中化学 第三章 晶体结构与性质 章末整合说课稿 新人教版选修3
- 运用PDCA降低住院患者跌倒-坠床发生率
- 2025届高中数学一轮复习专练:椭圆(含解析)
- 立春气象与生活影响模板
- 中国服装零售行业发展环境、市场运行格局及前景研究报告-智研咨询(2025版)
- 初一英语阅读理解100篇七年级上册英语阅读理解及答案
- 2024年广东省深圳市中考道德与法治试题卷
- 汽车车身密封条设计指南
- DB4101-T 121-2024 类家庭社会工作服务规范
- DB53∕T 1269-2024 改性磷石膏用于矿山废弃地生态修复回填技术规范
- 2024建安杯信息通信建设行业安全竞赛题库(试题含答案)
- JBT 14727-2023 滚动轴承 零件黑色氧化处理 技术规范 (正式版)
评论
0/150
提交评论