DS1302时钟模块    ISD1820录放模块      SG3525频率PWM控制均可调模块

掉电存储模块           触摸延时控制模块      DS1232外部看门狗模块

心率血氧传感器模块  HX711模块 称重传感器

BH1750光强模块      DHT11温湿度模块

1 BH1750光强模块

1.1 简介

1、BH1750环境光传感器内置16位的模数转换器,它能够直接输出一个数字信号,不需要再做复杂的计算。这是一种更精良的和容易使用简易电阻器的版本,通过计算电压,来获得有效的数据。这款环境光传感器能够直接通过光度计来测量。光强度的单位是流明"lx"。

这种集成电路可以根据收集的光线强度数据来调整液晶或者键盘背景灯的亮度。利用它的高分辨率可以探测较大范围的光强度变化。

特点:

2、传感器特点:

支持I2CBUS接口

接近视觉灵敏度的光谱灵敏度特性

输出对应亮度的数字值

对应广泛的输入光范围。(相当于1-65535lx)

通过降低功率功能,实现低电流化。

通过50Hz/60Hz除光噪音功能实现稳定的测定。

支持1.8v逻辑输入接口。

无需其他外部件。

光源依赖性弱。

有两种可选的I2Cslave地址。

可调的测量结果影响较大的因素为光入口大小。

使用这种功能计算1.1lx到100000lx马克斯/分钟的范围。

最小误差变动在±20%。

受红外线影响很小。

1.2 模块电路

1.3 驱动程序

//***************************************
// BH1750FVI IIC测试程序
// 使用单片机STC89C51
// 晶振:11.0592M
// 显示:LCD1602
// 编译环境 Keil uVision2//****************************************
#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=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<k;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;
}//*********************************void Single_Write_BH1750(uchar REG_Address)
{BH1750_Start();                  //起始信号BH1750_SendByte(SlaveAddress);   //发送设备地址+写信号BH1750_SendByte(REG_Address);    //内部寄存器地址,//  BH1750_SendByte(REG_data);       //内部寄存器数据,BH1750_Stop();                   //发送停止信号
}//********单字节读取*****************************************
/*
uchar Single_Read_BH1750(uchar REG_Address)
{  uchar 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)
{   uchar i;    BH1750_Start();                          //起始信号BH1750_SendByte(SlaveAddress+1);         //发送设备地址+读信号for (i=0; i<3; i++)                      //连续读取2个地址数据,存储中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_BH1750(0x01);  }
//*********************************************************
//主程序********
//*********************************************************
void main()
{  float temp;delay_nms(100);       //延时100ms   InitLcd();           //初始化LCDInit_BH1750();       //初始化BH1750while(1)              //循环{ Single_Write_BH1750(0x01);   // power onSingle_Write_BH1750(0x10);   // H- resolution modedelay_nms(180);              //延时180msMultiple_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');  }
} 

2 DHT11温湿度模块

2.1 简介

DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有枀高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。

DHT11 传感器成本低、长期稳定、相对湿度和温度测量、品质卓越、超快响应、抗干扰能力强、超长的信号传输距
离、数字信号输出、精确校准。

DHT11模块参数如下:

1 可以检测周围环境的湿度和温度

2 传感器采用DHT11

3 湿度测量范围:20%-95%(0 度-50 度范围)湿度测量误差:+-5%

4 温度测量范围:0 度-50 度温度测量误差:+-2 度

4 工作电压3.3V-5V

5 输出形式:数字输出

6 设有固定螺栓孔,方便安装

7 小板PCB 尺寸:3.2cm * 1.4cm

8 电源指示灯(红色)

2.2 设计电路

2.3 驱动程序

DH11.h

//----------------------------------------------//#include "Uart.h"
#include "intrins.h"sbit  P2_0  = P2^7 ;
//----------------------------------------------//
//----------------定义区--------------------//
//----------------------------------------------//
//
typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable      无符号8位整型变量  */
typedef signed   char  S8;       /* defined for signed 8-bits integer variable        有符号8位整型变量  */
typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable     无符号16位整型变量 */
typedef signed   int   S16;      /* defined for signed 16-bits integer variable       有符号16位整型变量 */
typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable     无符号32位整型变量 */
typedef signed   long  S32;      /* defined for signed 32-bits integer variable       有符号32位整型变量 */
typedef float          F32;      /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
typedef double         F64;      /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */
//
#define uchar unsigned char
#define uint unsigned int
#define   Data_0_time    4extern U8  U8FLAG,k;
extern U8  U8count,U8temp;
extern U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
extern U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
extern U8  U8comdata;
extern U16 U16temp1,U16temp2;void Delay(U16 j);void  Delay_10us(void);void  COM(void);void RH(void);

