4763|3

9792

帖子

24

TA的资源

版主

楼主
 

发一个si7020温湿度传感器的lpc812程序 [复制链接]

本帖最后由 littleshrimp 于 2014-8-27 12:28 编辑

Si701x/2x 设备是 Silicon Labs 第二代相对湿度和温度传感器系列。此设备系列的所有产品均配备经过工厂完全校准的湿度和温度传感器元件、模拟-数字转换器、信号处理功能和一个 I2C 主机接口。使用获得专利认可的低导电聚合物介电质能获得高精度、长期稳定度,以及低漂移和低滞后。创新性 CMOS 设计还为相对湿度和温度传感器提供业内最低功耗。
设计师将感受 Si701x/2x 系列提供的一组独特性能。凭借完全的工厂校准,Si701x/2x 设备在 PCB 装配期间不需要额外的相对湿度/温度校准。为了在 PCB 回流焊设备运行期间免受灰尘、污垢和化学污染物,Si701x/2x 系列的所有产品均配备一个可选的工厂安装的防护罩。另外,需要 2 区温度感应的设计将得益于 Si7013 中使用可编程线性化植入的辅助传感器。
产品页面:http://cn.silabs.com/products/se ... s/si7013-20-21.aspx


  1. /*******************************************************************************
  2. * Copyright (C), 2014, ?? Tech. Co., Ltd.
  3. * FileName: main.c
  4. * Author: littleshrimp
  5. * Version : 1.0
  6. * Date:  2014-7-30 9:23
  7. * Description:
  8. * Function List: //
  9. * 1. -------
  10. * History:
  11. * <author>   <time>                <version >  <desc>
  12. * zhangfeng      2014-7-30 9:23  1.0         build this moudle
  13. ******************************************************************************/

  14. /*******************************************************************************
  15. *  * INCLUDES
  16. *  */

  17. #include "LPC8xx.h"
  18. #include "si7020.h"
  19. /*******************************************************************************
  20. *  * MACROS
  21. *  */

  22. /*******************************************************************************
  23. *  * CONSTANTS
  24. *  */

  25. /*******************************************************************************
  26. *  * TYPEDEFS
  27. *  */

  28. /*******************************************************************************
  29. *  * GLOBAL VARIABLES
  30. *  */

  31. /*******************************************************************************
  32. *  * EXTERNAL VARIABLES
  33. *  */

  34. /*******************************************************************************
  35. *  * EXTERNAL FUNCTIONS
  36. *  */

  37. /*******************************************************************************
  38. *  * LOCAL VARIABLES
  39. *  */

  40. static float rh,tmp;
  41. /*******************************************************************************
  42. *  * PROFILE CALLBACKS
  43. *  */

  44. /*******************************************************************************
  45. *  * LOCAL FUNCTIONS
  46. *  */

  47. /*******************************************************************************
  48. *  * PUBLIC FUNCTIONS
  49. *  */
  50. /*******************************************************************************
  51. * Function:      myDelay
  52. * Description:   延时一毫秒
  53. * Calls:         
  54. * Input:         uint32_t ulTime//毫秒数
  55. * Return:        void
  56. ******************************************************************************/
  57. void myDelay (uint32_t ulTime)
  58. {
  59.     uint32_t i;

  60.     while (ulTime--) {
  61.         for (i = 0; i < 2401; i++);
  62.     }
  63. }
  64. /*******************************************************************************
  65. * Function:      main
  66. * Description:   主函数
  67. * Calls:         
  68. * Input:         void
  69. * Return:        int
  70. ******************************************************************************/
  71. int main (void)
  72. {
  73.     SystemInit();//系统初始化
  74.     Si7020_Init();//初始化si7020
  75.     while(1)
  76.     {
  77.         tmp = ReadTemperature();//读温度
  78.         rh = ReadHumidity();//读湿度
  79.         myDelay(500);//延时500ms
  80.     }
  81. }
