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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的dht11温湿度数码管显示proteus仿真与程序源码! T1 q" @) b9 H% O( A0 g
+ ]4 V- u1 @# h. I% d

" D: j; p  {1 q1 f' |: V仿真原理图如下' w) W" v, O' D3 \7 J0 Y
' N/ f( S4 Z& h0 y" T% M

! X% I0 Y1 l7 H2 t- v按button1可以切换模式
+ D8 u" p7 @  `# A8 l模式0 只显示温度
4 o' l1 w- h- Q6 B* E" v模式1 只显示湿度& R" N. g& X# p0 Z4 L  N! H
模式2 动态显示温度和湿度,每5s切换一次2 T7 d) X" `& O2 ?, ?+ y2 h' `
1 H" w+ g6 T' L7 O  Q

5 I: P* y5 G6 L7 q% S# x实物如下
% ]3 a; R) n! y' ]* J' r温度显示& f: y6 X; y) Y& B. l7 E

+ n3 l2 Z6 ?7 b6 ^4 V湿度显示  小数
  K7 {: u- A! C$ N# ]" X9 T
; A: e* G  P2 e6 V) _. s: ~* _- z* i

& F8 d, N$ L7 {模式选择,自动显示切换湿度和温度,只显示温度,只显示湿度。  h8 C! P# X9 [/ V: E, R

, {7 O. ~/ }  M单片机源程序如下:
  f  A$ p( h3 ~2 ?
#include<reg51.h>
! o# _( U. w; _3 _$ x6 L
6 i, j3 M- m' A9 F7 v1 p' l6 t- X

% f+ X0 H* B/ m1 p5 v0 Pbit DHT_Start();
# W% y7 n2 G# ~; M$ t' Fbit DHT_ByteRead(unsigned char *dat);6 B$ ?* }9 t9 T  w6 ^  A' _
void ConfigTimer0(unsigned int ms);) s. j8 d0 X, D$ `* C/ g
void Display_hum(unsigned char *num);5 ?2 X; Z9 d8 e7 t* J9 |( z, j6 Q
void Display_temp(unsigned char *num);2 d: W1 F( \/ p; r. I4 O3 J: I
5 F- l& M- F. B: w/ L8 C$ M6 K8 Z

4 f7 {$ e8 g7 P3 O2 [. S& r
7 r' B. X7 y( x/ N( }6 l

. \5 @9 x2 E7 I8 ^2 m6 B/ T) Vunsigned char T0RH = 0;  //T0重载值的高字节
$ A- Z' `* V1 W- Z$ z2 X! funsigned char T0RL = 0;  //T0重载值的低字节 ( n5 X  F3 l7 G+ V( Y6 \8 g2 A
unsigned char str=88;5 ?, E" Q$ s9 F6 d5 ?
unsigned char DHT[5];
/ a3 S3 f. ]: b3 R
' {* d  |, T$ C: l
( l$ T* F4 S- y8 P9 Y6 g4 y( C
unsigned int tmr1s = 0;" V% H. r+ Y& D/ P4 o6 k5 Q
unsigned int tmr10ms = 0;; d4 N8 E& \% P" E" M9 U! A7 `3 Q
unsigned char st=0;
& ^* [' P: `% z. v, C+ B0 Uunsigned int sdd=0;2 [& Y; D9 r4 N
unsigned char td=0;3 _( N+ q( X+ A$ J2 Q
unsigned char mode=0;
' {1 P. }% X, X0 u: w" V1 K  Y8 V9 t. r4 U- z2 P/ C3 `  q  r4 k
7 E' ^, y  N+ l4 ?) j
bit flag1s = 0;
9 W: N! r( l& [, n6 ]6 kbit flag10ms = 0;
5 i- s( j( L) j; Mint x;
- ]% Z) {7 u4 S5 b+ c$ _' C* q             $ k7 U  t5 j, Y" O( V/ d3 l  T
sbit button1=P0^0;9 f: P9 M$ k; k+ T8 A# Y; a
sbit dot=P1^3;   //数码管小数点
; o4 h; b/ t' }6 T
& |' p# K4 A8 B
$ @. ~# r  w  j  u0 D& }  {  W
. N; Q. o" ?7 z2 e
: H! ]- ?7 G, y: v3 J4 P5 r1 m
void delay(unsigned char x)   //延时ms7 y/ y5 Z$ Z: u2 e/ f) |
{
! A5 W) P# r# g3 M    unsigned char a,b,c;# x' K9 V1 l0 G' ~* u
        for(c=x;c>0;c--)' _  z5 P* T: U3 Z6 J
    {8 |. ]" g' L8 j
                for(b=102;b>0;b--)  f& {9 D7 C4 l3 `& w' ]- Z
        for(a=3;a>0;a--);
  h0 Z7 e( K0 {3 ^4 l  d        }' F1 T8 Y0 N+ P0 y0 o
}
8 `: ]# y+ R- g8 E- dvoid main()         
0 @0 m9 Q# y& i2 _7 J- N{                 
7 U. |: y) V6 ?2 \$ f6 I# l; L4 u6 n/ p7 g7 F7 `, \& r
' R/ X& P/ g2 q
    bit tmp;
- A6 ~4 ?* B% c& B; e8 o9 W9 i        dot=0;# h6 f5 B9 e. p/ d$ ^
    EA = 1;            //开总中断, y& d' b' c/ o7 z3 m- r
    ConfigTimer0(10);  //T0定时10ms
! z( d- H2 {/ A5 z//        M1=0; M1=0;M2=0;M3=0;D1=0;D2=0;
6 r2 U' ^" r& |) ], b2 `& l3 s    DHT_Start();8 X  u- T7 f5 _* r1 M, d
    delay(5);
2 Y5 p$ v  n! K  z
" T( v/ ^2 t) ~9 F

! z4 |4 M- g8 n+ }7 s! k    while (1)
: T7 t* S" k( c5 p" N) J+ U    {& k$ m* l2 y: u3 `+ M6 K

) i. @" O- [# U3 L: i% u1 p

( l0 d2 E6 W' ?9 a8 p* N( k1 Q. t. d0 {, h2 L

; l5 z  U2 }! ~        if(flag10ms)  //数码管刷新频率. }8 K  B/ E" Q8 D4 D
                {
- E6 e8 M- b/ \6 M. D7 C$ C+ F$ _                   if(st==0){( P3 S! N5 C; A9 ]9 X6 ?
                                Display_temp(&str);
3 F6 `. s/ i1 v                                flag10ms=0;* P+ a3 A) Y( z3 I( d! N
                        }/ \+ ?! _- ]* o4 e  y6 o3 K% ~# X
                   else if(st==1)
3 e' i3 O2 ^5 W# P! _                   {+ @; k6 L" v+ d
                      Display_hum(&str);
0 h; h* ]# B5 `5 P8 s8 I                          flag10ms=0;: a  W' j6 m/ \8 N5 H
                        }
) J3 V4 t6 J. g/ e3 p$ f' l+ T) E# B3 j1 N# \3 Y1 c9 F1 ?
2 K" ^6 ?) O2 x
                  
6 Y3 n( F: S& c! k0 d4 K                   8 ?6 C$ v6 Z. P& k9 D' L
                }
) ^0 V! d; F4 k; L" w/ Q( Q. C                else if (flag1s)  //每秒更新一次温度、湿度
5 ^4 @+ L' g7 c: g8 m% U        {
% k9 o: o, D! d3 R+ g                DHT_Start();
+ n  y% Y6 ^# `  P4 C& ^. k# N                   tmp=DHT_ByteRead(&DHT);/ a, |+ B/ Z: a  v2 i$ y
                   if(tmp==1)+ o; G& T9 X  W
                   {
) q9 w! D8 l; A" j' C( K4 q
. ~* F. m: x8 _' M$ Q! q4 D

