proteus中没有bh1750fvi程序光照度模块怎么办,用什么代替或者?

51单片机驱动BH1750FVI光照LCD液晶显示
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
51单片机驱动BH1750FVI光照LCD液晶显示
BH1750FVI是基于IIC协议的器件,单片机是STC89C52,晶振是11.0592MHZ,显示部分是LCD1602液晶屏,不同的工作环境,需要调整此函数,当改用1T的MCU时,请调整此延时函数。程序都是详细注释,大家有福了!
#include& &REG51.H&
#include& &math.h&&&& //Keil library
#include& &stdio.h&&& //Keil library
#include& &INTRINS.H&
#define&& uchar unsigned char
#define&& uint unsigned int
#define&& DataPort P0& //LCD1602数据端口
sbit&& SCL=P2^0;&&&&& //IIC时钟引脚定义
sbit&&&& SDA=P2^1;&&&&& //IIC数据引脚定义
sbit&&&&& LCM_RS=P1^0;&& //LCD1602命令端口&
sbit&&&&& LCM_RW=P1^1;&& //LCD1602命令端口&
sbit&&&&& LCM_EN=P1^2;&& //LCD1602命令端口
#define&& SlaveAddress&& 0x46 //定义器件在IIC总线中的从地址,根据ALT& ADDRESS地址引脚不同修改
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //ALT& ADDRESS引脚接地时地址为0xA6,接电源时地址为0x3A
typedef&& unsigned char BYTE;
typedef&& unsigned short WORD;
BYTE&&& BUF[8];&&&&&&&&&&&&&&&&&&&&&&&& //接收数据缓存区&&&&&&
uchar&& ge,shi,bai,qian,&&&&&&&&&&& //显示变量
int&&&& dis_&&&&&&&&&&&&&&&&&&&&&& //变量
void delay_nms(unsigned int k);
void InitLcd();
void Init_BH1750(void);
void WriteDataLCM(uchar dataW);
void WriteCommandLCM(uchar CMD,uchar Attribc);
void DisplayOneChar(uchar X,uchar Y,uchar DData);
void conversion(uint temp_data);
void& Single_Write_BH1750(uchar REG_Address);&&&&&&&&&&&&&& //单个写入数据
uchar Single_Read_BH1750(uchar REG_Address);&&&&&&&&&&&&&&& //单个读取内部寄存器数据
void& Multiple_Read_BH1750();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //连续的读取内部寄存器数据
void Delay5us();
void Delay5ms();
void BH1750_Start();&&&&&&&&&&&&&&&&&&& //起始信号
void BH1750_Stop();&&&&&&&&&&&&&&&&&&&& //停止信号
void BH1750_SendACK(bit ack);&&&&&&&&&& //应答ACK
bit& BH1750_RecvACK();&&&&&&&&&&&&&&&&& //读ack
void BH1750_SendByte(BYTE dat);&&&&&&&& //IIC单个字节写
BYTE BH1750_RecvByte();&&&&&&&&&&&&&&&& //IIC单个字节读
void conversion(uint temp_data)& //& 数据转换出 个,十,百,千,万
&&& wan=temp_data/ ;
&&& temp_data=temp_data%10000;&& //取余运算
&qian=temp_data/ ;
&&& 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;&
//毫秒延时**************************
void delay_nms(unsigned int k)
unsigned int i,j;&&&
for(i=0;i&k;i++)
for(j=0;j&121;j++)&&
/*******************************/
void WaitForEnable(void)
DataPort=0&
LCM_RS=0;LCM_RW=1;_nop_();
LCM_EN=1;_nop_();_nop_();
while(DataPort&0x80);
LCM_EN=0;&&&
/*******************************/
void WriteCommandLCM(uchar CMD,uchar Attribc)
if(Attribc)WaitForEnable();
LCM_RS=0;LCM_RW=0;_nop_();
DataPort=CMD;_nop_();
LCM_EN=1;_nop_();_nop_();LCM_EN=0;
/*******************************/
void WriteDataLCM(uchar dataW)
WaitForEnable();&
LCM_RS=1;LCM_RW=0;_nop_();
DataPort=dataW;_nop_();
LCM_EN=1;_nop_();_nop_();LCM_EN=0;
/***********************************/
void InitLcd()&&&
WriteCommandLCM(0x38,1);
WriteCommandLCM(0x08,1);
WriteCommandLCM(0x01,1);
WriteCommandLCM(0x06,1);
WriteCommandLCM(0x0c,1);
/***********************************/
void DisplayOneChar(uchar X,uchar Y,uchar DData)
Y&=1;&&&&&
X&=15;&&&&&
if(Y)X|=0x40;&&&&
X|=0x80;&&
WriteCommandLCM(X,0);&
WriteDataLCM(DData);&
void Delay5us()
&&& _nop_();_nop_();_nop_();_nop_();
&&& _nop_();_nop_();_nop_();_nop_();
&_nop_();_nop_();_nop_();_nop_();
&_nop_();_nop_();_nop_();_nop_();
void Delay5ms()
&&& WORD n = 560;
&&& while (n--);
}/**************************************
**************************************/
void BH1750_Start()
&&& SDA = 1;&&&&&&&&&&&&&&&&&&& //拉高数据线
&&& SCL = 1;&&&&&&&&&&&&&&&&&&& //拉高时钟线
&&& Delay5us();&&&&&&&&&&&&&&&& //延时
&&& SDA = 0;&&&&&&&&&&&&&&&&&&& //产生下降沿
&&& Delay5us();&&&&&&&&&&&&&&&& //延时
&&& SCL = 0;&&&&&&&&&&&&&&&&&&& //拉低时钟线
/**************************************
**************************************/
void BH1750_Stop()
&&& SDA = 0;&&&&&&&&&&&&&&&&&&& //拉低数据线
&&& SCL = 1;&&&&&&&&&&&&&&&&&&& //拉高时钟线
&&& Delay5us();&&&&&&&&&&&&&&&& //延时
&&& SDA = 1;&&&&&&&&&&&&&&&&&&& //产生上升沿
&&& Delay5us();&&&&&&&&&&&&&&&& //延时
/**************************************
发送应答信号
入口参数:ack (0:ACK 1:NAK)
**************************************/
void BH1750_SendACK(bit ack)
&&& SDA =&&&&&&&&&&&&&&&&& //写应答信号
&&& SCL = 1;&&&&&&&&&&&&&&&&&&& //拉高时钟线
&&& Delay5us();&&&&&&&&&&&&&&&& //延时
&&& SCL = 0;&&&&&&&&&&&&&&&&&&& //拉低时钟线
&&& Delay5us();&&&&&&&&&&&&&&&& //延时
/**************************************
接收应答信号
**************************************/
bit BH1750_RecvACK()
&&& SCL = 1;&&&&&&&&&&&&&&&&&&& //拉高时钟线
&&& Delay5us();&&&&&&&&&&&&&&&& //延时
&&& CY = SDA;&&&&&&&&&&&&&&&&&& //读应答信号
&&& SCL = 0;&&&&&&&&&&&&&&&&&&& //拉低时钟线
&&& Delay5us();&&&&&&&&&&&&&&&& //延时
&&& return CY;
/**************************************
向IIC总线发送一个字节数据
**************************************/
void BH1750_SendByte(BYTE dat)
&&& for (i=0; i&8; i++)&&&&&&&& //8位计数器
&&&&&&& dat &&= 1;&&&&&&&&&&&&& //移出数据的最高位
&&&&&&& SDA = CY;&&&&&&&&&&&&&& //送数据口
&&&&&&& SCL = 1;&&&&&&&&&&&&&&& //拉高时钟线
&&&&&&& Delay5us();&&&&&&&&&&&& //延时
&&&&&&& SCL = 0;&&&&&&&&&&&&&&& //拉低时钟线
&&&&&&& Delay5us();&&&&&&&&&&&& //延时
&&& BH1750_RecvACK();
/**************************************
从IIC总线接收一个字节数据
**************************************/
BYTE BH1750_RecvByte()
&&& BYTE dat = 0;
&&& SDA = 1;&&&&&&&&&&&&&&&&&&& //使能内部上拉,准备读取数据,
&&& for (i=0; i&8; i++)&&&&&&&& //8位计数器
&&&&&&& dat &&= 1;
&&&&&&& SCL = 1;&&&&&&&&&&&&&&& //拉高时钟线
&&&&&&& Delay5us();&&&&&&&&&&&& //延时
&&&&&&& dat |= SDA;&&&&&&&&&&&& //读数据&&&&&&&&&&&&&
&&&&&&& SCL = 0;&&&&&&&&&&&&&&& //拉低时钟线
&&&&&&& Delay5us();&&&&&&&&&&&& //延时
//*********************************
void Single_Write_BH1750(uchar REG_Address)
&&& BH1750_Start();&&&&&&&&&&&&&&&&& //起始信号
&&& BH1750_SendByte(SlaveAddress);&& //发送设备地址+写信号
&&& BH1750_SendByte(REG_Address);&&& //内部寄存器地址,请参考中文pdf22页
& //& BH1750_SendByte(REG_data);&&&&&& //内部寄存器数据,请参考中文pdf22页
&&& BH1750_Stop();&&&&&&&&&&&&&&&&&& //发送停止信号
//********单字节读取*****************************************
uchar Single_Read_BH1750(uchar REG_Address)
{& uchar REG_
&&& 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_
//*********************************************************
//连续读出BH1750内部数据
//*********************************************************
void Multiple_read_BH1750(void)
&&& BH1750_Start();&&&&&&&&&&&&&&&&&&&&&&&&& //起始信号
&&& BH1750_SendByte(SlaveAddress+1);&&&&&&&& //发送设备地址+读信号
& for (i=0; i&3; i++)&&&&&&&&&&&&&&&&&&&&& //连续读取6个地址数据,存储中BUF
&&&&&&& BUF[i] = BH1750_RecvByte();&&&&&&&&& //BUF[0]存储0x32地址中的数据
&&&&&&& if (i == 3)
&&&&&&&&&& BH1750_SendACK(1);&&&&&&&&&&&&&&& //最后一个数据需要回NOACK
&&&&&&& else
&&&&&&& {&
&&&&&&&&& BH1750_SendACK(0);&&&&&&&&&&&&&&& //回应ACK
&&& BH1750_Stop();&&&&&&&&&&&&&&&&&&&&&&&&& //停止信号
&&& Delay5ms();
//初始化BH1750,根据需要请参考pdf进行修改****
void Init_BH1750()
&& Single_Write_BH);
//*********************************************************
//主程序********
//*********************************************************
void main()
&& delay_nms(200);&&&& //延时200ms
&& InitLcd();&&&&&&&&&& //初始化LCD
&& Init_BH1750();&&&&&& //初始化BH1750
& while(1)&&&&&&&&&&&&& //循环
&&& Single_Write_BH);&& // power on
&&& Single_Write_BH);&& // H- resolution mode
&&&& delay_nms(180);&&&&&&&&&&&&& //延时180ms
&&& Multiple_Read_BH1750();&&&&&& //连续读出数据,存储在BUF中
&&& dis_data=BUF[0];
&&& dis_data=(dis_data&&8)+BUF[1];//合成数据
&&& temp=(float)dis_data/1.2;
&&& conversion(temp);&&&&&&&& //计算数据和显示
&DisplayOneChar(0,0,'L');
&DisplayOneChar(1,0,'i');
&DisplayOneChar(2,0,'g');
&DisplayOneChar(3,0,'h');
&DisplayOneChar(4,0,'t');
&&& DisplayOneChar(5,0,':');
&&& DisplayOneChar(7,0,wan); //显示数据
&&& DisplayOneChar(8,0,qian);
&&& DisplayOneChar(9,0,bai);
&&& DisplayOneChar(10,0,shi);
&DisplayOneChar(11,0,ge);
&DisplayOneChar(13,0,'l'); ////显示数单位
&DisplayOneChar(14,0,'x');&&&&&&&&&&&
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights ReservedAccess forbidden!
Access forbidden!
You don't have permission to access the requested object.
It is either read-protected or not readable by the server.
If you think this is a server error, please contact
05/24/15 08:54:15
Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9淘宝网光照度传感器 GY-30 数字光强度模块 BH1750FVI 光照感器模块-淘宝折8000zhe8000网
您当前位置:(eryuangou.)&&&&光照度传感器 GY-30 数字光强度模块 BH1750FVI 光照感器模块
价格: ¥ 8.58
促销: ¥ 8.58&&&&&亲,可以节省0元哦!
商品来源: 天猫旗舰店
ctrl+d 快捷收藏 或 导航下载快捷链接
光照度传感器 GY-30 数字光强度模块 BH1750FVI 光照感器模块
淘宝网特卖30 数字
淘宝网购物30 数字
淘宝网30 数字
京东购物30 数字
Powered byBH1750FVI光强度测量例程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
&&¥2.00
&&¥3.00
&&¥1.00
&&¥2.00
&&¥2.00
&&¥2.00
喜欢此文档的还喜欢
BH1750FVI光强度测量例程
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:6.78KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于BH1750FVI的室内光照强度测量仪
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

更多关于 bh1750fvi电路图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信