基于51单片机1602液晶显示GY-30数字光照传感器BH1750FVI程序实例,系统由GY-30数字光照传感器、51单片机最小系统、1602液晶显示屏组成,电路简单,附件中的程序是实物验证过了的。100%可用。是GY-30数字光照传感器运用一个比较好的实例。

光照传感器图A.jpg (100.58 KB, 下载次数: 18)

GY-30数字光照传感器A

2019-6-3 19:46 上传

光照传感器图B.jpg (133.3 KB, 下载次数: 14)

GY-30数字光照传感器B

2019-6-3 19:46 上传

光照传感器图C.jpg (92.53 KB, 下载次数: 15)

GY-30数字光照传感器C

2019-6-3 19:46 上传

基于51单片机1602液晶显示GY-30数字光照传感器BH1750FVI程序

#include

#include      //Keil library

#include     //Keil library

#include

#define   uchar unsigned char

#define   uint unsigned int

#define   DataPort P0         //LCD1602数据端口

sbit          SCL=P1^0;      //IIC时钟引脚定义

sbit            SDA=P1^1;      //IIC数据引脚定义

sbit      LCM_RS=P2^0;   //LCD1602命令端口

sbit      LCM_RW=P2^1;   //LCD1602命令端口

sbit      LCM_EN=P2^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,wan;            //显示变量

int     dis_data;                       //变量

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/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;

}

//毫秒延时**************************

void delay_nms(unsigned int k)

{

unsigned int i,j;

for(i=0;i

{

for(j=0;j<121;j++)

{;}}

}

/*******************************/

void WaitForEnable(void)

{

DataPort=0xff;

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);

}

/**************************************

延时5微秒(STC90C52RC@12M)

不同的工作环境,需要调整此函数,注意时钟过快时需要修改

当改用1T的MCU时,请调整此延时函数

**************************************/

void Delay5us()

{

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

}

/**************************************

延时5毫秒(STC90C52RC@12M)

不同的工作环境,需要调整此函数

当改用1T的MCU时,请调整此延时函数

**************************************/

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 = ack;                  //写应答信号

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)

{

BYTE i;

for (i=0; i<8; i++)         //8位计数器

{

dat <<= 1;              //移出数据的最高位

SDA = CY;               //送数据口

SCL = 1;                //拉高时钟线

Delay5us();             //延时

SCL = 0;                //拉低时钟线

Delay5us();             //延时

}

BH1750_RecvACK();

}

/**************************************

从IIC总线接收一个字节数据

**************************************/

BYTE BH1750_RecvByte()

{

BYTE i;

BYTE dat = 0;

SDA = 1;                    //使能内部上拉,准备读取数据,

for (i=0; i<8; i++)         //8位计数器

{

dat <<= 1;

SCL = 1;                //拉高时钟线

Delay5us();             //延时

dat |= SDA;             //读数据

SCL = 0;                //拉低时钟线

Delay5us();             //延时

}

return dat;

}

//*********************************

.....................................................................................................由于程序较长,需要的请自行下载附件。

全部资料51hei下载地址:

2019-6-3 19:46 上传

点击文件名下载附件

基于51单片机1602液晶显示GY-30数字光照传感器BH1750FVI程序实例

下载积分: 黑币 -5

