资源简介

好东西自己下载,hmc5883l 电子罗盘 430单片机

资源截图

代码片段和文件信息

typedef unsigned char uchar;
typedef unsigned int uint;

#define HMC5883L_DIR   P2DIR
#define HMC5883L_IN    P2IN
#define HMC5883L_OUT   P2OUT
#define SCL  BIT0     //IIC时钟引脚定义
#define SDA  BIT1     //IIC数据引脚定义   
                      //DRDY 不接 
#define SCL_H  (HMC5883L_DIR|=SCLHMC5883L_OUT|=SCL)
#define SCL_L  (HMC5883L_DIR|=SCLHMC5883L_OUT&=~SCL)
#define SDA_H  (HMC5883L_DIR|=SDAHMC5883L_OUT|=SDA)
#define SDA_L  (HMC5883L_DIR|=SDAHMC5883L_OUT&=~SDA)

#define SlaveAddress  0x3c          //定义器件在IIC总线中的从地址
uchar Rec_Data[6];
int xyz;
double Angle;
uint Acr;
   
/*延时函数*/
void Delay(uint t)
{
while(t--);
}

/*起始信号*/
void IIC_Start(void)
{
    SDA_H;
    SCL_H;
    Delay(50);
    SDA_L;
    Delay(50);
    SCL_L;
}

/*停止信号*/
void IIC_Stop(void)
{
    SDA_L;
    SCL_H;
    Delay(50);
    SDA_H;
    Delay(50);
}

/*发送应答信号*/
void IIC_SendAck(char Ack)
{   
    if(Ack)      //ack (0:ACK 1:NACK)
    SDA_H;
    else SDA_L;
    SCL_H;
    Delay(50);
    SCL_L;
    Delay(50);
}

/*接收应答信号*/
char IIC_RecAck(void)
{   
    char CY;
    HMC5883L_DIR&=~SDA;
    SCL_H;
    Delay(50);
    if(HMC5883L_DIR&SDA)
      CY=1;
    else CY=0;
    SCL_L;
    Delay(50);
    return CY;
}

/*向IIC总线发送一个字节数据*/
void HMC5883_Send_Byte(uchar Dat)
{
    uchar i;
    for(i=0;i<8;i++)
    {
        if(Dat&BIT7)
        SDA_H;
        else SDA_L;
        SCL_H;
        Delay(50);
        SCL_L;
        Delay(50);
        Dat<<=1;
    }
    IIC_RecAck();
}

/*从IIC总线接收一个字节数据*/
uchar HMC5883_Rec_Byte(void)
{
    uchar iDat=0;
    SDA_H;
    HMC5883L_DIR&=~SDA;
    for(i=0;i<8;i++)
    {
        Dat<<=1;
        SCL_H;
        Delay(50);
        
        if((HMC5883L_IN&SDA)==SDA)
        Dat|=BIT0;
        
        SCL_L;
        Delay(50);
    }
    return Dat;
}

/*单字节写HMC5883*/
void Single_Write_HMC5883(uchar Addressuchar Dat)
{
    IIC_Start();
    HMC5883_Send_Byte(SlaveAddress);
    HMC5883_Send_Byte(Address);
    HMC5883_Send_Byte(Dat);
    IIC_Stop();
}

/*单字节读HMC5883*/
uchar Single_Read_HMC5883(uchar Addr)
{
    uchar Value;
    IIC_Start();
    HMC5883_Send_Byte(SlaveAddress);
    HMC5883_Send_Byte(Addr);
    IIC_Start();
    HMC5883_Send_Byt

评论

共有 条评论