失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > android 磁场传感器 罗盘 HMC5883L电子指南针罗盘模块 GY-271三轴磁场传感器 的

android 磁场传感器 罗盘 HMC5883L电子指南针罗盘模块 GY-271三轴磁场传感器 的

时间:2021-07-06 07:10:48

相关推荐

android 磁场传感器 罗盘 HMC5883L电子指南针罗盘模块 GY-271三轴磁场传感器 的

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

// HMC5883 51串口测试程序

// 使用单片机STC89C51

// 晶振:11.0592M

// 显示:PC串口

// 编译环境 Keil uVision2

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

// 时间:3月1日

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

#include

#include //Keil library

#include //Keil library

#include

#define uchar unsigned char

#define uintunsigned 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; //显示变量

intdis_data; //变量

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

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

void delay(unsigned int k);

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

void conversion(uint temp_data);

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

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

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

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

void Delay5us();

void Delay5ms();

void HMC5883_Start();

void HMC5883_Stop();

void HMC5883_SendACK(bit ack);

bitHMC5883_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;

}

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

voidSeriPushSend(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黑下载附件…………

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

如果觉得《android 磁场传感器 罗盘 HMC5883L电子指南针罗盘模块 GY-271三轴磁场传感器 的》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。