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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的dht11温湿度数码管显示proteus仿真与程序源码1 d  ^! U( m. s0 o; E8 D

9 R$ ]- I$ B+ [5 z' B
% E6 g8 D5 G* z6 ?
仿真原理图如下
5 Z' k2 ?9 T+ R ) V+ [: O2 l$ C6 ~  I$ `9 X) T0 x9 X

8 Z7 M* T3 q/ G# H  l7 S按button1可以切换模式
5 f9 d) F+ L1 Q$ ?% ~! J模式0 只显示温度: R6 ^8 a9 G% D0 F# \
模式1 只显示湿度: f  [4 u' ?0 }( G0 O
模式2 动态显示温度和湿度,每5s切换一次9 ~- a  F2 ~2 o/ Q# u: {& d" F

4 @. K# Y( J: i$ W2 T' s

  [" k7 k& s8 O实物如下& `/ A* }/ ?8 J5 u! Y& A" {
温度显示
& ?" t9 J/ S+ x/ g: y+ e6 b' _
# R, Q1 V" s# ]5 x湿度显示  小数
! x/ l  p1 \* c$ Y 7 X1 d. s  |( J. @' z  U

% V( j" g* w' j0 Z9 M
- {; v& ?9 L& q9 y模式选择,自动显示切换湿度和温度,只显示温度,只显示湿度。4 f* n: H1 X/ U. d2 A) R0 M5 p

) x' R% g! \. r单片机源程序如下:
0 E, w- l) E' G+ G
#include<reg51.h>
( h. A; Z5 W- }  a
' ]+ g, a4 ~( I+ k' H6 J0 v* g- _
; R) Q) M8 J' T
bit DHT_Start();2 j  c. O' D9 I
bit DHT_ByteRead(unsigned char *dat);# j) B5 E' c8 |9 Z- V
void ConfigTimer0(unsigned int ms);
3 E+ v' c) t) x1 B9 E3 L7 u* xvoid Display_hum(unsigned char *num);
7 G2 Y2 b/ F( c. I. [; O3 f/ Uvoid Display_temp(unsigned char *num);/ @9 f: Q4 g" x' [* H, L# E  R

/ `8 a+ D9 L6 Y

" y( g* ~7 Z: {
: A! d/ Z4 |3 Q& q5 Z/ Q

8 w$ W( d; {* |unsigned char T0RH = 0;  //T0重载值的高字节
4 K; R6 k" B: w/ g$ b" l5 w: T" junsigned char T0RL = 0;  //T0重载值的低字节 ! c0 j! F0 n: p5 f# h7 M* f8 L
unsigned char str=88;& \  F7 }; y, n; K7 o6 S$ l
unsigned char DHT[5];9 ]' F# a8 Q7 V1 D5 v

: _6 U, W5 I5 M# l1 }: {

1 K5 E! Y0 [( Punsigned int tmr1s = 0;8 W1 b6 M) C9 q  b" C; f" n% x
unsigned int tmr10ms = 0;
3 O" n, ~. b  n7 K- eunsigned char st=0;1 C3 e; b  m9 h1 @* g+ }; K% k# w
unsigned int sdd=0;
2 O, g  p4 L$ x  I" z4 ?% Bunsigned char td=0;
/ c9 R5 M  v7 K3 iunsigned char mode=0;- M' B  _1 Z. O7 a

, @9 C; i% o1 O  F8 C# l- s. r/ c
# j5 p4 ~' D- Q8 _! s3 [- x" C- a
bit flag1s = 0;
0 s7 L7 f- y4 }: W9 b, Abit flag10ms = 0; ' ?0 F6 M8 ?# b# H, o  c7 G
int x;) a9 @' J* I4 T, ^6 k5 ]- O7 a
            
9 R0 d, c4 v% ?sbit button1=P0^0;4 V% [' u1 v) A" T$ E
sbit dot=P1^3;   //数码管小数点
; m( n8 x2 S* o" p; ]* K
% C" y: k/ _# @) ~# V, e

- p; i( j. w2 b7 X4 P; j" C. l* m- ^8 k4 x% J+ R! v2 t

! J9 _' ^6 C# K5 A# a# d; i, mvoid delay(unsigned char x)   //延时ms
! v- q" y0 Q" E, x$ t{$ I# L2 i" Y8 _: o' ]( ?% K
    unsigned char a,b,c;
+ N/ S" E5 y4 |/ d- x9 L        for(c=x;c>0;c--)  C. b7 b1 n7 G* B2 {% M9 b
    {, Z- x; j  V* {' W" X  l$ Y- D
                for(b=102;b>0;b--)) P/ ]# j6 V/ ?+ s5 V( i' ?6 ~
        for(a=3;a>0;a--);
2 y: r0 @4 g+ ~' j+ w/ p8 f$ _        }
2 e2 R/ x. k" w, b$ m6 T" m}, `" \! ]- W& w0 J
void main()          : I/ K! Z4 s0 @1 O0 ^
{                 
( k$ z% H( e' \6 J7 F+ M) A2 d2 v0 `; N, b$ m0 N$ Z3 {
! B/ P7 t3 w0 P0 e" x) a4 k+ F
    bit tmp;
- c0 p* q# V# k: `, N* @        dot=0;
) d0 u2 f' ?2 T# p    EA = 1;            //开总中断8 g8 z6 o' M' Y6 M5 T
    ConfigTimer0(10);  //T0定时10ms" Y& d& ]6 h/ x1 F0 E: c0 H
//        M1=0; M1=0;M2=0;M3=0;D1=0;D2=0;) r8 `% S( p( P$ r$ j% n! [; Y
    DHT_Start();
& m) _' [: ^, Z    delay(5);7 G) I' F1 a* j/ T

" S0 n$ D1 z! B$ o

) F" Q- i$ \3 `4 s    while (1)9 y2 s* H* ~" A( P
    {  e; l' v( _1 w% k' i7 t, v; @. h
# a6 W  }/ K% Q% ^) X

2 G. I$ ]" [% F+ Q5 v( y) L7 E9 m9 w; L4 Z( D# R$ W% p5 g! r

  U& J; \* O- {* i3 d1 T        if(flag10ms)  //数码管刷新频率% Q5 L/ G: C* W7 K- r* ~0 P- ]
                {
( W' Q1 Q, o- A5 i8 _* N) Q                   if(st==0){. ~2 g5 f, }0 r/ J' q
                                Display_temp(&str);( z/ R2 F% {: d4 l( o/ W- J3 q
                                flag10ms=0;
2 _" c) T5 A' Y% ^4 j- a) b7 H                        }4 N" Q( Z; L# P2 S1 I5 M
                   else if(st==1)7 Y. n" x% p: S* _  ^8 D1 q+ }
                   {8 B, g+ k! ~4 m# E3 _# H
                      Display_hum(&str);
6 T* H; W0 W9 d) f                          flag10ms=0;
9 k- ^3 a3 v3 `) F; E& z% F                        }
$ Z3 H3 G+ U8 N& y3 i3 l
1 b! Y* i" Z& V# U# l1 R8 P

9 R2 m$ |, t$ q* U6 S                  
3 V  |# Z. z- k                   ) X6 E% X/ I$ \: \" U4 i) Y
                }/ U& o4 }, C9 x* @. |" t
                else if (flag1s)  //每秒更新一次温度、湿度0 A- F9 |2 {7 W5 B* Q) L
        {
/ [! A- _6 e& |3 D. ~5 W6 z9 Z                DHT_Start();( i8 `4 K; W& ]9 c
                   tmp=DHT_ByteRead(&DHT);
+ N+ F% T1 g7 `                   if(tmp==1)! v: a" F6 ]+ w* _1 N
                   {
7 X4 a1 q  I; r4 u6 d1 Q' |6 b5 W3 u& S  n
7 n1 b: J4 M4 b0 M
                          if(st==0)
. X& x( v/ a& L3 C  g                          {
* B! y9 Z; b! K9 p4 f                             str = DHT[2] ;             //温度; `$ U$ z/ S" w$ ~
                                Display_temp(&str);                     
- o6 V3 _8 e. K' X                            flag1s =0;         //标志位清零) ^6 @) A* z$ C6 e( p0 g
                          }
0 B1 ?7 m! @3 [; C. g, m8 f" N* G8 L                          else if(st==1){+ C, P5 W" E9 z' N; Q

* h/ o! [, Q) e( T* y4 Q

& m" J' Y* l' }% R8 i. }$ j# g- \3 C3 c                          str = DHT[0] ;  //湿度
& I7 v/ O( D0 Y- \- H                  Display_hum(&str);
; m6 b) x9 b3 E                                  flag1s =0;         //标志位清零) r3 j0 l. ~, e
                          }
# P/ x8 t5 o* c8 x5 j; x! G: C3 T3 z+ L: p/ M5 {$ ^+ b. M# N# _# V
, P% C# x6 W: q9 B! h1 i
                          ) M* ^9 Y8 Z% T

3 V1 [0 ~6 ^3 d# ~3 ~
- H6 H0 W  W) X1 N' c
                   }4 |- `- b3 {, a2 N- X
        }' o8 a5 Z& m7 ?  W6 h
                if(button1==0)
9 d/ M, u/ \, }2 p                {
4 F' W4 G" O+ d4 ]3 c" t  }                   delay(2);
  H8 u( {) P- w: w                   7 e  |, Z; ~. G* a0 x4 W
                   if(button1==0)
2 K  C4 s1 o2 _2 g! ~                   {' I) S! }% ?. Q! l: |, I" }. L
                     
' H9 ?% ~" \6 V# `                                mode++;4 j2 k  P) H$ s7 z8 d) q0 n: e
                                switch(mode)9 F, V3 c# }5 x, z# s8 n: c8 x
                                {
# j( _- g7 U) n8 Y! `1 P                                  case 0:  st=0;      break;
) t/ G; a; \% i1 V5 u& }. U                                  case 1:  st=1;      break;
" C+ G1 N. r0 o& w* P                                  case 2:  td=1;      break;9 v, e; F; W4 ]  n! ^& D
                                  default:     break;3 R, |$ f$ C* u. e8 g9 {
                                }
) ~& I$ Q' e% C. [7 _  f, ^                                if(mode>=3)
9 d/ g! S& ?. X                                {0 p0 B) ]# O9 D) a# U" v0 J
                                  td=0;- v6 L/ L; m- L
                                  mode=0;  v0 x  F# F1 H; n
                                }
9 d0 `: S; q" ^" e7 O( K                                while(button1==0)  E* R: ~" Z. Z
                                {
" c8 a/ a2 ]: k- ]! N' H, u                                }) Y/ T( C1 _5 E

& K4 S, m: `) c( D7 t6 [
/ }& j- v0 S/ [: C! p+ X% s

  m2 L! R) r) v# c+ {- W
/ K) z4 D0 ~$ K. o' l
                   }
