历史上的今天
返回首页

历史上的今天

今天是:2024年10月28日(星期一)

正在发生

2019年10月28日 | 单片机BH1750光强度光照度模块源程序

2019-10-28 来源:51hei

BH1750 光强度光照度模块 GY-302


单片机源程序如下:


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

// BH1750FVI IIC测试程序

// 使用单片机STC89C51 

// 晶振:11.0592M

// 显示:LCD1602

// 编译环境 Keil uVision2

// 参考宏晶网站24c04通信程序

// 时间:2011年4月20日

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

#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引脚接地时地址为0x46,接电源时地址为0xB8

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)

推荐阅读

史海拾趣

AMI [American Megatrends Inc]公司的发展小趣事

AMI(American Megatrends Inc)是一家全球领先的硬件和软件解决方案提供商,主要专注于计算机主板固件、嵌入式系统管理和云计算服务。以下是关于AMI公司发展的五个相关故事:

  1. 公司创立与起步阶段:AMI公司于1985年成立于美国佐治亚州的诺克罗斯,并在当地建立了总部。公司创始人为S. Shankar和Pat Sarma。最初,AMI专注于为个人计算机和服务器等设备提供BIOS(基本输入/输出系统)固件,为计算机硬件行业奠定了基础。

  2. BIOS技术创新:AMI在BIOS领域进行了持续的技术创新,不断推出新的功能和改进。公司开发了多个版本的AMI BIOS,包括AMI WinBIOS、AMI Aptio和AMI UEFI BIOS等。这些BIOS版本在计算机硬件市场上得到了广泛应用,为用户提供了稳定可靠的固件解决方案。

  3. 嵌入式系统管理解决方案:除了BIOS固件,AMI还致力于开发和提供嵌入式系统管理解决方案。这些解决方案包括远程管理、监控、诊断和维护等功能,用于企业服务器、网络设备、嵌入式系统和物联网(IoT)设备等领域。

  4. 合作伙伴关系与生态系统建设:AMI与全球各种硬件和软件供应商建立了紧密的合作伙伴关系,共同推动技术创新和产品发展。公司与主板制造商、芯片厂商、系统集成商和软件开发商等合作,为客户提供全面的解决方案和支持服务。

  5. 云计算服务和新兴技术领域:随着云计算和人工智能等新兴技术的发展,AMI也开始拓展业务领域,提供云计算服务和相关解决方案。公司致力于为客户提供高性能、高可靠性的云计算平台和服务,以满足不断增长的数据处理和存储需求。

这些故事展示了AMI公司从创立初期到如今在BIOS技术创新、嵌入式系统管理、合作伙伴关系建设和拓展新兴技术领域等方面取得的重要进展。AMI作为一家全球知名的硬件和软件解决方案提供商,持续致力于为客户提供创新的产品和卓越的服务。

HANBIT Electronics公司的发展小趣事

Hamamatsu(滨松光子学株式会社)在电子行业中的发展故事丰富多样,以下是根据公开信息整理的五个相关故事,每个故事均力求准确描述事实:

1. 光电倍增管的创新与突破

Hamamatsu在光电倍增管(PMT)领域取得了显著成就。光电倍增管作为宇宙线观测、中微子实验等高精度探测中的关键器件,其性能和技术要求极高。Hamamatsu抓住市场需求,与东京大学高能物理实验室等科研机构合作,成功研制出大面积探测用光电倍增管,并在多个国际中微子探测实验中得到应用。这一创新不仅推动了Hamamatsu自身的发展,也巩固了其在光电倍增管市场的领先地位。

2. 光电二极管的多样化应用

Hamamatsu的光电二极管产品线广泛,包括硅PIN光电二极管、InGaAs PIN光电二极管等多种类型,广泛应用于医疗生物、高能物理、宇宙探测、精密分析等多个领域。这些产品的多样化应用不仅展示了Hamamatsu在光电技术领域的深厚积累,也为其在全球市场的拓展提供了有力支撑。

3. 光电技术的国际合作与交流

Hamamatsu积极参与国际光电技术的交流与合作,通过举办大型展会、参与国际学术会议等方式,展示其最新的光电技术和产品。例如,Hamamatsu举办的PHOTON FAIR展会,吸引了来自全球的客户和合作伙伴,促进了光电技术的国际交流与合作。这种开放合作的态度,有助于Hamamatsu不断吸收国际先进技术,推动自身技术的持续进步。

4. 应对市场变化的灵活策略

面对电子行业的快速变化,Hamamatsu展现出了高度的市场敏感性和灵活性。当市场需求发生变化时,Hamamatsu能够迅速调整产品结构和研发方向,以满足新的市场需求。例如,在消费电子市场兴起时,Hamamatsu也积极涉足相关领域,推出了一系列适用于消费电子产品的光电传感器件。这种灵活的市场策略,使得Hamamatsu能够在激烈的市场竞争中保持领先地位。

