久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2740|回復: 2
打印 上一主題 下一主題
收起左側

照網上程序修改的,一直顯示045.0,大神幫忙看看

[復制鏈接]
跳轉到指定樓層
樓主
ID:223438 發表于 2017-8-3 23:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式



#include <reg52.h>
#include <math.h>
#include <stdio.h>
#include <intrins.h>

typedef unsigned char uchar;
typedef unsigned int uint;

/*12864液晶引腳定義*/      
sbit CS=P3^3;
sbit SID=P3^4;
sbit SCLK=P3^5;

sbit SCL=P1^0;      //IIC時鐘引腳定義
sbit SDA=P1^1;      //IIC數據引腳定義

#define SlaveAddress 0x3c   //定義器件在IIC總線中的從地址
uchar Rec_Data[6];
void Send_byte(unsigned char bbyte);
void Delaynms(unsigned int di);


/*延時函數*/
void Delay(uint t)
{
    while(t--)
    {}
}
/********************************************
**LCD顯示函數
********************************************/
/*寫入一個數據或指令*/
void Send_DATA(uchar ddata,uchar start)
{

        unsigned char start_data,Hdata,Ldata;
          if(start==0)
                start_data=0xf8;//寫指令
    else   
            start_data=0xfa; //寫數據

    SCLK=0;
    CS=1;

        Hdata=ddata&0xf0;                  //取高四位
          Ldata=(ddata<<4)&0xf0;  //取低四位
          Send_byte(start_data);          //發送起始信號
          Delaynms(5); //延時是必須的
          Send_byte(Hdata);              //發送高四位
          Delaynms(1);  //延時是必須的
          Send_byte(Ldata);                  //發送低四位
          Delaynms(1);  //延時是必須的
    CS=0;
    Delay(20);  
}

void Delaynms(unsigned int di) //??
{
        unsigned int da,db;
        for(da=0;da<di;da++)
                   for(db=0;db<10;db++);
}

void Send_byte(unsigned char bbyte) //發送一個字節
{
        unsigned char i;
        for(i=0;i<8;i++)
           {
                   SID=bbyte&0x80; //取出最高位
                SCLK=1;
                   SCLK=0;
                   bbyte<<=1; //左移
           }  
}
void LCD_set_xy( unsigned char x, unsigned char y )
{        //設置LCD顯示的起始位置,X為行,Y為列
    unsigned char address;
        switch(x)
        {
                case 0: address = 0x80 + y; break;   
            case 1: address = 0x80 + y; break;
                case 2: address = 0x90 + y; break;
                    case 3: address = 0x88 + y; break;
                case 4: address = 0x98 + y; break;
                default:address = 0x80 + y; break;
        }
        Send_DATA(address,0);
}