! l& q1 n1 }& _% S                          if(st==0)
% f0 U/ X7 V, j; M                          {
" v) g& _. a# t  I                             str = DHT[2] ;             //温度
* z$ W: V2 s- K2 s: I1 `7 R                                Display_temp(&str);                     
7 F5 F; x- L* Z/ h* _' @7 \% w                            flag1s =0;         //标志位清零
: |" l5 ~( h( e$ {  w' o6 O                          }: {, @: t  K1 }3 ?: }
                          else if(st==1){6 k6 Z8 g! w2 E( H* N

* A. g9 Y: [7 e* ?: h6 E/ ~

- o! I  n1 K- E" H% A                          str = DHT[0] ;  //湿度4 H$ t4 I2 ?' Y7 W2 W2 d
                  Display_hum(&str); $ L  v4 v# L' n3 J! W& f) e% I
                                  flag1s =0;         //标志位清零
; F5 @4 P5 _7 L8 @+ f; w& t                          }- s$ B/ m. a& F; ~8 c/ Q

$ K' d1 U- J- G6 {4 P1 f, K% P, r+ V+ ^

# G) q) g( r) P1 w                          1 F) M7 ?( i+ P0 {4 I+ q

: E# s2 ^6 H, F) p
$ n/ U3 T( I. |7 v5 q% x! U; R2 L7 L
                   }! M. V) C# g+ O, K6 i
        }5 }- t4 d0 D1 [# n4 ^; r
                if(button1==0)2 j. U2 Y: h" F* C2 c% v6 b
                {
( J% q9 g7 ^! u9 r                   delay(2);
& l4 k5 D' P' V! g: Q9 D                  
4 |0 s% i  V2 W/ w* N                   if(button1==0)! u1 o! o% L! V+ D" x
                   {; P+ |" A1 _$ W) M) z+ }7 s. n. o
                     
: V7 C( a5 V/ s7 p; o  [                                mode++;
) n- w' ?9 I* I+ c6 P* S                                switch(mode), h9 ^- C7 o: e/ [' H1 m
                                {9 G: @+ G4 E0 k/ m3 ?! Q
                                  case 0:  st=0;      break;
4 v7 I8 H! ~+ ^8 j6 |; j                                  case 1:  st=1;      break;
& X& b/ u. r$ Y; H; `                                  case 2:  td=1;      break;
# L2 d8 P+ K# M; i/ m9 x7 I) q                                  default:     break;
) l0 T: y/ D3 ^2 U                                }
1 i# A8 c* A3 x- E5 M4 m                                if(mode>=3)
' y6 Q, P* B, W6 r" I                                {' H) ~6 A! e! r* b
                                  td=0;: {/ W; D3 O/ K$ {3 {
                                  mode=0;
) z) a4 y  v5 I                                }
6 s$ h6 [7 R. w( }5 F, v( G                                while(button1==0): o& L# c% c/ U4 R! ?9 h
                                {
2 y3 \. o. N+ y6 b1 S; X" B                                }
* n/ h. P# C1 `: X* n* n$ E, s5 q  v! J0 M! ^  V1 W
/ N8 |/ ]- T/ u9 z. X
7 V/ J1 z2 Q9 _, s4 `  n% [
1 \" `: ~! Q9 ]4 }9 j3 N( N
                   }* x8 N# k/ w5 J: c+ F9 g8 K

+ q( Z& i$ H3 Z2 }7 L- P# }/ c
5 F# H$ z( [0 L
                }
- b0 {% U( ~: [7 P6 F
* s9 A6 u  P8 v( t$ l3 c7 ^  k

% a, E! Z+ z1 K; E) M9 h1 e7 g& T, M, [! N( Q9 r6 h; D
, P" c2 ~5 \0 t4 E3 g' F

6 M* U) `4 Q( X: w+ J: B
* s( ~- ?  F4 |! p4 D$ ]
         }2 {' m7 ~7 z* q0 O* m: g
}
) m1 ~# z8 h5 A9 d" X: H/ G/ B4 i. l+ H) E; {6 |& Z( m
  R" J, H$ L3 Z# \' ~! E& N& ^$ C0 p
0 L& U: Z0 [5 I1 j8 P4 n% r

5 @$ Q% d3 U& ~* Z, o3 o/* 配置并启动T0,ms-T0定时时间 */
4 m3 `- n5 ^, g* c3 r( _5 y0 _void ConfigTimer0(unsigned int ms)! M9 {5 C" Y  H9 [3 F
{5 A: P5 v) K" ?6 F2 u
    unsigned long tmp;  //临时变量
4 V6 \9 u* d* u' k  ?    ) o% Q! C: N6 K) W9 i
    tmp = 11059200 / 12;      //定时器计数频率* |: f& H7 |( P6 \
    tmp = (tmp * ms) / 1000;  //计算所需的计数值
$ j  P5 v1 [" f1 J2 m( b; c- T& e    tmp = 65536 - tmp;        //计算定时器重载值
. q) C9 S, c2 J/ ?# A    tmp = tmp + 12;           //补偿中断响应延时造成的误差9 C' \! d6 k  |0 N
    T0RH = (unsigned char)(tmp>>8);  //定时器重载值拆分为高低字节4 D7 B( c& y$ @4 K9 ?
    T0RL = (unsigned char)tmp;
5 A- |! c9 Z( o: ^, o! v    TMOD &= 0xF0;   //清零T0的控制位: ~5 u8 c) |0 M3 ?7 A
    TMOD |= 0x01;   //配置T0为模式1
! ?& O' S- e- L* U7 X    TH0 = T0RH;     //加载T0重载值
% g' Q8 C! z4 h% r% ]: l- }    TL0 = T0RL;
) T% J' V, x- T. M, Y; l/ ^    ET0 = 1;        //使能T0中断* h* L. f6 N. m. w9 `- V$ b
    TR0 = 1;        //启动T0
5 T5 `% N4 r( K8 y; c}( z7 b% V0 \' O3 T) I; S
/* T0中断服务函数,完成1秒定时 */
( F- b& e- u& p# g( x" evoid InterruptTimer0() interrupt 1( O  O% C3 Y3 {! N, ]5 ?/ O
{: t9 E! I% B! ?* R

) _9 h$ f- r4 a! t, r* f8 @3 O; y) P  C

& C; F% ~+ k; D+ e  T  B7 ^    TH0 = T0RH;  //重新加载重载值5 [5 a$ W$ N/ M+ _
    TL0 = T0RL;$ t4 w& R1 V/ S! g6 {  G# E% k! ~
    tmr1s++;! |  [( e3 ]- I0 A2 B0 T3 J
        sdd++;; y1 A/ ?; J" C) t! r/ B
        tmr10ms++;
5 Q0 [, X7 N5 v; F1 J+ Z5 U; {  D

) k8 p$ Y5 d. ^5 |6 F5 F( ]) l        if(tmr10ms>=1)           //  数码管刷新频率
8 G1 b0 ?9 x; ?( ^( M        {
- n  Z1 R4 [4 t- P- A' [                  tmr10ms=0;. o9 e5 b% K4 `
                flag10ms = 1;
- q+ t3 y7 H8 t, X4 S/ b        }
4 G: `2 s/ J# `        if(td==1); F4 |; K4 @: L
        {3 r- U/ @+ B6 R# C) {7 I
          if(sdd>=500)           //温度显示5s        、湿度显示5s
: j9 G, a  F: E: F! W          {
5 z$ w3 H/ F2 }4 l& w             sdd=0;
5 @! Z* X, O5 D4 i; H6 L1 X             if(st==0)
' B  |" B2 J+ Y             {/ N# l% [$ d2 j+ s8 S  J
               st=1;
1 m  S: [- M3 O3 y. P                 }+ q$ m5 {. `. {2 o* I  F& @- J
                 else st=0;. F, \, G) B) j, O0 _
          }, r0 I) Q% q# f' f; V6 _
        }& G% ?3 z" q: e/ R3 r8 X0 p2 r
    if (tmr1s >= 200)  //1s 数据更新频率
. ^7 `) i- L, [1 \3 J2 `3 @    {$ t7 ]+ W, c$ m. a
        tmr1s = 0;
6 @5 V- }1 ?$ p; e6 [* m        flag1s = 1;
) {8 V7 P7 r& l        }
- G, j8 Q0 c  U  a$ r) _' i& G9 D
6 i, K* `& u( y, u+ `& {* \3 S

$ L% p" U; D0 ]8 W0 t    ; l0 Q2 [4 t' C- K0 L
}7 V1 G" s0 @/ J( S

2 j: ]) X, p: c; ^. P  z
, E# R7 Z/ }% c! O5 n5 }( h, y1 q下载:/ h' X; v* ]( q$ E5 d) w
游客,如果您要查看本帖隐藏内容请回复

7 F4 J( u( g  }7 t9 S* [+ X

) |, t9 b  ~& }* p/ _

该用户从未签到

推荐
发表于 2020-6-28 22:55 | 只看该作者
&#129310;&#129310;&#129310;&#129310;
4 Y! h) w" i0 R; ^7 W

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

“来自电巢APP”

该用户从未签到

11#
发表于 2020-3-7 11:55 | 只看该作者
谢谢楼主分享
6 w& D7 i0 w$ y& k1 o  C  a0 T

该用户从未签到

12#
发表于 2020-4-20 22:21 | 只看该作者
11111111111
2 u% h% z2 Z6 h  m3 R1 g. q

该用户从未签到

13#
发表于 2020-5-8 14:47 | 只看该作者
收藏了啦啦啦啦啦) ~! g& Z6 Q! [3 W. d

6 U1 w9 Y( L# w

该用户从未签到

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 02:48 , Processed in 0.140625 second(s), 28 queries , Gzip On.

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

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

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