找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4422|回复: 4
收起左侧

STC15W4K32S4单片机DHT11多功能数显温湿度计源码

  [复制链接]
ID:296123 发表于 2018-3-23 21:21 | 显示全部楼层 |阅读模式
该设计采用的是LCD1602显示,DHT11温湿度传感器采集环境中的温湿度,同时采用DS1302时钟模块显示当前日期和时间。

单片机源程序如下:
  1. #include "lcd1602.h"
  2. #include "dht11.h"
  3. #include "ds1302.h"

  4. unsigned char Table_LCD[]="0123456789";

  5. void IO_Init()
  6. {
  7.         /////////////////////////////////////////////////
  8.         //注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
  9.         //      高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
  10.         //相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
  11.         //        P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
  12.         /////////////////////////////////////////////////
  13.         P0M1 = 0;        P0M0 = 0;        //设置P0.0~P0.7为准双向口
  14.         P1M1 = 0;        P1M0 = 0;        //设置P1.0~P1.7为准双向口
  15.         P2M1 = 0;        P2M0 = 0;        //设置P2.0~P2.7为准双向口
  16.         P3M1 = 0;        P3M0 = 0;        //设置P3.0~P3.7为准双向口
  17.         P4M1 = 0;        P4M0 = 0;        //设置P4.0~P4.7为准双向口
  18.         P5M1 = 0;        P5M0 = 0;        //设置P5.0~P5.7为准双向口
  19. }

  20. void main()
  21. {
  22.         unsigned char val;
  23.         IO_Init();
  24.         LCD_Init();
  25.         init_ds1302();
  26.         while(1)
  27.         {
  28.                 GetDHT11_Data();
  29.                 val=(tempH+tempL+humyH+humyL)&0xff;
  30.                 if(val==CheckData)
  31.                 {
  32.                         //显示湿度
  33.                         Write_ComLCD1602(0x80+13);
  34.                         Write_DatLCD1602(Table_LCD[humyH/10]);
  35.                         Write_ComLCD1602(0x80+14);
  36.                         Write_DatLCD1602(Table_LCD[humyH%10]);
  37.                         Write_ComLCD1602(0x80+15);
  38.                         Write_DatLCD1602('%');
  39.                        
  40.                         //显示温度
  41.                         Write_ComLCD1602(0x80+0x40+13);
  42.                         Write_DatLCD1602(Table_LCD[tempH/10]);
  43.                         Write_ComLCD1602(0x80+0x40+14);
  44.                         Write_DatLCD1602(Table_LCD[tempH%10]);
  45.                         Write_ComLCD1602(0x80+0x40+15);
  46.                         Write_DatLCD1602('C');
  47.                 }
  48.                 read_ds1302();
  49.                 //显示年
  50.                 Write_ComLCD1602(0x80);
  51.                 Write_DatLCD1602('2');
  52.                 Write_ComLCD1602(0x81);
  53.                 Write_DatLCD1602('0');
  54.                 Write_ComLCD1602(0x82);
  55.                 Write_DatLCD1602(Table_LCD[time_shi[6]]);
  56.                 Write_ComLCD1602(0x83);
  57.                 Write_DatLCD1602(Table_LCD[time_ge[6]]);
  58.                
  59.                 Write_ComLCD1602(0x84);
  60.                 Write_DatLCD1602('/');
  61.                
  62.                 //显示月
  63.                 Write_ComLCD1602(0x85);
  64.                 Write_DatLCD1602(Table_LCD[time_shi[4]]);
  65.                 Write_ComLCD1602(0x86);
  66.                 Write_DatLCD1602(Table_LCD[time_ge[4]]);
  67.                
  68.                 Write_ComLCD1602(0x87);
  69.                 Write_DatLCD1602('/');
  70.                
  71.                 //显示日
  72.                 Write_ComLCD1602(0x88);
  73.                 Write_DatLCD1602(Table_LCD[time_shi[3]]);
  74.                 Write_ComLCD1602(0x89);
  75.                 Write_DatLCD1602(Table_LCD[time_ge[3]]);
  76.                
  77.                 //显示星期
  78.                 Write_ComLCD1602(0x80+11);
  79.                 Write_DatLCD1602(Table_LCD[time_ge[5]]);
  80.                
  81.                 //显示时
  82.                 Write_ComLCD1602(0x80+0x40);
  83.                 Write_DatLCD1602(Table_LCD[time_shi[2]]);
  84.                 Write_ComLCD1602(0x80+0x41);
  85.                 Write_DatLCD1602(Table_LCD[time_ge[2]]);
  86.                
  87.                 Write_ComLCD1602(0x80+0x42);
  88.                 Write_DatLCD1602(':');
  89.                
  90.                 //显示分
  91.                 Write_ComLCD1602(0x80+0x43);
  92.                 Write_DatLCD1602(Table_LCD[time_shi[1]]);
  93.                 Write_ComLCD1602(0x80+0x44);
  94.                 Write_DatLCD1602(Table_LCD[time_ge[1]]);
  95.                
  96.                 Write_ComLCD1602(0x80+0x45);
  97.                 Write_DatLCD1602(':');
  98.                
  99.                 //显示秒
  100.                 Write_ComLCD1602(0x80+0x46);
  101.                 Write_DatLCD1602(Table_LCD[time_shi[0]]);
  102.                 Write_ComLCD1602(0x80+0x47);
  103.                 Write_DatLCD1602(Table_LCD[time_ge[0]]);
  104.         }
  105. }
复制代码
0.png
所有资料51hei提供下载:
多功能数显温湿度计.zip (48.31 KB, 下载次数: 165)

评分

参与人数 2黑币 +55 收起 理由
秋水长天 + 5 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:243748 发表于 2018-3-24 18:06 来自手机 | 显示全部楼层
好资料,谢谢分享
回复

使用道具 举报

ID:296886 发表于 2018-3-25 21:39 | 显示全部楼层
学习一下,挺好的
回复

使用道具 举报

ID:933070 发表于 2021-6-7 20:42 | 显示全部楼层
有原理图吗
回复

使用道具 举报

ID:982170 发表于 2021-12-6 15:36 | 显示全部楼层
我使用oled12864单独只显示温湿度,需要删除那些程序?

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表