/*12864液晶初始化*/
void LCD_Init(void)
{
    Delay(60000);
    Send_DATA(0x30,0);
    Send_DATA(0x04,0);
    Send_DATA(0x0c,0);
    Send_DATA(0x01,0);
    Delay(3000);
}
/*顯示字符串*/
void Dis_str(uchar Addr,uchar *str)
{

    Send_DATA(Addr,0);
    Delay(10);
    while(*str!='\0')
    {
        Send_DATA(*str,1);
        str++;
        Delay(10);
    }
}
/*起始信號*/
void IIC_Start(void)
{
    SDA=1;
    SCL=1;
    Delay(5);
    SDA=0;
    Delay(5);
    SCL=0;
}
/*停止信號*/
void IIC_Stop(void)
{
    SDA=0;
    SCL=1;
    Delay(5);
    SDA=1;
    Delay(5);
}
/*發送應答信號*/
void IIC_SendAck(bit Ack)
{
    SDA=Ack;//ack (0:ACK 1:NACK)
    SCL=1;
    Delay(5);
    SCL=0;
    Delay(5);
}
/*接收應答信號*/
bit IIC_RecAck(void)
{
    SCL=1;
    Delay(5);
    CY=SDA;
    SCL=0;
    Delay(5);
    return CY;
}
/*向IIC總線發送一個字節數據*/
void HMC5883_Send_Byte(uchar Dat)
{
    uchar i;
    for(i=0;i<8;i++)
    {
        Dat<<=1;
        SDA=CY;
        SCL=1;
        Delay(5);
        SCL=0;
        Delay(5);
    }
    IIC_RecAck();
}
/*從IIC總線接收一個字節數據*/
uchar HMC5883_Rec_Byte(void)
{
    uchar i,Dat=0;
    SDA=1;
    for(i=0;i<8;i++)
    {
        Dat<<=1;
        SCL=1;
        Delay(5);
        Dat |=SDA;
        SCL=0;
        Delay(5);
    }
    return Dat;
}
/*單字節寫HMC5833*/
void Single_Write_HMC5883(uchar Address,uchar Dat)
{
    IIC_Start();
    HMC5883_Send_Byte(SlaveAddress);
    HMC5883_Send_Byte(Address);
    HMC5883_Send_Byte(Dat);
    IIC_Stop();
}
/*單字節讀HMC5833*/
/*uchar Single_Read_HMC5883(uchar Addr)
{
    uchar Value;
    IIC_Start();
    HMC5883_Send_Byte(SlaveAddress);
    HMC5883_Send_Byte(Addr);
    IIC_Start();
    HMC5883_Send_Byte(SlaveAddress+1);
    Value=HMC5883_Rec_Byte();
    IIC_SendAck(1);
    IIC_Stop();
    return Value;
}*/
/*多字節讀HMC5833*/
void Multiple_Read_HMC5883(void)
{
    uchar i;  //連續讀出HMC5883內部角度數據,地址范圍0x3~0x5
    IIC_Start();
    HMC5883_Send_Byte(SlaveAddress);
    HMC5883_Send_Byte(0x03);//發送存儲單元地址,從0x03開始
    IIC_Start();
    HMC5883_Send_Byte(SlaveAddress+1);
    for(i=0;i<6;i++) //連續讀取6個地址數據,存儲在Rec_Data
    {
        Rec_Data[i]=HMC5883_Rec_Byte();
        if(i==5)
            IIC_SendAck(1); //最后一個數據需要回NOACK
        else
            IIC_SendAck(0); //回應ACK
    }
    IIC_Stop();
    Delay(100);
}
//初始化HMC5883,根據需要請參考pdf進行修改****
void HMC5883_Init(void)
{
     Single_Write_HMC5883(0x02,0x00);
}
/*主函數*/
void main(void)
{
    int X,Y,Z;
    double Angle;
    uint Acr;

    LCD_Init();//LCD12864液晶初始化
    HMC5883_Init();//HMC5883初始化

     while(1)
    {
        Multiple_Read_HMC5883();//連續讀出數據,存儲在Rec_Data[]中
        X=Rec_Data[0]<<8 | Rec_Data[1];//Combine MSB and LSB of X Data output register
        Z=Rec_Data[2]<<8 | Rec_Data[3];//Combine MSB and LSB of Z Data output register
        Y=Rec_Data[4]<<8 | Rec_Data[5];//Combine MSB and LSB of Y Data output register
        Angle= atan2((double)Y,(double)X)*(180/3.14159265)+180;//單位:角度 (0~360)
        Angle*=10;
        Acr=(uint)Angle;
                        LCD_set_xy(2,0);
        Send_DATA(Acr%10000/1000+0x30,1);
        Send_DATA(Acr%1000/100+0x30,1);
        Send_DATA(Acr%100/10+0x30,1);
        Send_DATA('.',1);
        Send_DATA(Acr%10+0x30,1);

        Delay(50000);
    }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:223438 發表于 2017-8-4 23:05 | 只看該作者
怎么沒人幫幫我。
回復

使用道具 舉報

板凳
ID:645297 發表于 2020-4-30 12:20 | 只看該作者
51hww34 發表于 2017-8-4 23:05
怎么沒人幫幫我。

你搞懂了嘛
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产午夜精品福利 | 在线播放国产一区二区三区 | 免费av一区二区三区 | 国产亚洲一区在线 | 九九久久国产 | 涩涩导航 | 在线看av网址 | 一区二区三区四区在线视频 | av在线视 | 手机看片在线播放 | 亚洲欧美中文日韩在线v日本 | 亚洲国产精品一区二区第一页 | 国产精品国产精品 | 久久久在线视频 | 国产欧美一区二区久久性色99 | 亚洲成人二区 | 久久久久久久一区 | 国产无套一区二区三区久久 | 免费黄视频网站 | 国产成人在线视频 | 69精品久久久久久 | 午夜影院普通用户体验区 | 久久精品免费观看 | 中文字幕在线观看av | 91资源在线| 国产1区2区在线观看 | 国产精品久久久久久久久久99 | 欧洲色综合 | 国产精品久久久久久久久久久新郎 | 黄a免费看 | 一区二区三区日本 | 欧美乱操 | 日韩精品在线观看一区二区 | 中文字幕不卡在线观看 | 日本 欧美 三级 高清 视频 | 久久精品99 | 91九色视频在线 | 久久精品欧美一区二区三区麻豆 | 成人免费在线视频 | www.国产 | 国产精品视频久久久 |