温湿度传感器sht20 STC15单片机驱动程序

发布者:心灵之舞最新更新时间:2020-12-08 来源: 51hei关键字:温湿度传感器  sht20  STC15单片机  驱动程序 手机看文章 扫描二维码
随时随地手机看文章

温湿度传感器sht20驱动程序,IIC通讯,非常实用的C51驱动程序


单片机源程序如下:

#include "STC15W4K32S4.h"

#include

#include "sht20.h"

#include "delay.h"



#define uchar unsigned char

#define uint  unsigned int




// 测量分辨率 RH 12BIT、T 14BIT,测量时间RH 29ms、T 85ms

// 测量分辨率 RH 8BIT、T 12BIT,测量时间RH 4ms、T 22ms

// SCL 时钟,延时2us


sbit sda=P1^3;        //数据线

sbit scl=P1^4;        //时钟线





void start(void)       //1 启动

{

        sda=1;

        delay2us();

        scl=1;

        delay2us();

        sda=0;

        delay2us();

        scl=0;

        delay2us();

}



void stop(void)       //2        停止

{

        sda=0;

        delay2us();

        scl=1;

        delay2us();

        sda=1;

        delay2us();

        scl=0;

        delay2us();

}



void ACK (void)       //3         应答

{        

        sda=0;

        delay2us();


        scl=1;

        delay2us();               

        scl=0;

        delay2us();         

}


void noACK (void)     //非应答

{

        scl=1;

        delay2us();

        sda=0;        

        scl=0;

        delay2us();

}



bit getACK(void)     //4        接受应答

{

        bit ack1=0;


        sda=1;

        delay2us();        

                  

        scl=1;

        delay2us();

        

        ack1=sda;


        scl=0;

        delay2us();


        return ack1;        

}



void send(uchar DATA)   //5 发送一字节

{

        uchar Bit_Counter=8;

        


        while(Bit_Counter>0)

        {

               

                sda=(bit)(DATA&0x80);

                DATA<<=1;

                                

                scl=1;

                delay2us();

                scl=0;

                delay2us();

                                         

                Bit_Counter--;

        }

        

}  



unsigned char Read()      //6        接受一字节

{

        unsigned char x=0,y=8;


        sda=1;


        while(y>0)

        {

                scl=1;

                delay2us();



                if(sda)

                x=x|0x01;

                else

                x=x&0xfe;

               


                scl=0;

                delay2us();

               

                if(y>1)                        

                x=x<<1;


                y--;

        }


        return x;

}



void SHT2x_init()    // 1传感器初始化&软复位

{

        start();

        send(add_w);

        getACK();

        send(RST_code);

        getACK();

        stop();

        delay15ms();

        sda=1;

        scl=1;

}



unsigned char SHT2x_user_register()   // 2传感器用户寄存器读取

{

        uchar register_data;


        start();

        send(add_w);

        getACK();

        send(user_code_r);

        getACK();

                        

        start();

        send(add_r);

        getACK();

        register_data=Read();

        noACK();

        stop();


        return register_data;

}



void SHT2x_Resolution()          // 3 传感器测量分辨率设置                                

{                                // 测量分辨率设置RH 8 BIT、T 12 BIT,测量时间 RH4ms、T22ms

        start();

        send(add_w);

        getACK();

        send(user_code_w);

        getACK();

        send(0x3b);

        getACK();

        getACK();

        stop();        

}




bit SHT2x_battery()             // 4传感器低电压检测

{                               // 此状态在每次测量后更新

        uchar battery;


        start();

        send(add_w);

        getACK();

        send(user_code_r);

        getACK();

                        

        start();

        send(add_r);

        getACK();

        battery=Read();

        noACK();

        stop();


        battery=(battery&0x40)>>6;

        return battery;

}




/***********测量结果***********/


// 1 湿度测量

// 启动>>发送地址+写操作>>接受ACK>>湿度测量命令>>接受ACK>>启动>>发送地址+读操作>>接受ACK>>测量时间延时>>读取高位数据>>ACK>>读取地位数据>>NO_ACK>>停止