复制代码



  1. /*******************************************************************************
  2. * Copyright (C), 2014, ?? Tech. Co., Ltd.
  3. * FileName: si7020.c
  4. * Author: littleshrimp
  5. * Version : 1.0
  6. * Date:  2014-7-30 9:19
  7. * Description:
  8. * Function List: //
  9. * 1. -------
  10. * History:
  11. * <author>   <time>                <version >  <desc>
  12. * zhangfeng      2014-7-30 9:19  1.0         build this moudle
  13. ******************************************************************************/

  14. /*******************************************************************************
  15. *  * INCLUDES
  16. *  */

  17. #include "si7020.h"
  18. #include "i2c.h"
  19. /*******************************************************************************
  20. *  * MACROS
  21. *  */

  22. /*******************************************************************************
  23. *  * CONSTANTS
  24. *  */

  25. #define SI7021_W                 0x80
  26. #define SI7021_R                 0x81        

  27. /*******************************************************************************
  28. *  * TYPEDEFS
  29. *  */

  30. /*******************************************************************************
  31. *  * GLOBAL VARIABLES
  32. *  */

  33. /*******************************************************************************
  34. *  * EXTERNAL VARIABLES
  35. *  */

  36. /*******************************************************************************
  37. *  * EXTERNAL FUNCTIONS
  38. *  */

  39. /*******************************************************************************
  40. *  * LOCAL VARIABLES
  41. *  */

  42. /*******************************************************************************
  43. *  * PROFILE CALLBACKS
  44. *  */

  45. /*******************************************************************************
  46. *  * LOCAL FUNCTIONS
  47. *  */

  48. /*******************************************************************************
  49. *  * PUBLIC FUNCTIONS
  50. *  */
  51. /*******************************************************************************
  52. * Function:      Si7020_Init
  53. * Description:   初始化si7020
  54. * Calls:         I2CMSTInit()
  55. * Input:         void
  56. * Return:        void
  57. ******************************************************************************/
  58. void Si7020_Init(void)
  59. {
  60.     I2CMSTInit(SI7021_W);//初始化I2C
  61. }
  62. /*******************************************************************************
  63. * Function:      ReadTemperature
  64. * Description:   读温度
  65. * Calls:         I2CRead2Byte()
  66. * Input:         void
  67. * Return:        float//温度值
  68. ******************************************************************************/
  69. float ReadTemperature(void)
  70. {
  71.     uint8_t buf[2];
  72.     float temp;
  73.     I2CRead2Byte(CMD_MEASURE_TEMPERATURE_HOLD,buf);
  74.     temp = 175.72f * (buf[0]<<8 | buf[1]) / 65536 - 46.85;
  75.     return temp;
  76. }
  77. /*******************************************************************************
  78. * Function:      ReadHumidity
  79. * Description:   读湿度
  80. * Calls:         
  81. * Input:         void
  82. * Return:        float//温度值
  83. ******************************************************************************/
  84. float ReadHumidity(void)
  85. {
  86.     uint8_t buf[2];
  87.     float humi;
  88.     I2CRead2Byte(CMD_MEASURE_HUMIDITY_HOLD,buf);
  89.     humi = 125.00f * (buf[0]<<8 | buf[1]) / 65536 - 6;
  90.     return humi;
  91. }
  92. /*******************************************************************************
  93. * Function:      test
  94. * Description:   测试函数
  95. * Calls:         
  96. * Input:         void
  97. * Return:        void
  98. ******************************************************************************/
  99. void test(void)
  100. {
  101.     float rh,tmp;
  102.     Si7020_Init();//初始化si7020
  103.     while(1)
  104.     {
  105.         tmp = ReadTemperature();//读温度
  106.         rh = ReadHumidity();//读湿度
  107.         myDelay(500);//延时500ms
  108.     }
  109. }
