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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的dht11温湿度数码管显示proteus仿真与程序源码$ `/ V3 X6 |' c& o  [: z0 Y
- N0 j# O3 h0 d; K* K( Q2 c

, K& m& `- ^2 G% C+ z仿真原理图如下
: }6 Y- ^+ y$ T- Q0 j- [7 v& s ( |: w, v# v0 m! x2 K
! u) n7 S) K0 z  Z3 [3 _4 G2 o
按button1可以切换模式/ R# Y, b) e2 z! o/ H& `0 x7 v
模式0 只显示温度' B* l* }! A4 t+ j. b
模式1 只显示湿度, L' v2 `4 x& ~; a% s7 K( I
模式2 动态显示温度和湿度,每5s切换一次# Q9 T, }# a4 u, t, H" G% |7 a0 W

: K( j( @2 S" [2 ]
2 u8 O$ I1 E& X5 o! ]# o0 k
实物如下
! D: @* v# o0 `9 q, \: O温度显示. V6 ^( Q, u% d! q, H! Q
+ O/ l9 C7 k6 _" |
湿度显示  小数
0 y( j3 L6 R8 S  z% t& n" S  m
$ m/ W4 l2 f. q2 B8 M' ^$ E5 |+ v( _. F% l

6 q8 @7 v2 m" p3 @! H. D  F) j模式选择,自动显示切换湿度和温度,只显示温度,只显示湿度。
" n9 S3 D+ C$ V
8 j2 o! u7 P2 n8 O$ G7 ^! y4 @单片机源程序如下:
$ ^. Q* R/ m( \2 ]) r& ~# w
#include<reg51.h># s# I' h" C$ F: p' Q

. J# R0 ^, \7 |7 z6 n; ^. P4 S

6 p! I" Z# p: W9 J/ V$ f# e! A) O3 Jbit DHT_Start();
7 r- z" i: f' r0 ^bit DHT_ByteRead(unsigned char *dat);
+ p0 {( g7 x7 M; Y) ?) @/ |0 X- Pvoid ConfigTimer0(unsigned int ms);4 x( a5 Z* r0 y/ W$ A( q
void Display_hum(unsigned char *num);3 Q/ }5 w: s  L7 Q
void Display_temp(unsigned char *num);0 B2 v$ e) D' ?6 t7 d+ q
+ ~/ D" M5 _" Z7 k8 u! A
  K3 Z! V, W4 }/ a# b2 N

$ d1 n/ e3 p2 W5 k  p# N1 _
3 r+ ]% b$ m% Q' d9 F9 Y9 _  V
unsigned char T0RH = 0;  //T0重载值的高字节/ q" `1 [3 ]" h6 j
unsigned char T0RL = 0;  //T0重载值的低字节
: v; Y- }3 u$ @5 s2 p. `unsigned char str=88;
5 S8 ^( ^9 ]! D+ v8 i; j4 f& Munsigned char DHT[5];
0 Y$ K# V! A7 Y% |) k2 X8 l" G& ^  T: G/ E

" Q$ R) O3 e4 eunsigned int tmr1s = 0;9 ?' I7 g( Q5 T- k, m4 D
unsigned int tmr10ms = 0;
: O' b  c% a, }( Q" Dunsigned char st=0;
8 z! M9 p5 }( c  o3 ~unsigned int sdd=0;4 U+ f# B7 _/ G( B" O9 O+ `
unsigned char td=0;, ^7 C7 h  P3 v+ |2 _
unsigned char mode=0;
4 y( Q, }$ w+ I4 j* D+ m
, ^  \% k% ^! D; d7 m5 C2 H
: E. S* Z: B  p. ~( ?& V
bit flag1s = 0;: G1 O& [3 b4 z) Y8 u( j
bit flag10ms = 0; # r2 ]# f, W+ g. \
int x;6 `5 K' b. d' B4 ?# L, Y
             4 X8 |8 g+ Z; @2 f, j
sbit button1=P0^0;" H/ `8 U3 C% A3 A* c
sbit dot=P1^3;   //数码管小数点3 ^* B( V/ G7 }- F
( S- P9 r, N2 [1 V$ V) L

: P/ ~/ I. w2 i. C2 K$ M
' B% [2 G1 m$ H, ?% Q- ]

1 \0 i7 U/ O. r6 A' e8 O7 jvoid delay(unsigned char x)   //延时ms0 j9 U2 m- h8 c$ T
{. Y- V# v7 c) E2 g! Q4 w5 l4 ~
    unsigned char a,b,c;$ l. r1 |. {% P* I; A/ ]; {0 g
        for(c=x;c>0;c--)$ b) t& P1 n0 y# `) d4 R
    {
" C8 P* N9 ?8 Y" y3 c9 J, g                for(b=102;b>0;b--)7 H! l2 j  K4 S
        for(a=3;a>0;a--);
5 w7 I1 }3 B( k/ j% z, ?6 ^9 J8 N        }
# R! x5 G) @, _' N}/ n) f% _* I6 S+ _! k5 R' A
void main()         
4 h6 M9 H3 Q* y' E# ^, e& Q{                 
+ |3 C+ u1 W# L6 A" O" I- g" Q
4 a0 `0 j' B1 d2 F3 Y1 o
' ]# V+ O$ _& Y4 m! Y
    bit tmp;( j$ l# T+ A' a& }9 h4 b* J
        dot=0;( T  K3 S6 E6 ~8 a% w
    EA = 1;            //开总中断
( ^% }* a9 I) M1 r& s9 h2 o    ConfigTimer0(10);  //T0定时10ms4 x( _) o: i6 V; h
//        M1=0; M1=0;M2=0;M3=0;D1=0;D2=0;7 O+ j, S: |. H: `+ |3 d
    DHT_Start();
- U7 v5 [0 v' `: @    delay(5);8 y$ {) k2 n: T% i5 \+ V! E
' w$ D5 M* i, O8 P. z& _. `
6 B- B0 @3 |' h3 L: l4 w
    while (1). \. J8 Q, ]8 f
    {
+ S  n3 w& h$ y8 Y0 o  R, Q
* f5 z# c) U# g7 K. U

. H$ w$ D& p& O0 L' a  J1 x' x
+ J* W# Q8 C! d0 }

2 K% q4 S# F! A* J" j; ]  f: O) ~        if(flag10ms)  //数码管刷新频率
' k, B/ ~+ H5 Q$ m7 r4 v  K                {1 u4 o7 B+ u' X- \/ x
                   if(st==0){: k$ F! K' g: O8 l) c
                                Display_temp(&str);5 a0 @5 _, X' O8 Y6 `, d
                                flag10ms=0;) |  r, ~  U1 e; Z! q
                        }' \. O' M+ G1 P  l
                   else if(st==1)
, W; m, w1 w& ?1 T                   {) R% L' ~) `, w2 L' B
                      Display_hum(&str);
+ ?$ t2 _9 f& |0 d( M! s3 ?                          flag10ms=0;3 q+ u2 N: `( u# L6 Q, A# n5 a
                        }
$ p0 h' u! \& H
( W# \9 R" u6 i& c. }. t% X, B% P
- V8 }8 F/ F) e  z3 |/ D8 i' @1 E
                   % B6 H4 E  [9 D% Q' |" k% c
                   ! U7 R2 \2 O) y. @- [* u# \
                }- p% r  w2 N9 j5 q
                else if (flag1s)  //每秒更新一次温度、湿度
" K. P* t, {0 n; s) B. B        {6 N/ l' ~9 c" F6 Q1 n4 n: T4 |
                DHT_Start();
3 h2 }! h3 B5 e+ i$ n" q1 I                   tmp=DHT_ByteRead(&DHT);
# e6 w& i2 [" L; |* h4 g7 C                   if(tmp==1)$ d- {& m2 m& Q; M" o- T
                   {+ z1 V* v$ K  ]  k; r8 X
9 A$ W+ j+ }/ ]: K6 ]
1 ?. o/ N- [. D5 u8 t
                          if(st==0)
, O0 _# l5 v! v                          {- i. s3 t3 e; A- X6 r
                             str = DHT[2] ;             //温度
7 c, v( ]8 I# v; a                                Display_temp(&str);                     ' |5 p* J) H9 P; @( }$ W
                            flag1s =0;         //标志位清零
& [) |0 y5 r+ P. ?$ H                          }
5 ~3 R+ p& J8 g2 r, B                          else if(st==1){
- [! l% j& l  [2 z, W5 l4 u  U5 T+ e7 `% o: Y; j1 O- {' V" h8 G

. D9 E% Q  g2 i9 D2 d8 V6 c                          str = DHT[0] ;  //湿度
' H8 m  r, d# E                  Display_hum(&str);
( x% X# O3 l% F! O+ ^* Q" d                                  flag1s =0;         //标志位清零
- L  u( L% H5 f0 a                          }( ^8 e- B1 o& t# s3 A

6 R* L: f' [) H, F- |6 O% z

9 {( S9 j7 I! {0 o  R2 B                          
4 c+ B- W* T4 a6 @" y9 v& E1 ^" u- z+ u. f$ ?" q1 h( F
2 c& |* ^, b; n  l0 _$ e3 G
                   }
" u3 A3 Y6 R0 G8 b        }
' ~- ^8 Q6 P3 A                if(button1==0)" P+ q  Y8 T8 m* Z
                {) ^; @) s( J' @+ S! F
                   delay(2);
; r, O5 G+ ]$ Y                  
9 R1 h8 L$ F4 F; w                   if(button1==0)
$ ]% @2 e1 c, X  V                   {* [0 x: A  h0 o( s6 Q
                     
# ~5 ~% }' ~: Q* p# J* Z                                mode++;- c5 V3 S9 n: J/ H7 \% p! C
                                switch(mode)+ i  R$ C! N. B3 ]% y" B
                                {4 |! b, \$ B# O/ h6 y! y0 p9 R
                                  case 0:  st=0;      break;1 a) @; `; ], j5 ]
                                  case 1:  st=1;      break;
9 `+ j4 h- g3 V) }! M                                  case 2:  td=1;      break;
: U* w* N4 @" I. K) g: a                                  default:     break;
- v: R% }. }" e                                }
" y0 X% e9 c. ~4 \: L  I9 P$ X8 \                                if(mode>=3)6 F: Z7 Z2 c4 q" ~
                                {9 n8 T! A/ l& R" Z9 Z( Q, l
                                  td=0;
! _1 p! B0 ]4 N5 Q: R& s+ x                                  mode=0;
. F% i/ ^- }/ V' ?% ^2 X. n                                }+ O; B0 i1 _% f( E
                                while(button1==0)! }1 @" R- R; U/ m
                                {
3 L$ D- r) _5 S- P+ m4 G# ~+ \                                }
0 n. ^1 R3 _& H9 |. d
  F6 _. ^. j' x1 I% L

# W3 Q/ }5 t& b3 d  [3 a, y  R0 _# ~2 t) c
, y( `, k' o( O0 A# d
                   }. ~, D' W. B5 T8 ], X( q' U
5 z, E5 y0 c8 v* c! f2 n
0 i1 z" ], [- f
                }6 N  |* e4 S8 {2 m2 p: ]7 e

* \' Z2 B6 a: Y7 {! [" |$ [0 E

0 H" @* M  D" b% y
5 S+ T" @2 ]. y" ~' ?# q7 M

6 G5 [% m1 X8 w8 e8 v2 f2 [# @3 t6 o! X, Y: B

7 C. b1 Y! A2 t' X5 d8 I         }$ Y% I2 G+ L% W3 y
}$ l! \5 p, S6 h; R
! ^5 H7 o2 i/ S7 b* H7 G0 n

3 _% h3 C8 u6 Z2 T. S
& Z- W3 T" g% y9 K) a) ~% q8 z( C

6 W  g0 e% w+ X3 x1 T- [/* 配置并启动T0,ms-T0定时时间 */
: z% [: K/ D( u# Nvoid ConfigTimer0(unsigned int ms)
+ g) @( j! r4 v/ \2 ]2 H+ M. y! `" O' Z{7 Y, A. c+ h8 Q$ Q* B! m
    unsigned long tmp;  //临时变量
' L# t0 W1 w: q. t    8 J/ z+ x* Z% V, m. R/ s9 U* ~
    tmp = 11059200 / 12;      //定时器计数频率0 a6 [! S6 ?% M  _" m
    tmp = (tmp * ms) / 1000;  //计算所需的计数值
4 b* M- A5 U+ x# L  i    tmp = 65536 - tmp;        //计算定时器重载值
2 P4 g# Q- y* D* h    tmp = tmp + 12;           //补偿中断响应延时造成的误差( @/ @- Y6 L1 X% K
    T0RH = (unsigned char)(tmp>>8);  //定时器重载值拆分为高低字节
' h( }* m) D! ?3 U9 i$ e    T0RL = (unsigned char)tmp;
# d/ z9 j: @1 Y- a" V    TMOD &= 0xF0;   //清零T0的控制位+ g& ]7 X0 ^& ~- U
    TMOD |= 0x01;   //配置T0为模式1/ T, Y6 U: e5 X/ o1 {: @
    TH0 = T0RH;     //加载T0重载值
8 ^& u% B/ d) }& K" G7 y. I* b    TL0 = T0RL;
. X' d: t; L+ T- j) z    ET0 = 1;        //使能T0中断
! I6 z7 L4 {: s4 `) |2 L+ S    TR0 = 1;        //启动T0
9 |7 j5 s! Q4 t6 K}
) O6 [% V" C8 ?7 b/* T0中断服务函数,完成1秒定时 */
) W  H; E7 a1 {5 v( r, U/ tvoid InterruptTimer0() interrupt 13 z, b: y+ a" v& v# a" u
{
+ @/ r* i- w- }$ ]: R3 y
  Z9 G8 ~% b& M2 }
5 S, U( x9 n- w# I1 l% Y) ]
    TH0 = T0RH;  //重新加载重载值4 Z$ p4 |2 |/ G) W/ M
    TL0 = T0RL;
$ h$ v4 M# o+ N8 A$ r) `    tmr1s++;
8 {3 ?5 r" Q8 I0 s        sdd++;
* V$ e, [, n% h: z$ W& ^: b        tmr10ms++;% n  ~% ]- M6 O% e

3 [! _3 q; q; \+ G* W) N* {. Z1 B

6 D5 f, x# D1 }$ H1 B4 w! f" m. L0 Q        if(tmr10ms>=1)           //  数码管刷新频率) s$ V) x  ?# n
        {
* x# z! ]0 |  n& O" E                  tmr10ms=0;/ k& `3 W$ H- @9 y% k5 i
                flag10ms = 1;
. o+ n3 w1 n" l- T        }8 Q3 \; V- Q. p4 B- x% Z% g
        if(td==1)
. M9 R* B% Z, \& e1 L        {. F4 t6 z9 R8 c! N, b# c
          if(sdd>=500)           //温度显示5s        、湿度显示5s" o! s7 v4 T1 Q3 L) f/ o
          {* Q, x) E* t9 ?4 V* B! ]) h
             sdd=0;
# B' U* ]. Z3 W, p             if(st==0)
! W" K/ s5 X/ I             {
. c3 E* i( P' K% z% p$ _               st=1;
  G0 o) w, n' U                 }
& h* F+ R7 `; |& x! E                 else st=0;
5 P, {* g7 k$ G: y' E) H8 g: |7 F          }% ~; ]  I/ l- r
        }
9 C: C1 s. s+ [8 H0 i    if (tmr1s >= 200)  //1s 数据更新频率0 q* T" [3 ~9 q, V, L1 J# T, }
    {+ ^0 G) L7 J! D+ _+ r2 _9 s' W
        tmr1s = 0;$ {7 e; W3 x4 G# S, D
        flag1s = 1;- F. H  H& o5 [* V- N, P
        }
" T3 ~+ \8 X9 x% S& B3 z- g7 K" e: w8 ]

) C& @- S1 {7 T  |7 N    . C$ o, N$ p0 |
}: F/ @, c7 R: O
% `, G2 z# V' G7 U

, _: P' e% x. M3 t& a; p下载:4 `( n) h' p% `4 O, C' }- K1 A
游客,如果您要查看本帖隐藏内容请回复

8 ?$ S7 x; _  }4 K& {
* E, M  s! g# _

该用户从未签到

推荐
发表于 2020-6-28 22:55 | 只看该作者
&#129310;&#129310;&#129310;&#129310;
* Z  X8 j$ X% Q! Y4 D

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

“来自电巢APP”

该用户从未签到

11#
发表于 2020-3-7 11:55 | 只看该作者
谢谢楼主分享: N3 L8 g8 q9 V- q: q5 Y1 d0 ^

该用户从未签到

12#
发表于 2020-4-20 22:21 | 只看该作者
111111111114 W6 K: }2 P2 D$ u8 f8 R4 M

该用户从未签到

13#
发表于 2020-5-8 14:47 | 只看该作者
收藏了啦啦啦啦啦
& S* n7 o1 Q9 P% R% `# ]2 q2 H
: Z7 Z  k: d% }. y; H$ 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-13 09:43 , Processed in 0.156250 second(s), 27 queries , Gzip On.

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

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

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