// 计算结果。返回结果

unsigned int RH_Result()   

{

        unsigned int RH_Data;

        unsigned long RH=0;        

        start();

        send(add_w);

        getACK();

        send(RH_code);

        getACK();        

        start();

        send(add_r);

        getACK();  

        delay29ms();

        RH_Data=Read();

        ACK();         

        RH_Data=RH_Data<<8;  

        RH_Data=RH_Data|Read();

        noACK();

        stop();

               

        RH_Data=RH_Data&0xfffc;               

        RH=RH_Data*12500L;

        RH=RH>>16;

        RH=RH-600;


        return RH;

}


// 2 温度测量

// 启动>>发送地址+写操作>>接受ACK>>温度测量命令>>接受ACK>>启动>>发送地址+读操作>>接受ACK>>测量时间延时>>读取高位数据>>ACK>>读取地位数据>>NO_ACK>>停止

// 计算结果。返回结果


unsigned int T_Result()

{

        unsigned int T_Data;

        unsigned long T=0;        


        start();

        send(add_w);

        getACK();

        send(T_code);

        getACK();                 

        start();

        send(add_r);

        getACK();           

        delay85ms();        


        T_Data=Read();

        ACK();        

        T_Data=T_Data<<8;            

        T_Data=T_Data|Read();

        noACK();

        stop();


        T_Data=T_Data&0xfffE;               

[1] [2]
关键字:温湿度传感器  sht20  STC15单片机  驱动程序 引用地址:温湿度传感器sht20 STC15单片机驱动程序

上一篇:基于51单片机的可调数字时钟程序
下一篇:详细LCD1602串行或者并行数据传输51单片机程序

推荐阅读最新更新时间:2024-11-17 17:05

S3C44B0X+μcLinux的嵌入式以太网设计与分析
  随着半导体技术的飞速发展,嵌入式产品已经广泛应用于军事、消费电子、网络通信、工业控制等各个领域,网络化是嵌入式系统发展的必然趋势。嵌入式Linux 作为具有开放的源代码、优秀的网络性能、可裁减等诸多优点的操作系统,非常适合用于具有网络功能的嵌入式系统。本文介绍了以S3C44B0X 的ARM处理器和RTL8019AS 以太网控制器为基础的网络接口设计,并阐述了怎样在嵌入式操作系统μcLinux 下实现对网卡的驱动。    S3C44B0X 处理器介绍   ARM是业界著名的芯片设计IP 供应商,其32 位RISC 微处理器占据了全球80%以上的市场份额。ARM7 系列处理器也是目前市场上最成熟、应用最广的处理器。SAMSUN
[嵌入式]
STC15系列单片机SPI使用教程(三)
软件模拟SPI 以STC15W408AS单片机为例 一、硬件接线 STC15系列单片机SPI使用教程(一) 二、程序编写 1、相关宏定义和引脚定义 //数据类型重定义 #ifndef uchar #define uchar unsigned char #endif #ifndef uint #define uint unsigned int #endif //IO端口定义 sbit MISO = P2^2; //主机读从设备(主入从出) sbit MOSI = P2^3; //主机写从设备(主出从入) sbit SCK = P2^1; //时钟信号 sbit CE = P2^5; sbit CS
[单片机]
基于PCI总线的数字卫星解调卡驱动程序开发
   引言   PCI总线(即外围部件互连总线)是Intel公司提出的计算机接口总线。它的时钟频率为33MHz,有32位数据总线,可支持突发传输模式,数据传输峰值速率高达132 MB/s。此外,PCI总线还可扩展为64位数据总线,扩展后的数据传输峰值速率高达264 MB/s,并支持即插即用功能而且独立于处理器。由于PCI总线具有诸多优点,它已经成为PC机的标准总线。因此,PCI接口设备的驱动程序开发就显得尤为重要。   数字卫星解调卡主要用于接收卫星发来的调制信号的数字解调。设计中的桥接芯片可采用PLX公司的PCI9054。本文主要介绍数字卫星解调卡的WDM驱动程序开发方法。    1 PCI9054接口芯片   PCI90
[电源管理]
基于PCI总线的数字卫星解调卡<font color='red'>驱动程序</font>开发
51单片机 LCD12864 驱动程序 C语言 ST7920
main.c #include reg52.h #include intrins.h #include string.h #include stdio.h #include stdlib.h #include LCD12864.h void main( void ) { Ini_Lcd(); Lcd_WriteStr(0,0, QQ137712826 ); while ( 1 ) { } } lcd12864.h #include reg52.h #include intrins.h sbit RS = P2 ^ 0; sbit R
[单片机]
51<font color='red'>单片机</font> LCD12864 <font color='red'>驱动程序</font> C语言 ST7920
AVR单片机(ATmega16L)DS18B20温度传感器驱动程序
在DALLAS网站上下个英文版的datasheet,从第一行开始看,看着看着,感觉非常惊奇,不像我当初想当然的觉得那么难理解啊,除了个别单词不认识,整体上能看出大概意思,装了个金山词霸,不会的单词马上查,发现也不是很费劲的事儿。以前打开个英文的datasheet,看着密密麻麻的英语句子,看都没看就觉得头大,以前实在是太先入为主了,自己还是太浮躁,没有静下心来,认真的看一看。决定以后下芯片资料,直接下原版datasheet。 从头看手册,对照程序完整的看了一遍,发现原因就在写时序上,程序中写字节的函数中有一句:temp_h,与时序图不符,写0时序开始后、DS18B20采样前,并没有拉高数据线,把temp_h注释掉,1602液晶马
[单片机]
AVR<font color='red'>单片机</font>(ATmega16L)DS18B20温度<font color='red'>传感器</font><font color='red'>驱动程序</font>
TM1637数码管显示STC51单片机驱动程序
/* Coder : Farman Date : 2018-01-02 参考了厂家的TM1637数据手册,在此表示感谢。 */ #include STC89C5XRC.h //包含52单片机头文件 #include Delay.h //////////////////////////////////////////////////////////////////////////// sbit I2C_SCL = P2^1; //定义模拟IIC总线的时钟线 sbit I2C_SDA = P2^0; //定义模拟IIC总线的数据线 #define TM1637_BRIGHTNESS 7 // 0 - 7
[单片机]
基于无线传感网络的煤矿综合监测系统
    我国作为世界产煤大国,煤矿产量占世界35%。但我国同时也是矿难大国,因矿难的死亡人数竟占世界的80%,煤矿百万吨死亡率是美国的100倍、南非的30倍。这其中大多是因为瓦斯爆炸引起的,严重威胁着矿工的生命安全。因此煤矿都需要建立完善的自动监测、预警系统,对矿井中的瓦斯、一氧化碳等易燃易爆气体含量以及温度、湿度等重要参数及时掌握,保证工作环境的安全。     目前传统的管理方式基本都是靠工作人员实地观测并通过对讲机等通讯设施,人工向监控中心汇报情况,安全性和实时性都较差,还可能造成无法发现、漏报、迟报等危险。因此基于各种网络的自动监测系统成为了煤矿安全生产发展的方向。     国内目前在矿区使用的较成熟的监测系统,大多采用有线方
[嵌入式]
触摸屏驱动程序的设计和实现
    式设备触摸屏按其技术原理可分为五类:矢量压力传感式、电阻式、电容式、红外线式和表面声波式。其中电阻式触摸屏在嵌入式系统中用的较多,电阻式触摸屏可分为四线、五线、七线等几种。一般来说,WinCE触摸屏驱动的设计和实现有以下几个步骤:   (1)配置和初始化触摸屏   触摸屏驱动在初始化过程会调用TouchPanelEnable函数,该函数调用的DDSI函数为DdsiTouchPanelEnable和 DdsiTouchPanelDisable。这两个DDSI接口函数是驱动实现的关键所在,分别用于打开和关闭触摸屏硬件。但是为了降低功耗,这两个函数其实可以不真正操作硬件,而只是实现软件上的控制。   同时,在初始化时
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved