资源简介
电子罗盘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
- 上一篇:StdAfx.h
- 下一篇:策略模式工厂方法模式观察者模式
相关资源
- MSP430F149封装 Altium designer 格式文件
- ads1115驱动,msp430f149单片机
- msp430f149与pcf8591
- 基于msp430f149做的mp3播放器
- msp430f149蓝牙通信AD12程序
- 基于msp430f149的ADXL345倾角传感器的测试
- MSP430F149中文资料
- ADC序列通道多次转换12864液晶程序ms
- MSP430F149单片机对继电器的控制程序和
- STM32控制电子罗盘彩屏显示角度
- 基于MSP430F149单片机的语音播报模块使
- STM32 OLED打点划线画圆 OLED电子罗盘 程
- msp430f149 TFT屏 显示 240*320
- 用DS18B20测量温度并在12864液晶屏上显
- 基于MSP430F149控制LCD12864串口显示C程序
- 基于msp430f149的ds18b20显示程序
- MSP430F149驱动OV7670摄像头
- MSP430F149 read SD card
- lsm303dlh电子罗盘传感器hal程序
- MSP430F149读写SD卡程序
- msp430f149单路AD采样电压值并在lcd1602上
- MSP430F149写的NRF24L01收发代码
- MSP430F149的SD卡模块驱动
- 基于msp430f149的FFT算法,结果在1602液晶
- MSP430F149 最小系统板原理图
- 基于430单片机的万年历程序
- MSP430F149+DS18B20+1602程序绝对好用
- msp430f149超声波雷达
- MSP430F149利用硬件SPI口读写串行Flash
- msp430F149应用电路原理图
评论
共有 条评论