日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/2 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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黑下載附件…………

總結

以上是生活随笔為你收集整理的android 磁场传感器 罗盘,HMC5883L电子指南针罗盘模块 GY-271三轴磁场传感器 的相关教程 带Arduino 51源代码...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。