DH11.c

#include "DH11.h"U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;U8  U8count,U8temp;U8  U8FLAG,k;U8  U8comdata;U16 U16temp1,U16temp2;void Delay(U16 j){   while(j--){Delay1ms();}}void  Delay_10us(void){unsigned char i;_nop_();i = 25;while (--i);}void  COM(void){U8 i;for(i=0;i<8;i++)    {U8FLAG=2;  while((!P2_0)&&U8FLAG++);Delay_10us();Delay_10us();Delay_10us();Delay_10us();U8temp=0;if(P2_0)U8temp=1;U8FLAG=2;while((P2_0)&&U8FLAG++);//超时则跳出for循环       if(U8FLAG==1)break;//判断数据位是0还是1  // 如果高电平高过预定0高电平值则数据位为 1 U8comdata<<=1;U8comdata|=U8temp;        //0}//rof}//--------------------------------//-----湿度读取子程序 ------------//--------------------------------//----以下变量均为全局变量--------//----温度高8位== U8T_data_H------//----温度低8位== U8T_data_L------//----湿度高8位== U8RH_data_H-----//----湿度低8位== U8RH_data_L-----//----校验 8位 == U8checkdata-----//----调用相关子程序如下----------//---- Delay();, Delay_10us();,COM(); //--------------------------------void RH(void){//主机拉低18ms P2_0=0;Delay(18);P2_0=1;//总线由上拉电阻拉高 主机延时20usDelay_10us();Delay_10us();Delay_10us();Delay_10us();//主机设为输入 判断从机响应信号 P2_0=1;//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行     if(!P2_0)      //T !    {U8FLAG=2;//判断从机是否发出 80us 的低电平响应信号是否结束    while((!P2_0)&&U8FLAG++);U8FLAG=2;//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态while((P2_0)&&U8FLAG++);//数据接收状态         COM();U8RH_data_H_temp=U8comdata;COM();U8RH_data_L_temp=U8comdata;COM();U8T_data_H_temp=U8comdata;COM();U8T_data_L_temp=U8comdata;COM();U8checkdata_temp=U8comdata;P2_0=1;//数据校验 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);if(U8temp==U8checkdata_temp){U8RH_data_H=U8RH_data_H_temp;U8RH_data_L=U8RH_data_L_temp;U8T_data_H=U8T_data_H_temp;U8T_data_L=U8T_data_L_temp;U8checkdata=U8checkdata_temp;}//fi}//fi}

