资源简介

电子罗盘HMC5883L基于msp430f149,可用

资源截图

代码片段和文件信息

#include 
#include 

#define CPU_F ((double)8000000) 
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) 
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) 

#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long

#define P55 5
#define P56 6
#define P57 7

#define RS_CLR P5OUT &= ~(1 << P55)        //RS置低
#define RS_SET P5OUT |= (1 << P55)         //RS置高

#define RW_CLR P5OUT &= ~(1 << P56)        //RW置低
#define RW_SET P5OUT |= (1 << P56)         //RW置高

#define EN_CLR P5OUT &= ~(1 << P57)        //E置低
#define EN_SET P5OUT |= (1 << P57)         //E置高

#define DataPort      P4OUT                 //P4口为数据口

#define HMC5883L_DIR   P1DIR
#define HMC5883L_IN    P1IN
#define HMC5883L_OUT   P1OUT
#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;
uint qian=0bai=0shi=0ge=0;                //设置显示参数
/*延时函数*/
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

评论

共有 条评论