MSP430F149驱动BH1750FVI程序
高——> I/O缓冲——> DDRAM——> if(a> if(y> SDA_H; //使能内部上拉,准备读取数据, /********************************** /*************************** /* /******************************* void WaitForEnable(void) CLR_EN; DataDir |= 0xFF; //将P4口切换为输出状态 void inmaindispaly() temp=dis_data; conversion(temp); //计算数据和显示 DisplayOneChar(7,wan); //显示数据 DisplayOneChar(1
for (i = 0; i < 8; i++)
{ //8位计数器
//SDA_H;
//Delay5us();
SCL_H;
SDA_IN;
Delay5us();
flag=SDA_VAL;
dat <= 1;
if(flag)
dat|=0x01;
SDA_OUT;
SCL_L;
Delay5us();
}
return dat;
}
**************写入数据************/
void Single_Write_BH1750(unsigned char REG_Address)
{
BH1750_Start(); //起始信号
BH1750_SendByte(SlaveAddress); //发送设备地址+写信号
BH1750_SendByte(REG_Address); //内部寄存器地址,请参考中文pdf22页
// BH1750_SendByte(REG_data); //内部寄存器数据,请参考中文pdf22页
BH1750_Stop(); //发送停止信号
}
/**************************************
初始化BH1750,根据需要请参考pdf进行修改
*************************************/
void Init_BH1750()
{
Single_Write_BH1750(0x01);
}
*********单字节读取*********/
unsigned char Single_Read_BH1750(unsigned char REG_Address)
{
unsigned char REG_data;
BH1750_Start(); //起始信号
BH1750_SendByte(SlaveAddress); //发送设备地址+写信号
BH1750_SendByte(REG_Address); //发送存储单元地址,从0开始
BH1750_Start(); //起始信号
BH1750_SendByte(SlaveAddress+1); //发送设备地址+读信号
REG_data=BH1750_RecvByte(); //读出寄存器数据
BH1750_SendACK(1);
BH1750_Stop(); //停止信号
return REG_data;
}
*/
连续读出BH1750内部数据
********************************/
void Multiple_Read_BH1750(void)
{
unsigned char i;
BH1750_Start(); //起始信号
BH1750_SendByte(0x47); //发送设备地址+读信号
for (i = 0; i < 3; i++){ //连续读取6个地址数据,存储中BUF
BUF[i] = BH1750_RecvByte(); //BUF[0]存储0x32地址中的数据
if (i == 3) {
mnack(); //最后一个数据需要回NOACK
}
else {
BH1750_SendACK(); //回应ACK
}
}
BH1750_Stop(); //停止信号
Delay5ms();
}
/*******************************************************************************/
/*******************************LCD1602函数************************************/
/*******************************************************************************/
void conversion(unsigned int temp_data) //数据转换出 个,十,百,千,万
{
wan = temp_data / 10000 + 0x30;
temp_data = temp_data % 10000;//取余运算
qian = temp_data / 1000 + 0x30;
temp_data = temp_data % 1000;//取余运算
bai = temp_data / 100 + 0x30;
temp_data = temp_data % 100;//取余运算
shi = temp_data / 10 + 0x30;
temp_data = temp_data % 10;//取余运算
ge = temp_data + 0x30;
}
{
DataDir &= 0x00;
CLR_RS;
SET_RW;
_NOP();
SET_EN;
_NOP();
_NOP();
while((P4IN & Busy)!=0); //检测忙标志 //STA7为0 允许读写操作使能则退出循环
}
/*******************************/
void WriteCommandLCM(unsigned char CMD,uchar Attribc)
{
if(Attribc)
WaitForEnable();
CLR_RS;
CLR_RW;
_NOP();
DataPort = CMD;
_NOP();
SET_EN;
_NOP();
_NOP();
CLR_EN;
}
/*******************************/
void WriteDataLCM(unsigned char dataW)
{
WaitForEnable();
SET_RS;
CLR_RW;
_NOP();
DataPort = dataW;
_NOP();
SET_EN;
_NOP();
_NOP();
CLR_EN;
}
/***********************************/
void InitLcd()
{
CtrlDir |= 0x07; //控制线端口设为输出状态
DataDir = 0xFF; //数据端口设为输出状态
WriteCommandLCM(0x38,0);
delay(15);
WriteCommandLCM(0x08,1);
delay(1);
WriteCommandLCM(0x01,1);
delay(1);
WriteCommandLCM(0x06,1);
delay(1);
WriteCommandLCM(0x0c,1);
delay(1);
}
/***********************************/
void DisplayOneChar(unsigned char X,unsigned char DData)
{
X |= 0x80;
WriteCommandLCM(X,0);
WriteDataLCM(DData);
}
{
uint temp;
dis_data=BUF[0];
dis_data=(dis_data<8)+BUF[1];//合成数据
DisplayOneChar(0,L);
DisplayOneChar(1,i);
DisplayOneChar(2,g);
DisplayOneChar(3,h);
DisplayOneChar(4,t);
DisplayOneChar(5,:);
DisplayOneChar(8,qian);
DisplayOneChar(9,bai);
DisplayOneChar(10,shi);
DisplayOneChar(11,ge);
MSP430F149BH1750FV 相关文章:
- 基于MSP430F149与BH1750FVI进行光强度的值在LCD1602显示(11-27)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)