常用单片机模块(五)相关推荐

  1. saltstack使用指南----常用执行模块

    saltstack常用执行模块: cron模块 archive模块 cmd模块 cp模块 dnsutil模块 file模块 group模块 network模块 service模块 pkg模块 user ...

  2. excel进销存管理系统_通用Excel助力企业定制开发信息化系统常用功能模块

    信息化成为现代企业管理的趋势,而企业管理系统则是推动这一趋势发展的重要载体.那么什么是企业管理系统呢?企业管理系统都有那些呢? 通用Excel助力企业定制开发信息化系统常用功能模块 企业管理系统,是指 ...

  3. 常用传感器讲解五--声音传感器-(KY-037)

    常用传感器讲解五–声音传感器-(KY-037) 具体讲解 该模块由一个用于检测声音的灵敏电容麦克风和一个放大电路组成.该模块的输出既是模拟的又是数字的.数字输出用作键,并且它当声音强度达到某个阈值时激 ...

  4. 数字信号处理-05- FPGA常用运算模块-复数乘法器

    写在前面 本文是本系列的第五篇,本文主要介绍FPGA常用运算模块-复数乘法器,xilinx提供了相关的IP以便于用户进行开发使用. 复数乘法器 复数乘法器IP基于用户指定的选项实现了符合 AXI4-S ...

  5. Pygame最常用的模块详解

    Pygame最常用的模块详解 参考:pygame详细教程 参考案例:游戏模块 1. Color类 class pygame.Color Pygame 中用于描述颜色的对象. Color(name) - ...

  6. 蓝桥杯单片机模块代码(AT24C02)(代码+注释)

    本模块是上电可擦除EEPROM,用于存储需要的数据.与上一节使用的底层代码相同,运用同一个总线,其操做顺序与PCF8591除第二步几乎完全一样.相同部分具体可看:蓝桥杯单片机模块代码(PCF8591) ...

  7. PythonD12——常用第三方模块(图像、url、检测、检测系统)、图形界面、网络编程、电子邮件和web开发

    文章目录 常用第三方模块 pillow 图像处理标准库 requests 更方便地处理url chardet 检测编码方式 psutil 获取系统信息 virtualenv 隔离运行环境 图形界面(较 ...

  8. Atitit 常用sdk 模块 组织架构切分 规范与范例attilax总结

    Atitit 常用sdk 模块 组织架构切分 规范与范例attilax总结 常用200个模块 2017/04/12  22:01    <DIR>          acc 2017/04 ...

  9. 带你一起撸一遍 nodejs 常用核心模块(二)

    前沿:核心模块二主要是和流相关的部分,当然要想给这一块有清楚的了解,你需要对核心模块(一)中的内容有一些了解. fs模块 fs模块的常见方法(所有的读方法,文件必须存在,不存在就会报错,所有的写方法, ...

最新文章

  1. Linux非阻塞IO(八)使用epoll重新实现非阻塞的回射服务器
  2. tensorflow2中如何设置GPU的使用
  3. Scala集合List的常用方法:take/flatMap/filter/zip/union/intersect/diff及WordCount集合实现
  4. caffe编译报错 cudnn.hpp:127:41: error: too few arguments to function ‘cudnnStatus_t cudnnSetPooling2dDe
  5. springboot 切换日志实现
  6. 初试django模型层
  7. python21天打卡day3
  8. java中调用dos_JAVA如何调用DOS命令
  9. 5901和5909在P570中的功用
  10. 信创只是开始_一切只是开始!谁是下一个“第一创业”?
  11. dsp java_GitHub - GrayOxygen/JavaDsp: 数字信号处理(DSP)方面的Java封装,包含常用的一些处理方法,如滤波、信号变换等等。...
  12. Linux 内存管理:DAX(Direct Access)机制的作用及实现原理
  13. LoRa开发|LoRa模组AT指令开发
  14. JAVA中GUI在Button中设置显示文字时中文乱码问题
  15. android ui设计与开发工具,Android用户体验与UI设计
  16. 编写一个简单的javaweb网上商城项目
  17. [Chromium中文文档]Chrom{e,ium}{,OS}中的硬件视频加速
  18. “撸啊”不止能秒杀!| lua+redis实现高并发抢令牌
  19. 微信输入15个句号手机会崩溃?这5种方法挽救你的聊天记录!
  20. 2022绿色小工具-工程电脑一键优化工具-By.Win10_x64

热门文章

  1. 最火10款经典游戏项目合集 让你轻松拿下
  2. APK瘦身优化检测工具-Matrix ApkChecker 使用
  3. python websocket实时消息推送
  4. java算法:兔子生兔子
  5. 企业抖音号怎么运营矩阵?运营有何技巧?
  6. pr文字转语音有插件吗_Premiere pro 视频字幕的急速制作方法(语音转字幕)
  7. 循环神经网络RNN 2—— attention注意力机制(附代码)
  8. 如何把C盘里的文件默认位置更改到D盘指定目录?
  9. CC3200 TI RTOS LPDS模式
  10. Unreal Engine C++ 入门01