資源簡介
使用51單片機(jī)HMC5883和qmc5883來做電子指南針,并使用OLED顯示,使用iphone和華為手機(jī)的指南針作比較,基本上在5度以內(nèi)的偏差,注意:要校準(zhǔn)才可以;

代碼片段和文件信息
#include?“REG51.h“
#include?“QMC5883.h“
#include?“oled.h“
#include?
#include?
#include??
#define?MagnetcDeclination?1.02?//2°43‘w?±0°17‘=2.72°桂林地磁偏角,請根據(jù)情況自行百度??
typedef?unsigned?long?DWORD;
typedef?unsigned?char?BYTE;
typedef?unsigned?int?WORD;
typedef?unsigned?char?uint8;
typedef?unsigned?int?uint16;
#define???uchar?unsigned?char
#define???uint??unsigned?int
#define?FOSC?30000000L
#define?BAUD?115200????????????????????//‘??????
#define?T1MS?(65536-FOSC/1000)???????//1T??
sbit?led=P5^5;
sbit?led1=P1^0;
sbit?led2=P1^1;
sbit?key=P3^2;
float?adcf=0;
u16?adcz=0;
bit?flag=0;
int?magx=0magy=0magz=0;
int?offsetX=-496offsetY=-200offsetZ=11;?
float?y_gaiv=2.48;
xdata?double?Angle_XY=0Angle_XZ=0Angle_YZ=0;
#define?ADC_POWER???0x80????????????//ADC電源控制位
#define?ADC_FLAG????0x10????????????//ADC完成標(biāo)志
#define?ADC_START???0x08????????????//ADC起始控制位
#define?ADC_SPEEDLL?0x00????????????//540個時鐘
#define?ADC_SPEEDL??0x20????????????//360個時鐘
#define?ADC_SPEEDH??0x40????????????//180個時鐘
#define?ADC_SPEEDHH?0x60????????????//90個時鐘
#define ADC_P10 0x01 //IO引腳?Px.0
#define ADC_P11 0x02 //IO引腳?Px.1
#define ADC_P12 0x04 //IO引腳?Px.2
#define ADC_P13 0x08 //IO引腳?Px.3
#define ADC_P14 0x10 //IO引腳?Px.4
#define ADC_P15 0x20 //IO引腳?Px.5
#define ADC_P16 0x40 //IO引腳?Px.6
#define ADC_P17 0x80 //IO引腳?Px.7
#define ADC_P1_All 0xFF //IO所有引腳
void?InitADC();
BYTE?GetADCResult(BYTE?ch);
void?Uart()?interrupt?4?
{
u8?k=0;
????if?(RI)
????{
????????RI?=?0;?????????????????//清除RI位
?k???=???SBUF;????
if(k==0x5a)?
{
IAP_CONTR?=?0x60;??
}
????}
????if?(TI)
????{
????????TI?=?0;?????????????????//清除TI
????}
}
BYTE?GetADCResult(BYTE?ch)
{
????ADC_CONTR?=?ADC_POWER?|?ADC_SPEEDLL?|?ch?|?ADC_START; //ADC電源,轉(zhuǎn)換時間,通道,ADC打開
????_nop_();????????????????????????//等待4個NOP
????_nop_();
????_nop_();
????_nop_();
????while?(!(ADC_CONTR?&?ADC_FLAG));//等待ADC轉(zhuǎn)換完成
????ADC_CONTR?&=?~ADC_FLAG;?????????//Close?ADC
????return?ADC_RES;?????????????????//返回ADC結(jié)果
}
void?Delay1s(WORD?n)
{
???WORD?x;
????while?(n--)
????{
????????x?=?5000;
????????while?(x--);
????}
}
void?InitADC()
{????????????????????
????P1ASF?=ADC_P17;?????????????????????//設(shè)置P7口為AD口
????ADC_RES?=?0;????????????????????????//清除結(jié)果寄存器
????ADC_CONTR?=?ADC_POWER?|?ADC_SPEEDLL;
????Delay1s(2);???????????????????????????//ADC上電并延時??????????????????????//ADC?power-on?and?delay
}
void?uartpm()
{?
??SCON?=?0x50;????????????????//8???楸?2???
????T2L?=?(65536?-?(FOSC/4/BAUD));???//殍??2????裝??
????T2H?=?(65536?-?(FOSC/4/BAUD))>>8;
????AUXR?=?0x14;????????????????//T2?a1T????2???????
?//?AUXR?|=?0x01;???????????????//????????a‘????2??攴?輇??
??AUXR?|=?0x81;???????????????????//????a1T???
//??AUXR?&=?0x7f;???????????????????//????a12T???
????TMOD?=?0x00;????????????????????//殍?????a???0(16??????裝??)
????TL0?=?T1MS;?????????????????????//3?????甌??
????TH0?=?T
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????7729??2019-04-04?16:25??新PCB15W408AS-HMC5883\main.c
?????文件??????13951??2019-04-04?16:26??新PCB15W408AS-HMC5883\main.LST
?????文件??????29843??2019-04-04?16:26??新PCB15W408AS-HMC5883\main.OBJ
?????文件??????57782??2019-04-04?16:26??新PCB15W408AS-HMC5883\OLED
?????文件????????636??2019-04-04?16:30??新PCB15W408AS-HMC5883\OLED.build_log.htm
?????文件??????20305??2019-04-04?16:26??新PCB15W408AS-HMC5883\OLED.hex
?????文件?????????85??2019-04-04?16:26??新PCB15W408AS-HMC5883\OLED.lnp
?????文件??????10596??2019-04-04?16:26??新PCB15W408AS-HMC5883\oled.lst
?????文件??????46262??2019-04-04?16:26??新PCB15W408AS-HMC5883\OLED.M51
?????文件??????21446??2019-04-04?16:26??新PCB15W408AS-HMC5883\oled.obj
?????文件????????167??2018-09-25?13:46??新PCB15W408AS-HMC5883\OLED.plg
????.......????140818??2019-04-04?16:30??新PCB15W408AS-HMC5883\OLED.uvgui.Administrator
????.......????140811??2019-04-04?15:39??新PCB15W408AS-HMC5883\OLED.uvgui_Administrator.bak
????.......??????6860??2019-04-04?16:30??新PCB15W408AS-HMC5883\OLED.uvopt
????.......?????14125??2019-04-04?14:51??新PCB15W408AS-HMC5883\OLED.uvproj
?????文件???????6362??2018-09-25?10:44??新PCB15W408AS-HMC5883\OLED_uvopt.bak
?????文件??????13568??2018-01-29?13:46??新PCB15W408AS-HMC5883\OLED_uvproj.bak
?????文件???????5257??2019-04-04?13:55??新PCB15W408AS-HMC5883\QMC5883.C
?????文件???????1011??2019-04-04?13:54??新PCB15W408AS-HMC5883\QMC5883.H
?????文件???????8996??2019-04-04?16:26??新PCB15W408AS-HMC5883\QMC5883.LST
?????文件??????12007??2019-04-04?16:26??新PCB15W408AS-HMC5883\QMC5883.OBJ
?????文件??????10759??2015-10-28?08:13??新PCB15W408AS-HMC5883\SRC\bmp.h
?????文件???????5743??2018-10-16?10:50??新PCB15W408AS-HMC5883\SRC\oled.c
?????文件???????1972??2019-04-04?13:09??新PCB15W408AS-HMC5883\SRC\OLED.H
?????文件??????13266??2019-04-01?19:18??新PCB15W408AS-HMC5883\SRC\oledfont.h
?????文件???????6376??2015-10-28?08:13??新PCB15W408AS-HMC5883\STARTUP.A51
?????文件??????14048??2019-04-04?16:26??新PCB15W408AS-HMC5883\STARTUP.LST
?????文件????????749??2019-04-04?16:26??新PCB15W408AS-HMC5883\STARTUP.OBJ
?????文件???????2682??2015-10-28?08:13??新PCB15W408AS-HMC5883\中景園電子0.96OLED顯示屏_C51系列_SPI_例程\main.c
?????文件???????4907??2015-10-28?08:13??新PCB15W408AS-HMC5883\中景園電子0.96OLED顯示屏_C51系列_SPI_例程\main.LST
............此處省略26個文件信息
評論
共有 條評論