資源簡介
好東西自己下載,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
評論
共有 條評論