找回密码
 注册
关于网站域名变更的通知
查看: 775908|回复: 34
打印 上一主题 下一主题

基于51单片机的dht11温湿度数码管显示proteus仿真与程序源码

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-22 13:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
基于51单片机的dht11温湿度数码管显示proteus仿真与程序源码* u6 p5 p; }$ i6 s8 q
; b6 _; O/ g, P  X7 A5 A) J
! U* C6 E& D0 _# P, B
仿真原理图如下& p  z( A6 V% w% J9 I+ d( Y

; ^' b) Z3 r; n& y
& _) |9 X5 ~0 W按button1可以切换模式4 N- R' Z+ @, [" p# T* G* k
模式0 只显示温度7 @/ b. x9 C$ a4 h) C/ ~
模式1 只显示湿度* q  D, t  |0 P- P& `
模式2 动态显示温度和湿度,每5s切换一次
) w& T/ k& C  S# O0 G3 V  X; j, c
( h; @; y  {5 i6 J! u( T
" O8 C( b" i4 r
实物如下) N6 ?) E7 {  \, H+ S; W
温度显示
: p: M  p; x: `/ n% M( E
* c* e6 p' ]% c( i# b. M. i湿度显示  小数2 u. C3 [2 b0 Q- [
% g9 [9 y  N5 S0 V

5 E3 x! r6 g: U6 s0 ? - Y7 \6 q. e& g
模式选择,自动显示切换湿度和温度,只显示温度,只显示湿度。
) Y8 K5 I1 `3 D/ U3 n0 u1 |- S! x$ }4 r) t# ]/ i
单片机源程序如下:
3 L5 B, E$ z4 t! K
#include<reg51.h>" c+ b3 ^0 d: ]9 b" _0 c

2 M7 o- V, o$ S: \0 Q2 e

6 W  E! B* n8 I& U# }bit DHT_Start();
# m+ B$ ?! B" E  i% t5 abit DHT_ByteRead(unsigned char *dat);
% Y2 d+ ^* m8 Y( Z8 ?8 ]void ConfigTimer0(unsigned int ms);
. @2 q2 _& r5 e2 N, g3 Tvoid Display_hum(unsigned char *num);4 a; H4 H1 n" a
void Display_temp(unsigned char *num);
5 ]- P' j- H3 f7 R1 z
0 l" B- @* E) s9 N3 l+ S& S

9 z$ L/ i4 Z1 F' X% W' \
% P5 Y3 z8 y% [

* R; f6 r, }8 e8 R) E  }unsigned char T0RH = 0;  //T0重载值的高字节
2 B9 C( P7 T- Z( }7 Ounsigned char T0RL = 0;  //T0重载值的低字节   g; A' R5 D/ A9 c& N( r6 T
unsigned char str=88;) a8 k$ s, [2 q
unsigned char DHT[5];
! ~) J9 T0 H3 I- t; q
5 ]2 l. }1 ]; u' p" y) y

8 B$ W4 W# h  y6 W' _unsigned int tmr1s = 0;  ]/ e7 Z1 h- j& d6 L) L. d7 ?% o3 g
unsigned int tmr10ms = 0;
9 y0 f! Q; R$ S# {+ _! |$ ounsigned char st=0;
* E2 m8 t1 E3 t" k) funsigned int sdd=0;4 a5 c* c& l, m' e
unsigned char td=0;5 m9 ]6 F: F4 }) j; F- ^8 \
unsigned char mode=0;
; I$ J/ d4 y% M5 r. [. C% P4 V9 s$ |. s6 y. W

- z& K! S! E3 W0 S3 V- X) Bbit flag1s = 0;
* M4 g+ X- P8 g, a3 F9 rbit flag10ms = 0; - w6 S' c; _; ~: @: y/ K
int x;- P3 \0 ]: n& @/ l1 ]4 J" m
            
# N0 v9 L; L, g' B5 g, `sbit button1=P0^0;6 m6 w2 w' k7 v" V5 E  j4 V0 c
sbit dot=P1^3;   //数码管小数点
  d# T# j/ \2 }! D* q/ Q4 Z6 A! ?2 Z/ J( w- `* }( a1 s

8 I* E5 o' j. ^8 }) f4 a2 D8 G% E3 ^: U$ h5 e, t) F0 W5 H8 C% g
% d4 C% u) @6 u% o
void delay(unsigned char x)   //延时ms0 [; _! V9 }$ z( h6 \+ g$ j
{
1 }  B! k  I; K. V9 d) ]* W  C3 E    unsigned char a,b,c;' p  ^2 d; y( E% @* v
        for(c=x;c>0;c--)
