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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的dht11温湿度数码管显示proteus仿真与程序源码) N. D) x! v+ `: R

( k) ^6 x! d4 [) o6 I1 E1 }
! p1 `8 [2 a9 ~
仿真原理图如下0 ]4 r; P1 u( W# z

: h/ U8 e! L" V1 s% Y% g8 l8 r  F) _( V
按button1可以切换模式3 ~& h9 b) \' m3 C' B' m! q
模式0 只显示温度
; r6 c6 f- L1 H' q% B6 z+ `: S* A模式1 只显示湿度
5 U: k7 r- A% V1 s模式2 动态显示温度和湿度,每5s切换一次8 L/ V3 j# B0 B: o
6 j& I) d. v: ]0 L) Q: n0 n

' I* W; e  u& C! z+ u实物如下
, p4 z  r) t3 H. Y/ c/ c温度显示
9 O! R# ]% @& t ( t9 [9 n2 O# o% q( H% A
湿度显示  小数
* `! I9 V9 t$ N7 L, s ; a% G5 j% ?2 z) C

$ R9 `) |) c/ I+ R; x8 f- E) G
; R" ^% Q+ a9 a1 C模式选择,自动显示切换湿度和温度,只显示温度,只显示湿度。. |' v- b6 N5 d* \3 D& i
2 m9 U  Y2 q" E
单片机源程序如下:
" o  ~: w  I" U1 R/ ]# a/ V) d8 r
#include<reg51.h>0 X3 c$ m2 t, y
' G- {' V/ h7 a% u0 w% o0 Q
. B( F) ]+ K' N& x
bit DHT_Start();
- u: @6 X0 [& qbit DHT_ByteRead(unsigned char *dat);
' p4 y9 Z7 j( g- A5 k7 pvoid ConfigTimer0(unsigned int ms);: d0 f' z( K1 D6 J
void Display_hum(unsigned char *num);
+ y% w) \" J: E: k) T2 fvoid Display_temp(unsigned char *num);
+ @: ^% ]" |1 Q9 d; u
+ z* |( A- E3 k, u
! D" j1 i" u4 D

+ E$ U. k) \* A' p/ o  d  I, k: F
; k1 ?1 T% ^! y7 g+ B) z" c& d' T+ F
unsigned char T0RH = 0;  //T0重载值的高字节% F! j+ ]4 G# B# n  e
unsigned char T0RL = 0;  //T0重载值的低字节 # H; J) D  }; K* [% _% e0 u% o  ~
unsigned char str=88;8 {/ Q5 R+ c  F- Z+ G- Y4 y; r% T
unsigned char DHT[5];
$ Q) f- j4 I& C( ]. @1 \3 P, R5 C* u. r( U  [

( A! [7 _  H# Q' `0 c9 [unsigned int tmr1s = 0;8 N" `6 ]3 \' n( q2 u' W3 _
unsigned int tmr10ms = 0;+ `! H% Y. l, r; H' J. f; J
unsigned char st=0;$ O9 e8 ~# H2 q2 Q+ c
unsigned int sdd=0;
( y6 |1 J4 A. Cunsigned char td=0;
; B) @) n8 ]& F) E, b8 munsigned char mode=0;
' X; I" {9 E2 u7 G% K
9 O. g$ {& ?) p/ U2 M$ X
$ @' M  o- j4 h) Q9 i; f
bit flag1s = 0;
$ P+ ]. m9 z: N8 E! p) n3 B, Ebit flag10ms = 0; 8 l4 T  w6 N+ u2 X! \' `' S
int x;  U+ g/ t6 Z) ]3 G2 U' e8 G
             - N5 s# k3 t( u
sbit button1=P0^0;
. d2 c( L( y, ?2 H2 n+ nsbit dot=P1^3;   //数码管小数点
# Q7 @. z- G( S) }- Z; ]+ n1 _5 |# \3 S' }( [! f3 R
# \; {4 H$ w/ Q; D) t

) l, ]3 i6 h$ G* @" T7 A3 N; W8 U

* H0 z" m( J" \1 P# P6 r4 j8 |void delay(unsigned char x)   //延时ms9 M7 J1 X. Q; o/ z
{
* |; z  A# M6 g    unsigned char a,b,c;! b* T# V  w" ~
        for(c=x;c>0;c--)8 F% t: e4 R5 c: l
    {
7 _2 v( F6 [5 M* T4 C# d! Z                for(b=102;b>0;b--); C& v, d' ]1 W  v' E- Q
        for(a=3;a>0;a--);
* I1 B5 A: |8 \/ t        }; b6 z3 n$ [8 k/ J  Z
}8 l2 w8 S: I2 B0 W, p% n
void main()         
) ~8 _$ n: {% W0 V- a* m$ b" ^3 Y{                 
8 \% x! X" J- w$ ]8 T3 S' E7 K: e
3 {( M1 ^6 U0 n0 N

5 e, ^9 y3 F+ m+ [2 A6 ?( d    bit tmp;2 _9 b7 t6 C% K- }. r, G( c
        dot=0;* {. I8 Q# v9 B2 P0 c1 e/ Z  d  T
    EA = 1;            //开总中断
2 _5 b2 ]/ `9 m/ h    ConfigTimer0(10);  //T0定时10ms6 r( _& U" W$ l( K) l. Q0 \  A
//        M1=0; M1=0;M2=0;M3=0;D1=0;D2=0;
: Z% T9 R2 l6 o9 E8 ~$ O* e    DHT_Start();
$ A1 y# G5 b& r5 c9 Q, a* B    delay(5);
' B. s( |  x" B- f, y6 E! j+ a1 p( W  I* C0 z4 p

, N: x* F6 T6 V' ^7 W6 L! b3 o4 S; y    while (1)# a! X4 X+ K- U5 @# d9 F: ]: ^2 K" Q
    {/ Q( D* s0 a1 L8 L3 J

! `" ?- r& z7 I% B% K
" N% B% z+ n1 O

2 h9 G- |+ `* F4 m: d; ?
# V! [2 J- T( K5 Q3 R, I' t# R
        if(flag10ms)  //数码管刷新频率+ l) I3 L/ A/ Z! h" \3 R
                {
; X+ _2 j! P- V; U3 p& H                   if(st==0){: g0 p7 s* D8 p% r
                                Display_temp(&str);
4 Y) ]& n; R3 y  B4 B                                flag10ms=0;& Z8 T' }( S; Z; R# ~
                        }
+ e( j8 c( g' g1 R2 m                   else if(st==1)
3 `- T- a7 g! i                   {
5 s# J1 p% A# h) k6 o( r! J. g                      Display_hum(&str);$ S1 n+ l. O! s: e& i/ o
                          flag10ms=0;/ @7 C. t# o0 ]' B
                        }+ p7 y, }' z: `6 O! r

  Y* f. O' |3 e, ~' i) O

( S. b4 R2 z. ]+ ]# h                   - q+ P+ E: V" F
                   3 |  p' Y0 j9 k3 U9 I/ f+ U+ {
                }
! X, s8 i' F* s; V, {# [: N0 x6 x* l                else if (flag1s)  //每秒更新一次温度、湿度6 Q7 J" T8 ?* z/ b8 U
        {2 x, n& V3 H$ }+ y
                DHT_Start();) i2 W0 G* `6 `. D* i" O7 r
                   tmp=DHT_ByteRead(&DHT);9 u: ^5 C9 [8 |& g) Z$ R
                   if(tmp==1)( M. a* Y: ]. p( t4 |+ U0 k
                   {
: B! g5 x! h! r/ ^7 c* }
7 K+ H4 L7 r! R2 D

, {7 u# {/ W: {1 ?9 w. W1 d                          if(st==0)4 |/ e. j1 \( \! v, f, R& ?$ U1 }
                          {) }2 |* q, g6 _( x3 p
                             str = DHT[2] ;             //温度
& D6 Q( F% V* ]$ v6 S  @$ ^                                Display_temp(&str);                     
* O4 i, p# j0 g& d5 t' b3 b. P" {0 L                            flag1s =0;         //标志位清零
+ {, i2 c& I* _8 H* u" M$ h, {1 t                          }6 h0 ?+ r/ o+ K6 G  H5 p
                          else if(st==1){
* N* ]( `* A: R8 E9 a2 ^2 F, w0 e- c3 [8 |! B0 t- _5 D

' v0 T( n8 u: z4 i                          str = DHT[0] ;  //湿度
2 U3 v% P% m+ j+ o4 D                  Display_hum(&str);
  b6 q" Z) ~# E' f9 Y                                  flag1s =0;         //标志位清零" S" i7 x. I( Q: {
                          }  I1 Z( K2 U) b' k' d6 j

( E5 n' |7 v- }7 X6 p% U

+ ^  u' v) _: R+ z  P# m( p                          
, H1 a! p8 N$ d1 n2 h! Q+ b
! v7 g) T: y3 x& g

& h4 I7 Q# P. |+ ]  [) f                   }( i" Y, Z; M2 }+ S2 r6 z
        }2 b4 B1 Q1 d# v' U
                if(button1==0)" E: O& h* q" a7 c# t+ Z
                {% q$ j1 @7 \& m1 f- G5 t' f4 y
                   delay(2);
5 Y2 I" s5 \  h8 P4 B: ]! e. L, ^                   % g# ?: J% c0 X
                   if(button1==0)
/ x0 }! ^4 V4 I2 K                   {! C" ^! ]0 C6 T5 }& M
                      - _" l' q4 l+ i
                                mode++;
" P4 ?- X& e5 m; `* e# Z                                switch(mode)
, m) h6 h7 y1 a# {" R  T2 q                                {
" e% ?* o8 ~& T* J0 j9 }! z7 k                                  case 0:  st=0;      break;0 m4 b& q% R$ e7 g
                                  case 1:  st=1;      break;% M5 s1 {$ j: k" h* u1 Q5 \! W3 O
                                  case 2:  td=1;      break;
0 ?- b) t: v1 q3 _                                  default:     break;" R! _' W8 p+ S' J  {
                                }
8 u+ k  G! x. a( W( h/ e                                if(mode>=3)& S) f* }$ }; j- I8 L& L) n# }
                                {9 d8 O9 p+ A" W1 x
                                  td=0;9 q  q6 D1 E( S+ i7 ]2 c
                                  mode=0;; k2 e  V% N+ `/ L) ~
                                }; N2 c7 c& o7 ~4 D
                                while(button1==0)
: F, a; T8 e$ a( k0 V; D7 A                                {
2 W. Z: s9 q+ P0 A                                }
2 ~0 {8 F; }7 A4 F0 v
7 {1 R" W& v! _' Z' C
1 B* A* ^( @- L2 J1 `9 e- {
$ Z1 B0 v! m8 U' R1 }2 E
" j" S$ Y6 p* V
                   }
8 Z3 o8 Q% ]1 A1 f' G: o4 r% T/ F9 a3 G6 y1 |

) T4 o4 k, f" O: ~                }+ n1 j# W& `/ o4 _. B4 p6 ]# X. Z

0 n" T- B. x, e  L
7 O5 X% b2 d6 J% b& _( p0 X
0 `" B" V5 ]/ n$ J% x! Z* t+ ^0 k

; I& v2 D1 Z! \! {) |6 o! d
$ O) I) _- \7 S, V. [8 P  w

+ h9 c$ |! o( H. V+ U7 i3 v         }; k+ x) @, I) {5 h' \6 i  x! t4 T
}/ N- L9 t4 R' n- P+ k3 f2 C

* }# Y' J* s3 o8 L. H! |" q

7 E9 u, k& d! T6 u9 ^3 H" P9 ?! R3 Z# Q% Y! Q. }% H2 n$ ~
& N0 h$ l2 ^' J/ G' M8 A
/* 配置并启动T0,ms-T0定时时间 */
1 N6 l' j5 z7 U! D$ {* Ovoid ConfigTimer0(unsigned int ms)+ o9 V8 n  v5 }
{
3 Y/ p9 Q; h2 _: P" i    unsigned long tmp;  //临时变量4 Z6 }6 p7 d  O
   
8 F( {& r/ p- n  o    tmp = 11059200 / 12;      //定时器计数频率
) L/ n& t" F7 O+ u    tmp = (tmp * ms) / 1000;  //计算所需的计数值" q+ C8 q' T5 M( P8 `9 G, R/ {
    tmp = 65536 - tmp;        //计算定时器重载值' i3 o2 l" B5 n8 d6 b# f  f9 U2 G
    tmp = tmp + 12;           //补偿中断响应延时造成的误差+ T! e3 A- l2 N
    T0RH = (unsigned char)(tmp>>8);  //定时器重载值拆分为高低字节0 d: P0 Y8 y: I6 c
    T0RL = (unsigned char)tmp;( o$ [$ \/ T/ e
    TMOD &= 0xF0;   //清零T0的控制位5 [: O: S$ G4 R6 Y- a6 y5 @
    TMOD |= 0x01;   //配置T0为模式15 l& V, m3 f8 k
    TH0 = T0RH;     //加载T0重载值
" ~( B/ A9 }0 Y6 I    TL0 = T0RL;
5 j: p: {# Z4 y" P    ET0 = 1;        //使能T0中断1 l, D9 d6 C4 K( e4 Y0 d
    TR0 = 1;        //启动T0  o' n: l# o3 j& z6 {
}
$ }4 t9 u; O8 r. X: x' O4 j( Z) X/* T0中断服务函数,完成1秒定时 */, G" T% f7 O5 H! ?: ~1 G9 Q
void InterruptTimer0() interrupt 1
% h7 w0 o) k: I8 k; ^% t6 m{
/ _) O; }5 {# R) J# |- o: W- Y4 ]% L) C: N+ a

8 o% ~3 ^! W% o" O  t' F  x    TH0 = T0RH;  //重新加载重载值
$ J+ @5 W" d! [! ~    TL0 = T0RL;
7 m6 ~- W( v! ^  [    tmr1s++;/ X1 I4 C* M3 ]/ F7 \- F
        sdd++;
5 V9 p. k# M/ q5 m8 s        tmr10ms++;
& ]/ ~& m- R6 F. I! c8 D6 A: R1 H
9 }9 k: G9 `! v# d
8 W" w) R2 W3 V, s9 K# j3 R
        if(tmr10ms>=1)           //  数码管刷新频率
" ]& k$ V8 v% x5 s( ?& T3 C  W        {6 ?7 z9 {6 r1 ^7 ]
                  tmr10ms=0;/ A  l( x" V- j( E. D# D7 @
                flag10ms = 1;) E! N$ B# Z& g! K1 ~, G! c6 \
        }' b& e$ U) }( ]" y( l; `$ U. Z4 `
        if(td==1)* Y5 x7 B- n' d
        {
" N3 S$ s" T5 [$ z5 X% N, c          if(sdd>=500)           //温度显示5s        、湿度显示5s
7 f- R" A  |% g" [          {
3 ~. h; [' {0 z( u3 B. S3 H5 g; W' T/ E             sdd=0;
$ I9 f( t# a! \8 s             if(st==0)+ ]/ A" }- C; V7 M
             {7 L5 M8 L% j6 {% Z* M) d
               st=1;
& }- k+ `6 S* M5 v# R                 }9 G8 J: j# ?+ B' s: @) U6 `- N
                 else st=0;
& O! i' C% A$ U: h3 J" b          }
' h) e0 W0 F. ^  J  s        }+ \  N6 l. X  S9 J/ w4 Y5 ]# n) D
    if (tmr1s >= 200)  //1s 数据更新频率2 u4 s6 }( m  s/ [( Y
    {
* T1 \: U1 a/ T4 X        tmr1s = 0;4 I9 Y; U$ B; [9 v, @
        flag1s = 1;
3 {& A9 N5 F4 P        }
8 ]. G4 r3 |( ?, n$ _% [* A
9 x' F  _  X  p3 \& h4 z
0 R0 G0 Q& W% u" k
   
( i* l) h( u( Q& L/ j" D}& o# q! L7 I. Q6 [
1 x( o3 T& C5 i4 C3 j

& ]8 V; L3 ?" \下载:
1 v& L: P6 D$ z' l6 g- I
游客,如果您要查看本帖隐藏内容请回复

! e! o$ N1 E3 m! L( L. a$ y( t
/ R4 S  b" @2 y2 @' W5 J0 b2 e

该用户从未签到

推荐
发表于 2020-6-28 22:55 | 只看该作者
&#129310;&#129310;&#129310;&#129310;
) @9 A! ]7 }2 g; V- n

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

“来自电巢APP”

该用户从未签到

11#
发表于 2020-3-7 11:55 | 只看该作者
谢谢楼主分享
: }  c9 t6 R0 y( ~" d9 g

该用户从未签到

12#
发表于 2020-4-20 22:21 | 只看该作者
111111111112 N8 K- F/ p# c1 u  P5 J

该用户从未签到

13#
发表于 2020-5-8 14:47 | 只看该作者
收藏了啦啦啦啦啦% k2 K7 j* ^/ ]6 N, v$ l; {

) Z5 V# E$ {( y1 ^( f! p7 M; ^! }5 o

该用户从未签到

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-10 14:55 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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