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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的dht11温湿度数码管显示proteus仿真与程序源码
2 b. W0 @! Q& J* d& K- j$ |7 y8 R9 R& R* Y3 p9 T6 i
$ E2 k9 O/ p0 b% Z2 m) s
仿真原理图如下
7 |, E* D  }" t( b7 B' W
9 }1 a* E" S; j/ C. t5 Z: R" v) G- v& W- J6 Y" Q
按button1可以切换模式4 k6 b$ W3 H# I
模式0 只显示温度
: |& Q0 S' z, o+ a# ^* o/ b  p模式1 只显示湿度
, B: \' L. w* i1 g- e模式2 动态显示温度和湿度,每5s切换一次+ ]; E1 C; z7 g  d) `+ ^0 b/ S+ g

# r( v4 N! u: r3 U
. w' `/ F. Z, {$ O& v/ K9 W
实物如下
+ T8 W4 M9 S1 X* |温度显示
. M/ a; M$ [. | ( o: o9 n  Y/ U7 y. P  t
湿度显示  小数3 X+ u; F& |( B" y/ F5 m
# G# j) k0 s! w9 }* s

& ?/ ?. {2 w' A
+ v) F* w6 {/ ]. T) b+ t模式选择,自动显示切换湿度和温度,只显示温度,只显示湿度。
& ~- S8 V3 E. \6 N7 J, t
6 _, z# W' ^) E; q单片机源程序如下:
% J! D" ~6 `; T0 u, j3 v
#include<reg51.h>
: E0 w2 s% h5 h7 U
, H4 A9 _, [2 J& k% v& o
  ^4 z7 G2 u: C3 N- z
bit DHT_Start();5 J" i' V! _; f  ^
bit DHT_ByteRead(unsigned char *dat);; W8 `! e( z& z, O8 \0 Z
void ConfigTimer0(unsigned int ms);
) f! F. v) W+ v% G/ dvoid Display_hum(unsigned char *num);$ k1 A* x' K. l0 Z7 C
void Display_temp(unsigned char *num);" {3 S& _6 n1 @1 `

4 q* q1 M! h# C# C' f

1 \# s& e- `6 ]3 D7 N3 i
( G# ]! s6 n: L( w0 `  s% F# c0 q

" [( S5 V7 S6 _* ?" junsigned char T0RH = 0;  //T0重载值的高字节; X- B/ M0 W/ N+ X
unsigned char T0RL = 0;  //T0重载值的低字节
/ D; r% C/ U% Sunsigned char str=88;
6 ~6 w. a$ Z# c4 E9 i% kunsigned char DHT[5];
% W  X! G) W: i% c6 Q+ g0 h) [
) N; R$ f, \7 p! t( K; ?! U
: u* F& b4 Y8 @' G: b4 S' A
unsigned int tmr1s = 0;
0 j. o& @  B- u. v  eunsigned int tmr10ms = 0;# Y; z- Y( `  O8 ]6 q+ P0 g; q  Y# q
unsigned char st=0;
' u( v, E" E& v; h: n% }- Uunsigned int sdd=0;1 I% ^( v( [, _5 I
unsigned char td=0;
, ]- i: ~4 v5 |unsigned char mode=0;% Y) F$ s) t/ j: I6 V8 c5 A
2 J8 B( v5 Q. e2 h

. \- I9 ^% M( R- D# P9 cbit flag1s = 0;
7 G  }+ E" c. b4 o1 Sbit flag10ms = 0;
" P- M: R( p$ Dint x;- A9 V( D1 b' R8 @, V
             % p: H/ L5 A9 H: t
sbit button1=P0^0;
- V6 n! K" S6 `) J/ I! [+ jsbit dot=P1^3;   //数码管小数点8 {6 c7 l) Q2 {$ P! S* w

9 b" F+ f" i8 z$ L5 r  _: c" ?% S
* p6 ?. v' S% i+ i9 F8 @3 T+ N6 T4 k

6 O& @8 W7 s' v& \

* C& [/ @( E! O. C& @- uvoid delay(unsigned char x)   //延时ms
/ }- ^9 H% g, p0 ~' ?{" ^4 c2 O: G4 M( z
    unsigned char a,b,c;8 Y$ F. s$ ^6 x
        for(c=x;c>0;c--)( P. j( K. N; Y+ A& X4 n* m4 r* j% H1 Y
    {
3 ?/ H2 r( x3 i5 A) M, ?                for(b=102;b>0;b--)
0 y, q( [- P# D% T& t7 k        for(a=3;a>0;a--);
+ q, e  y8 x. o3 D        }4 _( s7 k1 J$ |. c
}
9 g: y- D# J% C1 `void main()         
  ^* g) q& \9 E{                 
5 W( x1 W' T+ c8 v" i4 n7 Z; j. _  E. o7 z
% K6 f0 t  Z0 e/ C1 z- l
    bit tmp;
. T) F* S6 D+ n& x  f( ]" e' S8 V% Q, n        dot=0;. o  X5 U) `+ l% Q+ C" G9 {/ D* Q, d
    EA = 1;            //开总中断# X! p' h' X7 l, U
    ConfigTimer0(10);  //T0定时10ms
/ U# n% p1 [& s; F/ a# X//        M1=0; M1=0;M2=0;M3=0;D1=0;D2=0;0 w+ c4 @' }# E/ K7 u) _
    DHT_Start();' \4 U$ j/ l; X' X* ~
    delay(5);
+ B" e2 Y+ F9 g2 I- L7 o8 p8 R# o# L, [
$ m2 Y1 A5 v5 u$ E8 K1 I
    while (1)8 q2 @/ o3 ?+ A. B* J, y
    {
% W: Z0 c( P; B" I& T6 x- s2 A% A0 X1 ?5 p! ?) m

# n* Z# [: M4 L% I, m# b; T8 i! m0 I

7 b2 ^- x- H) @- T2 I7 n& D6 E        if(flag10ms)  //数码管刷新频率
( D% F2 ]! r( M" |                {3 z9 J% l7 ?' R9 _, N! n: f0 B' n- i
                   if(st==0){( ^; F& n, Y, ~; E9 ]' @
                                Display_temp(&str);; Z; X+ |) L# M! u' |2 Z1 q- U
                                flag10ms=0;
6 b! _$ r2 q# p2 u9 a, C6 a                        }
6 E( k& X9 T& ~                   else if(st==1)
4 [7 R& f$ M* B$ K                   {9 i! b6 o! \$ b. y, U8 o! o
                      Display_hum(&str);
0 D- t2 b4 ^3 I8 h, U& m0 g' h; t                          flag10ms=0;1 q6 @  ]6 ^- r; l  b/ ?
                        }
& V. U9 ]9 R9 V* m: E7 B; \7 x; s
; B0 O/ |2 \" y! Y/ ^

2 [% ]/ S' U: ]6 _  {                   8 g" C* b/ N- t( V/ [, p% I9 K) M
                   8 z' Y. L3 {3 y5 o% H$ ^9 b
                }: ]& a0 X! s" _0 u; R; o1 ^! f. ^
                else if (flag1s)  //每秒更新一次温度、湿度
  l( o% d, z/ L6 i        {+ L& v$ R5 E3 T' a
                DHT_Start();
( n- ~% h* K% H2 g                   tmp=DHT_ByteRead(&DHT);) b6 o" e. L' G! P
                   if(tmp==1)7 V# Q" ^. z$ |( d9 J) P
                   {0 H1 [# J! o( Z8 o7 F- O' X% ]
- s6 f5 L% @7 _

; j. Q$ u4 r4 I7 d                          if(st==0)
9 @5 d4 T) ?; x6 m7 I! r                          {
, S6 _  b2 ]9 w# r; Z* S                             str = DHT[2] ;             //温度
; F1 `: T9 W2 j# B% Q9 r9 B, V9 i" X                                Display_temp(&str);                     
1 S& O, |! a0 N# ^. E' ~3 r                            flag1s =0;         //标志位清零4 b3 P, @7 }9 r* _0 R- r5 x
                          }
( z9 L, F! W9 y" i3 k. d                          else if(st==1){
( i! i7 `, ?2 j1 H/ E; \0 o) X
9 L. |! w3 p- o$ J, j3 O
( \2 @7 h$ V) Z& k) ?$ t
                          str = DHT[0] ;  //湿度6 X! N+ ?" d; d5 K
                  Display_hum(&str);
8 r) ?5 M- Y* z                                  flag1s =0;         //标志位清零
+ [! O2 f( X% L- N5 w8 Y5 `. j                          }
+ G- D; I( K' O$ I: [. ], b. i
5 |) r$ i, G. W6 W% {

% M6 t5 g" A( Y/ H% n7 j                          6 d  [+ X7 l7 P7 D8 A

, R& d% y8 z0 c: q# K8 s, J- Y* P
5 z, b% }; i, y
                   }
* ~- e& ?2 p0 B0 e' A9 d4 @        }; }. l5 R* ?2 ^$ s
                if(button1==0)  R3 L  V( g; I3 f
                {/ D. B6 R. ?9 k% R
                   delay(2);! j8 Q3 H6 a: r
                   9 f9 `7 |) c# Z& L& C
                   if(button1==0)1 o/ Q( G% |# B) s7 q6 H
                   {7 L" C' P( C) Y" B: _( @' M1 y
                     
; F8 ^& V+ Q8 o4 u0 @" m                                mode++;! R+ }  S- x& [3 s0 {4 }. [5 B
                                switch(mode)
: A. H0 Z5 ]0 M, k1 r& q                                {2 F- ~6 y" _9 \2 w; i$ ~
                                  case 0:  st=0;      break;
* g6 d/ f$ l! B8 N4 y                                  case 1:  st=1;      break;
7 G! t% y2 Z, K' E) U. @' [                                  case 2:  td=1;      break;
: W% d% l# h* X/ h; A                                  default:     break;
& e1 H: A. D! i: m                                }0 M8 u5 L" g3 d5 y* i
                                if(mode>=3)# \6 S. @9 g9 O1 N- r
                                {
7 [/ U- }3 A* c7 G: y9 ?                                  td=0;
! F7 T5 o7 U/ ^" o8 _* _                                  mode=0;
, o! @& N2 l" V" J! F                                }* N8 Y3 U, n; z/ r6 {, c9 G# B
                                while(button1==0)" n9 S0 Q1 q1 g3 J1 F
                                {
, X! I4 C" f: P4 y' c                                }
7 \# ]  G, N$ p: R' a' N2 o3 R2 W& f3 a/ X! @
( U  k6 R6 }  K: L7 x5 d7 V

" Q- F. }) }1 f) T( F/ ?- j" S

  O1 A7 `$ G$ Q                   }
: q7 r( {6 I2 H  m( K
; A) M* l8 v4 H' y! b% p

" g( |+ `# l) E                }
8 p$ E7 }; N' K- L3 S
- N/ j( ?. ?) h

+ P2 ~3 n& |  Y7 o6 G) B( K) p" u8 ]& [+ x  J* V

6 m- w3 c5 n3 a* a3 c
4 ?' t- m3 P  M- O% V

9 R. h$ j1 _1 t& Z         }
& p' @! ~2 w0 X7 H3 R: _4 R}  Y# R1 R" b- T0 g* O5 `2 v$ ?/ A% ^1 I

3 x: x/ d8 X  l5 @
* x/ H2 v5 D. D* h, l# Z: l

# s' T0 n% Q; H+ o& d% Q! {6 i
" [, m2 c6 x# _" y  m1 I8 W
/* 配置并启动T0,ms-T0定时时间 */
7 d$ ^8 n5 c9 `! e$ D* H) Qvoid ConfigTimer0(unsigned int ms)3 j) I  Y! F$ Z3 R
{
5 {- a% g& \; ~7 C    unsigned long tmp;  //临时变量
/ O4 Q0 @7 y8 o* c% C2 {: v. }' z& `* r    ( T1 Z3 p- |2 Q9 W1 b- u4 n0 v, R
    tmp = 11059200 / 12;      //定时器计数频率7 p% w  }# p( _
    tmp = (tmp * ms) / 1000;  //计算所需的计数值
# E2 @$ o) r8 p" F3 |+ }% p4 m    tmp = 65536 - tmp;        //计算定时器重载值
4 o% a, v3 G, Z& k    tmp = tmp + 12;           //补偿中断响应延时造成的误差. \0 S8 L, }+ A6 l& Y1 z
    T0RH = (unsigned char)(tmp>>8);  //定时器重载值拆分为高低字节
! M6 q/ V  y& o: }. \    T0RL = (unsigned char)tmp;
$ L1 j5 T( s3 c$ j) S- x    TMOD &= 0xF0;   //清零T0的控制位
6 E  M  B" x5 W  S/ A    TMOD |= 0x01;   //配置T0为模式1! o. z# t9 B! V2 s
    TH0 = T0RH;     //加载T0重载值
  t1 R- X& |' X( C" X; L    TL0 = T0RL;' h$ u/ j* G& Q1 X! J
    ET0 = 1;        //使能T0中断- T- P% ?" n3 K; P1 y8 w8 c: |; C% G
    TR0 = 1;        //启动T0
  j9 p: p% C/ k. O  W}
; B: p( t5 T( D0 f$ y0 Q7 c- r/* T0中断服务函数,完成1秒定时 */
% j! R% w5 {/ K) ~% a; m% Evoid InterruptTimer0() interrupt 1' X% H% f6 q( l( u0 [! t
{
4 i* Q  R5 y7 C8 m8 f5 c
5 Q' k; r6 T/ W& O: q# L" m7 B
( |" `& f1 w8 E( ?& K5 _
    TH0 = T0RH;  //重新加载重载值: e8 K0 B% d2 \* A) I' u$ J
    TL0 = T0RL;
  u) F/ [( T$ N3 p    tmr1s++;
+ J3 x2 _6 U4 R( w5 Z4 v( [        sdd++;" p4 J! S8 p% q, J: U
        tmr10ms++;& V& n9 t6 v# B
0 l2 L" ]$ J# }8 ]' P! F
! L6 V9 u6 f& I3 i3 e  ]5 B
        if(tmr10ms>=1)           //  数码管刷新频率
+ M! ?5 \2 X$ {1 [: N        {
" }& J  b: F$ ]  ]8 k+ l                  tmr10ms=0;, @6 z+ i$ X& g9 x% x! l
                flag10ms = 1;
  f# X' i) \) V; m* o2 D: a9 J8 `( q        }
5 Y) V# l  B- S; t% Z1 ^; }0 C        if(td==1)4 V% }% z6 w. N$ Z. |
        {
: e+ s+ w0 Z$ F0 W          if(sdd>=500)           //温度显示5s        、湿度显示5s
( }: n+ J+ n- q7 s9 y+ v: d. O( @          {0 q* B. K* F, b% B6 P4 V
             sdd=0;% a4 Z+ I$ H, N5 [3 |) y; @
             if(st==0)
( z5 g) Y; ^1 |; M" ~3 g: P5 m             {
" \8 o& ?/ E8 p5 l! [               st=1;
: u9 M. m6 {5 x0 {                 }
) d. `. G0 V" G( `                 else st=0;7 j0 C6 ~3 f7 b) {, x5 ^7 J
          }
8 L0 {' K) i* {# P' Z( n8 ]# I        }7 y+ b. f4 A  t7 H  I4 M
    if (tmr1s >= 200)  //1s 数据更新频率
" ~/ B5 z# S6 v3 L# V1 L) T3 B    {  ?% V" x+ d* `" T: \) @
        tmr1s = 0;
# ^1 W* `# A. P, o2 F        flag1s = 1;
1 w1 @. w  |, }! V* Z        }
$ n  X9 i* C) I. t- w: }* n9 ?3 w8 X3 U  G

- Y- i2 @; V, h2 z7 j" \   
  |  J; K$ U2 m, ]3 O- L7 Q}+ r9 Q* s* |! u3 m1 W
; j( \' {; ^9 `( K. d0 }9 T$ w

- G: k7 a% Q( b% U& Z下载:* D) _, Z2 U( K- f
游客,如果您要查看本帖隐藏内容请回复

/ A( G$ B  m0 z9 V% B4 l4 b# U( R/ o
: D1 w8 P+ W' w4 o7 ]

该用户从未签到

推荐
发表于 2020-6-28 22:55 | 只看该作者
&#129310;&#129310;&#129310;&#129310;& E* ^5 f' w" P" A& D6 A+ y

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

“来自电巢APP”

该用户从未签到

8#
发表于 2020-3-7 11:55 | 只看该作者
谢谢楼主分享6 r. F( ]2 ?$ |9 ~

该用户从未签到

9#
发表于 2020-4-20 22:21 | 只看该作者
11111111111, R' C( A1 Z) h4 D9 l2 \% r5 h

该用户从未签到

10#
发表于 2020-5-8 14:47 | 只看该作者
收藏了啦啦啦啦啦
5 U5 }7 _- e4 ~$ {" F- M
# d+ y/ U5 o# t7 {) @

该用户从未签到

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-11-4 08:06 , Processed in 0.187500 second(s), 28 queries , Gzip On.

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

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

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