- Z7 k* n. J4 H; W- T$ x    {
$ I5 f) r; ~  c4 i9 P' C  x                for(b=102;b>0;b--)5 Y5 O+ b. f, C) m! B. l0 y# p
        for(a=3;a>0;a--);
% Q3 A  ]* m2 ?. Q/ Y9 P' T        }! A5 V. M+ P9 J7 Z% `/ k
}
( Q+ g9 I+ q4 U2 A% Rvoid main()          9 ?0 x; P/ T3 x- d9 Y
{                 " d/ u2 ~" B* |7 _' {* O3 P( j2 M

0 v* ^0 f% m# H

& }7 I8 ]1 ~8 ?2 R/ t, R    bit tmp;! l+ p3 t- n1 w- Z
        dot=0;9 v8 a2 i0 j2 J/ p
    EA = 1;            //开总中断: I& b$ J& g8 A* L" P8 I
    ConfigTimer0(10);  //T0定时10ms  S$ |3 r" Q7 a/ V* e
//        M1=0; M1=0;M2=0;M3=0;D1=0;D2=0;
& v7 @9 T, E+ r; `5 Z" ^; u    DHT_Start();- R8 I/ g2 M7 R
    delay(5);/ z5 j* O  `" a% P: c: p1 _: u

8 G) P: _" z  O3 l. X! e, e
- ?6 o3 W! T8 q0 R9 W! s  O
    while (1)
  j3 T4 H2 t( Q- n2 Z. v. q    {
4 l+ M- j- v/ U; C: e% r  m! H) L; F, t. i4 Y3 `
4 ]- k; Y" S  x! @2 `; h  m' _

, e; X6 D" H, T9 \8 ~% z6 o* V; G. u
4 S( N4 [' g6 R7 c2 v
        if(flag10ms)  //数码管刷新频率* B: B2 }. L9 s+ h
                {9 d3 U- l, P# M1 M6 V& u5 R0 F
                   if(st==0){- s- n3 l  ]* L, q
                                Display_temp(&str);
" k* F6 w) R9 v( h8 i                                flag10ms=0;6 d% w; N1 q, x' M' L- u
                        }
1 ~5 {% K6 E9 v. {# ~3 a  R1 w                   else if(st==1)
5 m1 ^2 R- H( s( M0 M$ X5 t                   {
+ V6 \# u3 n: \                      Display_hum(&str);
5 y, h+ D% [2 C7 H2 n1 [                          flag10ms=0;
# s& U9 ^/ n" |7 g$ p. J                        }! j. p* h7 H6 M( ^  O

! F8 I/ a3 Z. j

; ~5 k. @) w+ B+ X, u# }                   / P8 c# ^% f( k' Z+ V" ~* p. P
                   8 i. ^* R% _: G6 Q7 P# E
                }; h" t5 ?/ a  ]( _  I7 v4 n
                else if (flag1s)  //每秒更新一次温度、湿度
$ P0 \% |5 f4 c! Q! i+ K' G% M        {
4 \9 J7 n. U/ v2 x. e) N                DHT_Start();
0 D: _; A/ C2 Y- Y                   tmp=DHT_ByteRead(&DHT);: P3 G0 R5 U/ Q( U6 v
                   if(tmp==1)/ h- y3 r+ {5 A! ~& e& j+ g9 M
                   {- ~* N. v. }+ \5 v3 o6 i

, V# C' O; U; s3 M% S$ t

) w% x. p" q# q+ |- ^( g                          if(st==0)8 t; k) g( Z# d
                          {. a' H  g' }! |  g. H
                             str = DHT[2] ;             //温度6 M4 M; P4 c5 Z: ~& B
                                Display_temp(&str);                     2 t' K- R+ E* k
                            flag1s =0;         //标志位清零/ L9 N$ k+ D5 L! b# ~% T; K
                          }
( _' P( W; V1 W& j                          else if(st==1){
; O9 N5 o* H, w6 W7 ]' z& y3 [) K' l. h! H, ?

( I1 `% w) C7 a' l# `$ O5 @                          str = DHT[0] ;  //湿度
& ~; T- W1 P( C7 u# v                  Display_hum(&str); 5 N. b+ x/ M2 O0 Y
                                  flag1s =0;         //标志位清零
5 O! S0 x1 Q5 j- Z$ O' K* Q1 y2 C                          }  W7 M2 d, `# v2 w

" B9 ]- _0 q! Z
$ f! `, `) {5 g; B
                          : M; k" p- M' `0 k; {
) E3 i9 Q9 E9 l2 N' d# R$ t
, |2 ?7 }6 r# D& X# G" y
                   }, I3 `+ k# p6 T8 r3 ^7 p
        }
" a& h; [7 {* i" G+ T                if(button1==0), |) t5 i, I3 m/ d- p( S( T' x
                {
6 w# N6 S' k- {& B( X                   delay(2);0 \2 u4 K, \7 X/ f
                   & ~, x1 n1 a( u5 g( P3 x4 W4 `
                   if(button1==0)2 j7 K5 j' Z* \8 A- P+ I
                   {
; x: G* r" A" \                      / M5 ~3 ~4 \" a. p
                                mode++;
6 E9 d* k3 G, |( _* s                                switch(mode)% _8 u2 \, K6 h2 _
                                {9 `* a# c" m# s
                                  case 0:  st=0;      break;
: h8 P8 K# {% i5 K' G  o3 c% Y                                  case 1:  st=1;      break;* k. D8 R7 g5 o! }4 i9 n
                                  case 2:  td=1;      break;
. Q  w7 j5 ^, ?) f                                  default:     break;
, E8 ]  U' l( b" J1 s* p* m0 s                                }
+ K2 o9 i' o5 c. E$ k                                if(mode>=3)6 {6 T4 v+ d) V: A8 T+ t8 m: H# S5 }
                                {
# s) {8 J% c' g: T" |) M% G                                  td=0;
% Y/ w9 _1 s+ F7 D6 B                                  mode=0;
1 e$ i7 y( \3 H! U$ B! U$ P* `                                }( _8 \. W6 P! g- J8 C5 m
                                while(button1==0)4 \; ?; A5 G  t, L; `# `
                                {1 d8 D3 w0 F0 \6 A+ z3 j0 v
                                }
5 b4 l; ~% e0 D/ a% n
8 G0 m) O/ X, E# I- s
7 q$ A- [5 Z  v$ R0 [8 G7 s! w% E5 k
7 H  \5 [  g/ s2 U! M5 E
& F  q( N9 v* |. j. P9 c! }& v9 ]
                   }" H, ?7 S9 `5 ~6 @  \) Y

: Z' U2 c. h% D: W* S9 |! R; v: F
! a/ e0 D) ]0 l$ Z
                }' i4 i. }: k4 B  K2 j: p0 Q
) A: x* V9 B- O
8 Z( y: ^0 U4 O

/ Z. M& G( B4 }6 a; I  S
9 {8 w7 s! v9 d6 V
5 x$ M) c9 R" ^6 ~, D% l5 K# \
; J$ Q3 h0 P: M8 F2 d
         }6 k4 v6 J* \( `: X# b% v7 b# I$ y
}9 c, M% J( ^) `% N( R; E6 \

! m4 _! H4 c- }& ?1 ]* Y
+ ^, P" O1 X: h
9 |( a$ d$ z; E

  T) }- ~9 ]# z( A* k; G$ R/* 配置并启动T0,ms-T0定时时间 */
; V$ c( U8 U2 Q1 U7 V& lvoid ConfigTimer0(unsigned int ms)# q2 ~# h* N/ L/ |9 m  c
{, n3 }- |% B3 `. ^$ G6 V' G
    unsigned long tmp;  //临时变量2 X: P0 W  V9 {$ P/ u" |
    & ^* v: D4 }8 Z. Z$ h3 }
    tmp = 11059200 / 12;      //定时器计数频率7 A* _- M$ ]' N; Z4 ^2 W
    tmp = (tmp * ms) / 1000;  //计算所需的计数值2 R  M, r. G# Z9 g
    tmp = 65536 - tmp;        //计算定时器重载值
# Y% D% N- E/ a8 Y! R    tmp = tmp + 12;           //补偿中断响应延时造成的误差0 Z/ _( A: F- M6 i
    T0RH = (unsigned char)(tmp>>8);  //定时器重载值拆分为高低字节3 P3 O  P- n3 v$ Y
    T0RL = (unsigned char)tmp;
5 x* r0 s! R& v* ^    TMOD &= 0xF0;   //清零T0的控制位
, E; g7 S* X' B: d    TMOD |= 0x01;   //配置T0为模式1
9 t- A0 p8 Y& \3 g& j    TH0 = T0RH;     //加载T0重载值
% c/ K5 j6 {' X3 `3 {9 \" i5 B    TL0 = T0RL;
/ \6 H2 P: R3 T! ~; j    ET0 = 1;        //使能T0中断% }# \; ]$ Q8 G  g, Z* Y0 n
    TR0 = 1;        //启动T0
3 w& r6 I7 T! r2 U5 F' ~}
& f- A* o) A3 s$ r! G* y; v/* T0中断服务函数,完成1秒定时 */
* l( O( N8 a/ k4 c1 [6 K! l  i1 `3 I8 Mvoid InterruptTimer0() interrupt 1
' ]6 j0 R+ s7 w& f: b! d7 m, @{
- y. ^8 }. V5 h; v6 z- T; M" q$ ^, v. O" v. B$ ~: O6 S
  D9 x: X& a3 Z$ k
    TH0 = T0RH;  //重新加载重载值
9 r3 Y$ [: {$ e/ `6 u, {+ U8 a: e    TL0 = T0RL;
8 T$ H8 t/ O. ?' K  G4 b    tmr1s++;* Z/ r, I- f& y0 o. p* f0 V6 A
        sdd++;
1 ?& b; ~& m  M        tmr10ms++;1 W  C: p; H$ P& i" [( {+ E
( \' c# Z$ o; A8 a3 V

8 U( d2 a6 x) H* Y+ t. z& `" n        if(tmr10ms>=1)           //  数码管刷新频率, ^. U; C$ R) Z# L# p: K
        {8 l7 @% x; R7 @. a  |
                  tmr10ms=0;" Z% T( u; `+ i) ^% }6 b* I; V
                flag10ms = 1;" |3 Y/ O4 T' K; k* \* V
        }0 ^" U1 ]: }7 T
        if(td==1)+ n; c/ E1 l3 x* }- x7 A9 K
        {7 Y! E! Q; I' a! b
          if(sdd>=500)           //温度显示5s        、湿度显示5s& B) \# F8 e4 d8 R
          {
4 Q9 g4 G3 |, o  j             sdd=0;
2 V1 Y, s! @0 @. D             if(st==0)# H1 O! H& z; e5 x5 S
             {
+ Z% T* ~8 B3 c6 ^5 X               st=1;
+ \0 t1 |$ p. G                 }
7 k; X* c, X1 i4 G6 r4 ]! x$ \                 else st=0;
; R5 g: a1 }$ v! o# }; M          }
0 ~: q: R% V7 Q3 q6 ^0 Y, s        }, V. W0 e; z, Y; B* \3 i8 T
    if (tmr1s >= 200)  //1s 数据更新频率  U# T1 G& n2 }+ A, D5 e8 R& R
    {; n0 m$ w! w7 V% Y
        tmr1s = 0;; u; ?4 Z2 @) e* ]6 D7 `; ?; H7 y
        flag1s = 1;& T/ W. i+ a/ @. w# t
        }2 K4 G8 i* |! O, f! l
% Q' E  ?; @9 O2 v! K  I* m
% e) \, Y& C$ b( W/ E: J+ U
    7 K9 _, f/ _8 M4 X' w# c
}
! n  I6 B( v" E9 }. f, }  P& f+ J
9 ~& L  P& N- I% {0 ]  n1 `, W9 `+ @3 ]  \" Z7 |7 }) u
下载:
% g' v* I1 F$ p# Y* e
游客,如果您要查看本帖隐藏内容请回复

9 M2 |) F( s# g! L1 p

( d% @" A$ M' j) Z; c7 x

该用户从未签到

推荐
发表于 2020-6-28 22:55 | 只看该作者
&#129310;&#129310;&#129310;&#129310;
7 H, T) s8 Q- a2 H

该用户从未签到

推荐
发表于 2021-1-13 10:45 | 只看该作者
感谢楼主分享,拿来学习学习

该用户从未签到

2#
发表于 2019-1-22 18:22 | 只看该作者
看看楼主的代码

该用户从未签到

6#
发表于 2019-12-6 11:02 | 只看该作者
试试能不能用

“来自电巢APP”

该用户从未签到

8#
发表于 2020-3-7 11:55 | 只看该作者
谢谢楼主分享
( R) u' p; s+ Z, h/ e' |

该用户从未签到

9#
发表于 2020-4-20 22:21 | 只看该作者
11111111111. [9 U$ g- L4 O" X

该用户从未签到

10#
发表于 2020-5-8 14:47 | 只看该作者
收藏了啦啦啦啦啦8 P8 U3 A0 ~; v  U) H  L

5 ^4 z4 M) A' F

该用户从未签到

12#
发表于 2020-5-14 17:07 | 只看该作者
感谢楼主分享,拿来学习学习
  • TA的每日心情
    难过
    2020-5-17 15:30
  • 签到天数: 1 天

    [LV.1]初来乍到

    13#
    发表于 2020-5-17 15:32 | 只看该作者
    为什么出来之后有错误?

    “来自电巢APP”

  • TA的每日心情
    难过
    2020-5-17 15:30
  • 签到天数: 1 天

    [LV.1]初来乍到

    14#
    发表于 2020-5-17 15:41 | 只看该作者
    为什么打开是三个代码吗?求回答

    “来自电巢APP”

    该用户从未签到

    15#
    发表于 2020-5-20 17:08 | 只看该作者
    大佬康康

    “来自电巢APP”

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

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-11 11:05 , Processed in 0.140625 second(s), 28 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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