. M0 q, U: ?8 o% u; K$ t
- |- }; ~+ q( w) Y. g  }7 p

$ u" o: c8 z) g# v                }: {* C/ B3 S- K
+ c9 m% x: Q5 ?9 @0 t8 Z0 ?

0 v' K. y& ~' n# D! x1 W* l) c* D, I! ?
, M. b: q5 Q* b0 a) r
/ r' Q/ R/ W9 I( H# t: s
( {% u( a3 e- t! }/ f; K! U7 Q
         }# Z- J# y9 Z% `( s$ i  n1 N
}6 }0 j6 D. X1 y3 M( W' e2 w
7 A! S" V7 K; R) @

7 F$ A: I# b2 K/ `& |8 j% @3 f! b# M) B% M/ y1 p( M

7 h$ q& d+ A( D3 Y% M4 y/* 配置并启动T0,ms-T0定时时间 */
* f/ Z, d, ]0 L9 [. p( s4 G  Mvoid ConfigTimer0(unsigned int ms)' b' c7 X  @% B3 B0 k
{
+ b9 J& ?% p8 a5 w. F    unsigned long tmp;  //临时变量
- z1 D* |; y4 Z! Z: U    . o: f* q* [- P3 A6 i! K
    tmp = 11059200 / 12;      //定时器计数频率
0 s2 J3 C) ]& k2 c% o/ Z6 Q2 f    tmp = (tmp * ms) / 1000;  //计算所需的计数值
' y0 {" z: Z8 e' k5 l. ^8 @    tmp = 65536 - tmp;        //计算定时器重载值. [% o' X) H3 K$ Q4 x+ ~. B
    tmp = tmp + 12;           //补偿中断响应延时造成的误差3 F' `" M$ \9 M1 R8 P# ^" Q4 R
    T0RH = (unsigned char)(tmp>>8);  //定时器重载值拆分为高低字节. Z4 s* z) t3 L3 Q/ m! G
    T0RL = (unsigned char)tmp;
% b+ C* G! i3 l0 D    TMOD &= 0xF0;   //清零T0的控制位
, }7 g& B; @. K5 ?( }* J* j    TMOD |= 0x01;   //配置T0为模式1
4 i" p5 _) ~5 l* x" {    TH0 = T0RH;     //加载T0重载值
5 _6 U. ]( a" _/ y. G5 ], }    TL0 = T0RL;
8 i# z7 T+ k3 I2 s    ET0 = 1;        //使能T0中断9 h+ d8 W% f. k0 F' S: ?
    TR0 = 1;        //启动T0: t$ S3 N- x2 }  W# m$ x
}7 h8 @9 i" o) t  n% g5 B1 d+ f
/* T0中断服务函数,完成1秒定时 */  g& Z7 Z0 `' _" M: r( s. F" ^
void InterruptTimer0() interrupt 16 n8 P3 v' P; s. W5 v: t- V4 D
{
" ]2 f: ]0 }' \) r% f
6 B9 a  o- ~; m+ y
( a; k  @. g3 h
    TH0 = T0RH;  //重新加载重载值- N# v6 J; T6 _4 x* Z2 U
    TL0 = T0RL;5 m4 ^% }3 _: `' q/ |
    tmr1s++;
/ N6 _  b5 Y- O& g5 {        sdd++;1 D6 ~/ f2 U; _: q) n, h' K4 |
        tmr10ms++;- a9 J" r- [- i  i; J& z) G1 m
/ o7 `, Z$ s5 K0 R
/ f* m! T9 N. A0 J
        if(tmr10ms>=1)           //  数码管刷新频率* D: G# `# w2 U+ \: y
        {8 e2 Q, b! C7 [: c
                  tmr10ms=0;
! T- k# s' q, d2 r  U: H                flag10ms = 1;# \- I9 n# V9 n# _! n3 k4 a$ P
        }2 S% P7 n) ?( l/ _7 G& l
        if(td==1)
) n( T2 ]7 M- p- U; X% {! M# v  X, n# |        {
+ M, Q+ X8 |7 u( X, C$ F% C1 X: n; i          if(sdd>=500)           //温度显示5s        、湿度显示5s
6 F3 J( U. s. X4 J$ R( w          {
; F/ b& f2 c! U             sdd=0;2 J" h( t3 l0 V- l5 c- Z
             if(st==0)% e6 l* p3 g5 m! {
             {
7 |+ h( n" O) q               st=1;
6 _3 Z: M% R5 y5 O% J                 }1 Y: n+ i0 A+ U
                 else st=0;0 r& A& z8 p- |8 m& v5 }1 C
          }
2 E6 |+ d* [, ]; E        }
0 {4 X9 ^6 Y' ]" h! ]+ r: E! F2 X! {' K" d    if (tmr1s >= 200)  //1s 数据更新频率
9 M7 w9 n7 ?4 D0 W6 P    {% r4 `* D9 ~+ O8 P3 v
        tmr1s = 0;( v# J$ @; p! L" U  j: l+ c2 S
        flag1s = 1;
# E* z" z' H4 Z- P% U) b% p4 n        }8 i  W* a4 m2 ]# P: E& @$ K
$ X) z! B9 Z7 o

, z! x: D" J' R- Z6 a    % ^- y% p6 k6 D- u+ P* J
}
' m! l, }3 n$ _$ q
% [- m3 @' X$ B4 }( n
5 x# ~2 K8 [2 e+ `下载:0 x" Z8 u  Y  H# ?. x  ?" ~9 u
游客,如果您要查看本帖隐藏内容请回复

) [* k1 G( j4 X5 D% k
  q) [" y! W- S2 U

该用户从未签到

推荐
发表于 2020-6-28 22:55 | 只看该作者
&#129310;&#129310;&#129310;&#129310;) @5 p3 P9 I6 C! h0 k3 o

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

“来自电巢APP”

该用户从未签到

11#
发表于 2020-3-7 11:55 | 只看该作者
谢谢楼主分享
) G* u% ?. r" R5 ^/ P$ S, y0 l8 q3 f

该用户从未签到

12#
发表于 2020-4-20 22:21 | 只看该作者
11111111111( l8 x& E1 ^: G

该用户从未签到

13#
发表于 2020-5-8 14:47 | 只看该作者
收藏了啦啦啦啦啦2 ^) a$ |; S9 O/ X+ w  R

  L5 G" k5 ]8 C1 }

该用户从未签到

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

    [LV.1]初来乍到

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

    “来自电巢APP”

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

    [LV.1]初来乍到

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

    “来自电巢APP”

    该用户从未签到

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

    “来自电巢APP”

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-11 11:25 , Processed in 0.156250 second(s), 27 queries , Gzip On.

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

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

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