5. 人才培养与团队建设

Hamamatsu深知人才是企业发展的根本动力,因此高度重视人才培养和团队建设。公司建立了完善的人才培养体系,通过内部培训、外部交流等多种方式,不断提升员工的专业技能和综合素质。同时,Hamamatsu还注重团队建设和企业文化建设,营造了一个积极向上、团结协作的工作氛围。这种良好的人才环境和企业文化,为Hamamatsu的持续发展提供了有力保障。

以上五个故事展示了Hamamatsu在电子行业中的发展历程和成就,体现了其在技术创新、市场拓展、国际合作、灵活应变以及人才培养等方面的综合实力。

3E SECURITY公司的发展小趣事

随着公司业务的不断扩张,3E SECURITY积极寻求与国际同行的合作机会。通过与国外知名安全公司开展技术合作、市场共享等方式,公司成功打开了国际市场的大门。同时,公司还积极参与国际安全标准的制定和推广,提升了公司在国际舞台上的影响力和竞争力。

APEM公司的发展小趣事

为了进一步拓展北美市场,APEM在1991年收购了位于美国波士顿的American Switch Corp.,并成立了子公司APEM COMPONENTS Inc.。这一收购使APEM得以在北美市场建立稳固的地位,为其全球扩张提供了有力支持。

Comus_International公司的发展小趣事

在过去几十年里,Comus International通过持续的有机增长和收购增长相结合的方式,实现了公司的快速发展。这种增长策略不仅使公司规模不断扩大,也使其业务范围更加广泛。最终,Comus International成功发展成为一家集团公司,成为电子行业中的佼佼者。

以上就是Comus International在电子行业中的五个发展故事。这些故事充分展示了公司在创新、质量、服务以及市场拓展等方面的卓越表现,也揭示了其能够在竞争激烈的电子行业中脱颖而出的原因。

FILTRONIC公司的发展小趣事

FILTRONIC深知技术创新是企业持续发展的动力源泉。因此,公司不断加大研发投入,建立了先进的研发中心和实验室,吸引了一批高素质的研发人才。通过持续的技术研发,FILTRONIC在滤波器技术、射频技术、天线技术等领域取得了多项重要突破,推出了多款具有自主知识产权的新产品。这些新产品的推出不仅进一步巩固了FILTRONIC在市场中的领先地位,也为公司的未来发展注入了新的活力。

问答坊 | AI 解惑

智能传感器与现代汽车电子

一、汽车电子操控和安全系统谈起    近几年来我国汽车工业增长迅速,发展势头很猛。因此评论界出现了一些专家的预测:汽车工业有可能超过IT产业,成为中国国民经济最重要的支柱产业之一。其实,汽车工业的增长必将包含与汽车产业相 ...…

查看全部问答>

三菱功率模块可靠性文档

功率模块可靠性资料,免费提供给大家!…

查看全部问答>

步进电机Verilog语言控制程序

步进电机Verilog语言控制程序…

查看全部问答>

ugtroj

;ngk;guhhoh…

查看全部问答>

s3c2410_gpio_cfgpin,s3c2410_gpio_setpin这些函数在哪?

请问 s3c2410_gpio_cfgpin,s3c2410_gpio_setpin这些函数在哪? 驱动中应包含什么头文件? 网上看到的是用#include , 而我在源代码目录中没有这个文件夹? 这是怎么回事? 请问一般涉及到s3c2410_gpio_cfgpin,s3c2410_gpio_setpin这些函数,驱动中的 ...…

查看全部问答>

请教大家一下电阻单位

请大家帮我讲解下这些单位的区别 在贴片电阻上这些单位的区别 392R 392Ω 3.9K 这些单位都一样吗? 请问下大家 392R 392Ω 3.9K 都一样吗? 我搜了很久没有搜索到,身边也没有可以询问的人,请大家帮帮忙,谢谢先!…

查看全部问答>

lpc1768 can

急求lpc1768can通讯函数写完初始化后不知道怎么写了,,求帮助…

查看全部问答>

对建立时间和保持时间的疑问

最近这段时间调1602的时候发现的一个关于建立时间和保持时间的问题,至今仍未想明白,特来求教各位 。。 我不知道我理解的对不对,所以先从数电书上的解释说起, 其一,对于锁存器来说,锁存器是对电平敏感的存储单元电路,可以在特定输入脉冲电 ...…

查看全部问答>

wiki啥意思啊

这个问题我早就碰到但没问出来,就是我看TI资料里网址有wiki字样,资料还不错,请问wiki啥意思,怎么给我感觉象wifi 比如:http://processors.wiki.ti.com/index.php/Category:TMS570 里边就有wiki…

查看全部问答>