android 磁场传感器 罗盘,HMC5883L电子指南针罗盘模块 GY-271三轴磁场传感器 的相关教程 带Arduino 51源代码...

//***************************************

// HMC5883 51串口测试程序

// 使用单片机STC89C51

// 晶振:11.0592M

// 显示:PC串口

// 编译环境 Keil uVision2

// 参考宏晶网站24c04通信程序

// 时间:2011年3月1日

//****************************************

#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数据引脚定义

#define        SlaveAddress   0x3C          //定义器件5883在IIC总线中的从地址

typedef unsigned char BYTE;

typedef unsigned short WORD;

BYTE BUF[8];                         //接收数据缓存区

uchar ge,shi,bai,qian,wan;           //显示变量

int  dis_data;                       //变量

//************

//************

void delay(unsigned int k);

void Init_HMC5883(void);            //初始化5883

void conversion(uint temp_data);

void  Single_Write_HMC5883(uchar REG_Address,uchar REG_data);   //单个写入数据

//uchar Single_Read_HMC5883(uchar REG_Address);                   //单个读取内部寄存器数据

void  Multiple_Read_HMC5883();                                  //连续的读取内部寄存器数据

//以下是模拟iic使用函数-------------

void Delay5us();

void Delay5ms();

void HMC5883_Start();

void HMC5883_Stop();

void HMC5883_SendACK(bit ack);

bit  HMC5883_RecvACK();

void HMC5883_SendByte(BYTE dat);

BYTE HMC5883_RecvByte();

void HMC5883_ReadPage();

void HMC5883_WritePage();

//-----------------------------------

//*********************************************

//串口初始化

//9600 bps @ 11.059 MHz

void init_uart()

{

TMOD=0x21;

TH1=0xfd;

TL1=0xfd;

SCON=0x50;

PS=1;      //串口中断设为高优先级别

TR0=1;           //启动定时器

TR1=1;

ET0=1;     //打开定时器0中断

ES=1;

}

//*********串口数据发送******************

void  SeriPushSend(uchar send_data)

{

SBUF=send_data;

while(!TI);TI=0;

}

//*********************************************************

void conversion(uint temp_data)

{

wan=temp_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;

}

/*******************************/

void delay(unsigned int k)