复制代码
  1. /*******************************************************************************
  2. * Copyright (C), 2014, ?? Tech. Co., Ltd.
  3. * FileName: i2c.c
  4. * Author: littleshrimp
  5. * Version : 1.0
  6. * Date:  2014-7-30 9:22
  7. * Description:
  8. * Function List: //
  9. * 1. -------
  10. * History:
  11. * <author>   <time>                <version >  <desc>
  12. * zhangfeng      2014-7-30 9:22  1.0         build this moudle
  13. ******************************************************************************/

  14. /*******************************************************************************
  15. *  * INCLUDES
  16. *  */

  17. #include "LPC8xx.h"

  18. /*******************************************************************************
  19. *  * MACROS
  20. *  */

  21. /*******************************************************************************
  22. *  * CONSTANTS
  23. *  */

  24. #define I2C_SLV_WRITE                 (slvAddr & 0xfe)
  25. #define I2C_SLV_READ                 (slvAddr | 0x01)        
  26. /*******************************************************************************
  27. *  * TYPEDEFS
  28. *  */

  29. /*******************************************************************************
  30. *  * GLOBAL VARIABLES
  31. *  */

  32. /*******************************************************************************
  33. *  * EXTERNAL VARIABLES
  34. *  */

  35. /*******************************************************************************
  36. *  * EXTERNAL FUNCTIONS
  37. *  */

  38. /*******************************************************************************
  39. *  * LOCAL VARIABLES
  40. *  */

  41. static uint8_t slvAddr;
  42. /*******************************************************************************
  43. *  * PROFILE CALLBACKS
  44. *  */

  45. /*******************************************************************************
  46. *  * LOCAL FUNCTIONS
  47. *  */

  48. /*******************************************************************************
  49. *  * PUBLIC FUNCTIONS
  50. *  */

  51. /*********************************************************************************************************
  52. ** Function name:       I2CInit
  53. ** Descriptions:        I2C主机初始化
  54. ** input parameters:    无
  55. ** output parameters:   无
  56. ** Returned value:      无
  57. *********************************************************************************************************/
  58. void I2CMSTInit (uint8_t _slvAddr)
  59. {
  60.     slvAddr = _slvAddr;
  61.     LPC_IOCON->PIO0_10  &= ~(0x3 << 8);                                 /* 引脚属性                     */
  62.     LPC_IOCON->PIO0_10  |=  (0x2 << 8);                                 /* 使能I2C_SDA 增强快速模式     */
  63.     LPC_IOCON->PIO0_11  &= ~(0x3 << 8);
  64.     LPC_IOCON->PIO0_11  |=  (0x2 << 8);                                 /* 使能I2C_SCL 增强快速模式     */
  65.    
  66.     LPC_SWM->PINASSIGN7 &= ~(0xFFUL << 24);                             /* 管脚分配                     */
  67.     LPC_SWM->PINASSIGN7 |=  (10 << 24);                                 /* I2C_SDA ~ P0.10              */
  68.     LPC_SWM->PINASSIGN8 &= ~(0xFF << 0);
  69.     LPC_SWM->PINASSIGN8 |=  (11 << 0);                                  /* I2C_SCL ~ P0.11              */
  70.    
  71.     /*
  72.      * 时钟换算关系:       I2C_Pclk   = MAIN_CLK / SYSAHBCLKDIV;
  73.      *                      I2C_Fclk   = I2C_Pclk / DIVVAL;
  74.      *                      I2C_SCLclk = I2C_Fclk / (MSTSCLLOW + MSTSCLHIGH + 4);
  75.      *
  76.      * 系统时钟:           MAIN_CLK   = 24 MHz,    SYSAHBCLKDIV = 1;
  77.      * I2C增强快速模式:    I2C_SCLclk = 400 kHz;
  78.      
  79.      * CAT24C02要求:       I2C_Fclk    = 8 * I2C_SCLclk = 3.2 MHz, MSTSCLLOW = 2, MSTSCLHIGH = 0;
  80.      *                      DIVVAL      = I2C_Pclk / I2C_Fclk - 1= 24 / 3.2 - 1 = 7;
  81.      */
  82.     LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 5);                              /* 初始化I2C AHB时钟            */
  83.     LPC_I2C->DIV      = 7;
  84.     LPC_I2C->MSTTIME |= (2 << 0) | (0 << 4);                            /* SCL_LOW = SCL_HIGH = 2 * CLK */
  85.     LPC_I2C->CFG     |= (1 << 0) | (0 << 3);                            /* 使能主机模式,禁止超时       */
  86. }

  87. /*********************************************************************************************************
  88. ** Function name:       I2CWriteByte
  89. ** Descriptions:        I2C写单字节
  90. ** input parameters:    uiSubAddr: 器件子地址
  91. **                      ucData:    写入数据
  92. ** output parameters:   无
  93. ** Returned value:      无
  94. *********************************************************************************************************/
  95. void I2CWriteByte (uint32_t uiSubAddr, uint8_t ucData)
  96. {
  97.     while (!(LPC_I2C->STAT & 1));                                       /* 等待空闲                     */
  98.     LPC_I2C->MSTDAT  = I2C_SLV_WRITE;
  99.     LPC_I2C->MSTCTL  = (1 << 1) | (1 << 0);                             /* 发送起始位                   */
  100.    
  101.     while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                     */
  102.     LPC_I2C->MSTDAT  = uiSubAddr;
  103.     LPC_I2C->MSTCTL  = (1 << 0);                                        /* 发送子地址                   */
  104.    
  105.     while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                     */
  106.     LPC_I2C->MSTDAT  = ucData;
  107.     LPC_I2C->MSTCTL  = (1 << 0);                                        /* 发送数据                     */
  108.    
  109.     while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                     */
  110.     LPC_I2C->MSTCTL  = (1 << 2) | (1 << 0);                             /* 发送停止位                   */
  111. }

  112. /*********************************************************************************************************
  113. ** Function name:       I2CReadByte
  114. ** Descriptions:        I2C读单字节
  115. ** input parameters:    uiSubAddr: 器件子地址
  116. **                      pucData:   保存读出数据的指针
  117. ** output parameters:   无
  118. ** Returned value:      无
  119. *********************************************************************************************************/
  120. void I2CReadByte (uint32_t uiSubAddr, uint8_t *pucData)
  121. {
  122.     while (!(LPC_I2C->STAT & 1));                                       /* 等待空闲                     */
  123.     LPC_I2C->MSTDAT  = I2C_SLV_WRITE;
  124.     LPC_I2C->MSTCTL  = (1 << 1) | (1 << 0);                             /* 发送起始位                   */
  125.    
  126.     while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                     */
  127.     LPC_I2C->MSTDAT  = uiSubAddr;
  128.     LPC_I2C->MSTCTL  = (1 << 0);                                        /* 发送子地址                   */
  129.    
  130.     while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                     */
  131.     LPC_I2C->MSTDAT  = I2C_SLV_READ;
  132.     LPC_I2C->MSTCTL  = (1 << 1) | (1 << 0);                             /* 重新发送起始位               */
  133.    
  134.     while ((LPC_I2C->STAT & (7 << 1)) != (1 << 1));                     /* 等待数据可以读取状态         */
  135.     *pucData = LPC_I2C->MSTDAT;
  136.     LPC_I2C->MSTCTL  = (1 << 0);                                        /* 接收数据                     */
  137.    
  138.     while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                     */
  139.     LPC_I2C->MSTCTL  = (1 << 2) | (1 << 0);                             /* 发送停止位                   */
  140. }
  141. void I2CRead2Byte (uint32_t uiSubAddr, uint8_t *pucData)
  142. {
  143.     while (!(LPC_I2C->STAT & 1));                                       /* 等待空闲                     */
  144.     LPC_I2C->MSTDAT  = I2C_SLV_WRITE;
  145.     LPC_I2C->MSTCTL  = (1 << 1) | (1 << 0);                             /* 发送起始位                   */
  146.    
  147.     while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                     */
  148.     LPC_I2C->MSTDAT  = uiSubAddr;
  149.     LPC_I2C->MSTCTL  = (1 << 0);                                        /* 发送子地址                   */
  150.    
  151.     while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                     */
  152.     LPC_I2C->MSTDAT  = I2C_SLV_READ;
  153.     LPC_I2C->MSTCTL  = (1 << 1) | (1 << 0);                             /* 重新发送起始位               */
  154.    
  155.     while ((LPC_I2C->STAT & (7 << 1)) != (1 << 1));                     /* 等待数据可以读取状态         */
  156.     *pucData++ = LPC_I2C->MSTDAT;
  157.     LPC_I2C->MSTCTL  = (1 << 0);                                        /* 接收数据                     */
  158.         
  159.     while ((LPC_I2C->STAT & (7 << 1)) != (1 << 1));                     /* 等待数据可以读取状态         */
  160.     *pucData++ = LPC_I2C->MSTDAT;
  161.     LPC_I2C->MSTCTL  = (1 << 0);                                        /* 接收数据                     */
  162.    
  163.     while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                     */
  164.     LPC_I2C->MSTCTL  = (1 << 2) | (1 << 0);                             /* 发送停止位                   */
  165. }
  166. void I2CReadByte16bitAddr (uint32_t uiSubAddr, uint8_t *pucData)
  167. {
  168.     while (!(LPC_I2C->STAT & 1));                                       /* 等待空闲                     */
  169.     LPC_I2C->MSTDAT   = I2C_SLV_WRITE;
  170.     LPC_I2C->MSTCTL   = (1 << 1) | (1 << 0);                             /* 发送起始位                   */
  171.    
  172.     while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                     */
  173.     LPC_I2C->MSTDAT  = uiSubAddr>>8;
  174.     LPC_I2C->MSTCTL  = (1 << 0);                                        /* 发送子地址                   */
  175.     while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                     */
  176.     LPC_I2C->MSTDAT  = uiSubAddr;
  177.     LPC_I2C->MSTCTL  = (1 << 0);                                        /* 发送子地址                   */
  178.    
  179.     while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                     */
  180.     LPC_I2C->MSTDAT  = I2C_SLV_READ;
  181.     LPC_I2C->MSTCTL  = (1 << 1) | (1 << 0);                             /* 重新发送起始位               */
  182.    
  183.     while ((LPC_I2C->STAT & (7 << 1)) != (1 << 1));                     /* 等待数据可以读取状态         */
  184.     *pucData = LPC_I2C->MSTDAT;
  185.     LPC_I2C->MSTCTL  = (1 << 0);                                        /* 接收数据                     */
  186.    
  187.     while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                     */
  188.     LPC_I2C->MSTCTL  = (1 << 2) | (1 << 0);                             /* 发送停止位                   */
  189. }

  190. /*********************************************************************************************************
  191. ** Function name:       I2CWriteString
  192. ** Descriptions:        I2C写字符串
  193. ** input parameters:    uiSubAddr: 器件子地址
  194. **                      pucData:   指向发送字符串的指针
  195. **                      uiLen:     发送数据的长度(字节)
  196. ** output parameters:   无
  197. ** Returned value:      1:成功     0:失败
  198. *********************************************************************************************************/
  199. uint8_t I2CWriteString (uint32_t uiSubAddr, uint8_t *pucData, uint32_t uiLen)
  200. {
  201.     while (uiLen--) {
  202.         I2CWriteByte(uiSubAddr++,*pucData++);
  203.     }
  204.     return 1;
  205. }

  206. /*********************************************************************************************************
  207. ** Function name:       I2CReadString
  208. ** Descriptions:        I2C读字符串
  209. ** input parameters:    uiSubAddr: 器件子地址
  210. **                      pucData:   指向接收字符串的指针
  211. **                      uiLen:     读出数据的长度(字节)
  212. ** output parameters:   无
  213. ** Returned value:      1:成功     0:失败
  214. *********************************************************************************************************/
  215. uint8_t I2CReadString (uint32_t uiSubAddr, uint8_t *pucData, uint32_t uiLen)
  216. {
  217.     while (uiLen--) {
  218.         I2CReadByte(uiSubAddr++,pucData++);
  219.     }
  220.     return 1;
  221. }
复制代码
8.lpc812 si7020 温湿度传感器.rar (4.79 KB, 下载次数: 20)
此帖出自传感器论坛

最新回复

MARK,上面催的进,借鉴一下~  详情 回复 发表于 2014-9-15 09:22
点赞 关注
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

回复
举报

1119

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
过来看看~~~~~~~~~~~~~
此帖出自传感器论坛

点评

看吧,不收费~~  详情 回复 发表于 2014-8-27 16:29
 
 
 

回复

9792

帖子

24

TA的资源

版主

板凳
 
kemasz 发表于 2014-8-27 16:05
过来看看~~~~~~~~~~~~~

看吧,不收费~~

此帖出自传感器论坛
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
MARK,上面催的进,借鉴一下~
此帖出自传感器论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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