/*****************主函数********************/
void main()
{
float x,y,z,jiaodu;
double angle;
//P0 = P1 = P2 = P3 = 0xff; //单片机IO口初始化为1
Init_HMC5883();
init_1602(); //lcd1602初始化
while(1)
{
Multiple_read_HMC5883(); //连续读出数据,存储在BUF中
//---------显示X轴
x=BUF[0] << 8 | BUF[2]; //Combine MSB and LSB of X Data output register
z=BUF[2] << 8 | BUF[4]; //Combine MSB and LSB of Z Data output register
//x=BUF[0] << 8 | BUF[1]; //Combine MSB and LSB of X Data output register 最高有效位
//y=BUF[2] << 8 | BUF[3]; //Combine MSB and LSB of Z Data output register
//z=BUF[4] << 8 | BUF[5]; //Combine MSB and LSB of Y Data output register
angle= (atan2(y,x) * (180 / 3.14159265) + 180); // angle in degrees
jiaodu = angle;
write_jiaodu(2,6,angle); //显示角度
if((angle >= 3380) || (angle <= 220)) //北 N
write_string(2,0," N ");
if((angle >= 230) && (angle <= 670)) //东 北
write_string(2,0," E N ");
if((angle >= 680) && (angle <= 1120)) //东 E
write_string(2,0," E ");
if((angle >= 1130) && (angle <= 1570)) //东 南
write_string(2,0," E S ");
if((angle >= 1580) && (angle <= 2010)) //南 S
write_string(2,0," S ");
if((angle >= 2020) && (angle <= 2460)) //西 南
write_string(2,0," W S ");
if((angle >= 2470) && (angle <= 2910)) //西 W
write_string(2,0," W ");
if((angle >= 2920) && (angle <= 3360)) //西 北
write_string(2,0," W N ");
delay_1ms(300);