{

unsigned int i,j;

for(i=0;i

{

for(j=0;j<121;j++)

{;}}

}

/**************************************

延时5微秒(STC90C52RC@12M)

不同的工作环境,需要调整此函数,注意时钟过快时需要修改

当改用1T的MCU时,请调整此延时函数

**************************************/

void Delay5us()

{

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

}

/**************************************

延时5毫秒(STC90C52RC@12M)

不同的工作环境,需要调整此函数

当改用1T的MCU时,请调整此延时函数

**************************************/

void Delay5ms()

{

WORD n = 560;

while (n--);

}

/**************************************

起始信号

**************************************/

void HMC5883_Start()

{

SDA = 1;                    //拉高数据线

SCL = 1;                    //拉高时钟线

Delay5us();                 //延时

SDA = 0;                    //产生下降沿

Delay5us();                 //延时

SCL = 0;                    //拉低时钟线

}

/**************************************

停止信号

**************************************/

void HMC5883_Stop()

{

SDA = 0;                    //拉低数据线

SCL = 1;                    //拉高时钟线

Delay5us();                 //延时

SDA = 1;                    //产生上升沿

Delay5us();                 //延时

}

/**************************************

发送应答信号

入口参数:ack (0:ACK 1:NAK)

**************************************/

void HMC5883_SendACK(bit ack)

{

SDA = ack;                  //写应答信号

SCL = 1;                    //拉高时钟线

Delay5us();                 //延时

SCL = 0;                    //拉低时钟线

Delay5us();                 //延时

}

/**************************************

接收应答信号

**************************************/

bit HMC5883_RecvACK()

{

SCL = 1;                    //拉高时钟线

Delay5us();                 //延时

CY = SDA;                   //读应答信号

SCL = 0;                    //拉低时钟线

Delay5us();                 //延时

return CY;

}

/**************************************

向IIC总线发送一个字节数据

**************************************/

void HMC5883_SendByte(BYTE dat)

{

BYTE i;

for (i=0; i<8; i++)         //8位计数器

{

dat <<= 1;              //移出数据的最高位

SDA = CY;               //送数据口

SCL = 1;                //拉高时钟线

Delay5us();             //延时

SCL = 0;                //拉低时钟线

Delay5us();             //延时

}

HMC5883_RecvACK();

}

/**************************************

从IIC总线接收一个字节数据

**************************************/

BYTE HMC5883_RecvByte()

{

BYTE i;

BYTE dat = 0;

SDA = 1;                    //使能内部上拉,准备读取数据,

for (i=0; i<8; i++)         //8位计数器

{

dat <<= 1;

SCL = 1;                //拉高时钟线

Delay5us();             //延时

dat |= SDA;             //读数据

SCL = 0;                //拉低时钟线

Delay5us();             //延时

}

return dat;

}

//***************************************************

void Single_Write_HMC5883(uchar REG_Address,uchar REG_data)

{

…………限于本文篇幅 余下代码请从51黑下载附件…………

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python如何实现人工智能应用锁_如何清除应用锁的数据库

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

C/C 代码规范注释有哪些讲究?

如果领导给你一个项目的源码让你阅读&#xff0c;并理解重构代码&#xff0c;但里面一句注释都没有&#xff0c;我想这肯定是之前同事“删库跑路”了。看一份源码什么很重要&#xff1f;除了各种代码规范之外&#xff0c;还有一个比较重要的就是注释。注释虽然写起来很痛苦, 但…

记忆化搜索 递归缓存_需要微缓存吗? 营救记忆

记忆化搜索 递归缓存缓存解决了各种各样的性能问题。 有很多方法可以将缓存集成到我们的应用程序中。 例如&#xff0c;当我们使用Spring时&#xff0c;可以轻松使用Cacheable支持。 非常简单&#xff0c;但我们仍然必须配置缓存管理器&#xff0c;缓存区域等。有时&#xff0c…

qq互联android sdk,qq互联.Android

导读&#xff1a;2.2调用示例&#xff0c;这里以发送文字微博接口的调用为例例&#xff0c;来说明通过requestAsync调用兼容接口的方法&#xff1a;&#xff0c;在上面的调用中&#xff0c;调用获取用户信息接口的示例代码如下&#xff1a;&#xff0c;调用发送带图微博接口的&…

go语音protobuf_golang 使用 protobuf 的教程

1、下载protobuf的编译器protoc地址&#xff1a;window&#xff1a;下载: protoc-3.3.0-win32.zip解压&#xff0c;把bin目录下的protoc.exe复制到GOPATH/bin下&#xff0c;GOPATH/bin加入环境变量。当然也可放在其他目录&#xff0c;需加入环境变量&#xff0c;能让系统找到pr…

C 流插入和流提取运算符的重载

<<运算符的重载C 在输出内容时&#xff0c;最常用的方式&#xff1a;std::cout << 1 <<"hello";提出问题&#xff1a;那这条语句为什么能成立呢&#xff1f;cout 是什么&#xff1f;为什么 << 运算符能用在 cout 上呢&#xff1f;原因&#…

primefaces_使用Bean验证扩展PrimeFaces CSV

primefaces你们中有些人已经知道我和我的合著者Mertalışkan正在研究PrimeFaces Cookbook的2.版。 Packt Publishing允许我从新章节“客户端验证”的一个食谱中摘录一小部分摘录。 这将有助于使读者知道这本书的内容。 在此博客文章中&#xff0c;我想讨论使用Bean验证扩展的P…

android math类,GitHub - Zihin/MathModeling-Android

MathModeling-Android项目背景说明与数学建模有关的基于Android平台的手机应用软件&#xff0c;面向全体人员提供数学建模相关服务&#xff0c;开发人员均为东北大学软件学院本科学生&#xff0c;开发时间为两个月。基本功能实现如下功能&#xff0c;满足同学们在数学建模学习上…

guid主键 oracle_使用GUID作为数据库主键的测试

今天听了MSDN的WebCast&#xff0c;是关于Entlib的数据访问的讲座&#xff0c;末尾我问了两个自己所关心的问题&#xff1a;在一个较大型的应用中&#xff0c;如果需要用到两套以上的数据库(如&#xff1a;SQL Server和Oracle)&#xff0c;是否可以把需要的sql查询全部封装在存…

函数指针,指针函数,函数指针数组

这是一个群友发的笔试题目&#xff0c;里面涉及的东西也比较有意思。直接看代码void (*f[])(char *)这个是个什么东西&#xff1f;我们先看看下面的东西函数指针和指针函数的定义我们看个代码int *func(int a,int b)我们之前说过运算符的优先级&#xff0c;「 * 」 的优先级低…

win10默认浏览器不显示谷歌浏览器_win10系统谷歌浏览器怎么用不了?谷歌浏览器打不开网页的解决方法...

刚接触谷歌Chrome浏览器的时候&#xff0c;会觉得这个软件的操作界面非常地陌生&#xff0c;界面简洁得不像话。win10系统电脑下载好Google Chrome既谷歌浏览器后&#xff0c;发现打不开网页&#xff0c;谷歌浏览器怎么用不了&#xff1f;其实通过设置搜索引擎就可以打开了&…

畅享10e会有鸿蒙吗,功能虽小作用很大 华为畅享10e隐藏功能大揭秘

原标题&#xff1a;功能虽小作用很大 华为畅享10e隐藏功能大揭秘如今使用手机游戏、观影、听音乐、刷短视频、拍照等多种多样的娱乐方式,充斥着年轻人生活之中。作为年轻用户娱乐的重要载体,现在的手机不仅硬件强大,在软件功能上方面也取得了突破性进展,不仅仅是高端机,甚至千元…

jax-ws和jax-rs_使用JAX-RS和Spring构建HATEOAS API

jax-ws和jax-rs在我以前的博客文章中&#xff0c;我展示了如何使用Spring Boot配置Jersey多么容易。 我对Spring Boot和Jersey的探索并未结束&#xff0c;我研究了在Spring Boot应用程序中将Spring HATEOAS与Jersey一起使用的可能性。 Spring HATEOS允许创建遵循HATEOAS原理的R…

C this指针的理解和作用

C 程序到 C 程序的翻译 要想理解 C 的 this 指针&#xff0c;我们可以先把下面的 C 代码转换成 C 代码&#xff1a;C 语言是没有类定义 class 关键词&#xff0c;但是有跟 class 类似的定义&#xff0c;那就是 struct 结构体。m_price 变量是 Car 类的成员变量&#xff0c;那…

yolov3安卓实现_YOLOv3 的 TensorFlow 实现,GitHub 完整源码解析

来自华盛顿大学的 Joseph Redmon 和 Ali Farhadi 提出的YOLOv3 通过在 YOLO 中加入设计细节的变化&#xff0c;这个新模型在取得相当准确率的情况下实现了检测速度的很大提升&#xff0c;一般它比 R-CNN 快 1000 倍、比 Fast R-CNN 快 100 倍。这里附上 YOLOv3 的论文地址&…

C++ inline 函数简介

1.inline 函数简介inline 函数由 inline 关键字定义&#xff0c;引入 inline 函数的主要原因是用它替代 C 中复杂易错不易维护的宏函数。2.编译器对 inline 函数的处理办法编译器在编译阶段完成对 inline 函数的处理&#xff0c;即对 inline 函数的调用替换为函数的本体。但 in…

intellij ide_UltraESB的首选IDE – IntelliJ IDEA

intellij ide在AdroitLogic&#xff0c;我们长期以来一直在使用IntelliJ IDEA进行开发。 它是Java和相关语言/技术的最佳IDE&#xff08;它可能也是许多其他语言的选择&#xff0c;但我的经验主要是Java和相关技术&#xff09;。 Groovy和IDEA的Grails的集成很棒。 通过自动发…

install npm 到某个文件下执行_如何将npm安装到指定目录?

从npm版本3.8.6开始&#xff0c;您可以使用npm install --prefix ./install/here 安装在指定的目录中。node_modules即使node_modules较高层次结构中已存在目录&#xff0c;NPM 也会自动创建文件夹。您还可以package.json在当前目录中拥有a &#xff0c;然后使用以下--prefix选…

android 启动界面位置,android 修改默认启动项launcher(一)

需求&#xff1a;不去掉系统自带launcher的前提下&#xff0c;默认启动指定应用作为launcher现象&#xff1a;应用中带有属性"android.intent.category.HOME"&#xff0c;开机会弹出选择界面思路&#xff1a;跳过选择界面&#xff0c;直接选中要启动的launcher并直接…

C++抽象类

概念在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。抽象类往往用来表征对问题领域进行分…