51lcd显示光传感器c语言程序,基于51单片机1602液晶显示GY-30数字光照传感器BH1750FVI程序实例...相关推荐

  1. 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]

    /***************************************************************/ /*[基于51单片机的无线遥控小车设计] 作者王*茹 */ /*** ...

  2. 共阳极数码时钟c语言程序,基于51单片机C语言数字钟程序.doc

    基于51单片机C语言数字钟程序 基于51单片机C语言数字钟程序 数字电子钟的设计 一. 绪论 (一)引言 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地 ...

  3. 洗衣机控制系统c语言编程,采用C语言编辑基于51单片机的全自动洗衣机控制系统毕业论文.doc...

    采用C语言编辑基于51单片机的全自动洗衣机控制系统毕业论文 深 圳 大 学 本 科 毕 业 论 文(设计) 题目: 基于单片机设计的全自动 洗衣机控制器 姓名: 郑嘉泽 专业: 电子信息工程 学院: ...

  4. 基于51单片机轮胎胎压监测系统-压力传感器(仿真+程序+报告)

    本设计: 基于51单片机轮胎胎压监测系统-压力传感器(仿真+程序+报告) Proteus仿真版本:proteus7.8 程序编译器:keil 4 编程语言:C语言 编号C0018 ----本设计分享下 ...

  5. 基于51单片机的数字电压表(ADC0832)(Proteus仿真+程序)

    编号:29 基于51单片机的数字电压表(ADC0832) 功能描述: 本设计由51单片机最小系统+ADC0832模块+两路模拟量输入模块+液晶1602显示模块 1.主控制器是AT89C82单片机 2. ...

  6. 基于51单片机的智能鱼缸设计。 有原理图,程序,原文,可代做实物。 才用STC12C5A60S2,最新款国产51单片机

    基于51单片机的智能鱼缸设计. 有原理图,程序,原文,可代做实物. 才用STC12C5A60S2,最新款国产51单片机. 本系统设计的主要是基于单片机为核心,设计一款集温度检测.恒温控制.步进电机控制 ...

  7. 基于51单片机的数字电压表(PCF8591)(Proteus仿真+程序)

    编号:32 基于51单片机的数字电压表(PCF8591) 功能描述: 本设计由51单片机最小系统+PCF8591模块+四路模拟量输入模块+一路DA输出+液晶1602显示模块 1.主控制器是89C82单 ...

  8. 基于51单片机1602温度显示时钟

    基于51单片机LCD1602温度显示时钟 要在1602上显示时间和温度先要了解1602是如何显示的.详情可以参考我之前的文章基于51单片机1602显示 :时间显示可以用时钟芯片DS1302,但是此次我 ...

  9. 基于51单片机的智能加湿器设计。 有仿真,程序,原理图,原文

    基于51单片机的智能加湿器设计. 有仿真,程序,原理图,原文. 可做实物. 通过DHT11实时监测环境温湿度,按键设定温湿度阈值,超限加湿器工作. 有水位检测电路,水位不足时候,报警提醒,防止干烧. ...

最新文章

  1. 十步优化SQL Server中的数据访问
  2. Mysql 都会遭受哪些方面的攻击?
  3. OpenGLES 2.0 可编程渲染管线
  4. GIthub创建文件夹、跳转链接、Read.me添加图片和换行显示等操作
  5. 我38岁,从外企技术高管到失业在家,只因为做错了这件事
  6. primal and dual linear problem
  7. bootstrap中关于兼容ie8 和 rem的问题总结
  8. vfp报表纸张设置_VFP报表输出.doc
  9. python下载付费文档教程-python爬文档
  10. 网页游戏开发秘笈 PDF扫描版
  11. python识别图片中的文字、数值并转文档
  12. 每日单词20110501
  13. Linux下dislocate命令用法,dislocate
  14. 模拟器使用Fiddler代理后,浏览器报错【该网站的安全证书有问题】解决方法
  15. 星界边境联机服务器未响应,星界边境Starbound联机注意事项
  16. 玩转 IDEA 系列教程——强烈推荐官方中文(汉化)插件!
  17. 17个小时内,各地相继出手帮中小企业,地产商减租百亿
  18. Cornerstone清除缓存
  19. 韩国商业网站界面设计分析------推荐2005-5-24 出处:vipcn.com
  20. ubuntu换源 树莓派

热门文章

  1. 忘记密码怎么办?如何查看网页上保存的密码
  2. TELE 4662 PHOTONIC NETWORKS -Lecture 3: Light Sources and Detectors-半导体(Semiconductor)
  3. 【Pytorch】(十)生成对抗网络之WGAN,WGAN-GP
  4. 阿里大师推荐的这份Java开发必读书单,让我成功在寒冬中站稳脚步
  5. 【vue3 computed 的讲解 案例使用 v3.2+新特性】
  6. approx = cv2.approxPolyDP(points, 0.1, True) 这段代码含义
  7. linux 中的case结构,linux命令:case选择结构语句
  8. 关于java基础练习的趣味小游戏(猜数游戏)
  9. Linux中文件传输方式
  10. TMS320C645x DSP SRIO寄存器(五)——LSU和其他特殊事件中断