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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的dht11温湿度数码管显示proteus仿真与程序源码5 U5 j7 |4 y& J# P

  ]" F5 f7 m- F4 a" @

1 y9 }! i. X& z- m8 x  j  p* f仿真原理图如下
: t  n3 W% d; G) A: ] , B2 o0 ?* r4 m5 X8 [: |3 J: J: R. \( ]

$ `4 l( z0 U) K7 c1 `: m按button1可以切换模式/ d$ f" y/ ]2 Q# J1 b! C4 i
模式0 只显示温度5 y  o( f6 O: c' R) r$ G- h3 V2 p
模式1 只显示湿度5 |4 ^' c! \' M
模式2 动态显示温度和湿度,每5s切换一次
+ j5 |; q$ l$ `+ l
& C6 A! w# T6 U% k8 O
2 N. w8 G+ I& q" i5 M: s
实物如下
% R3 F5 _* O- _温度显示4 X0 b6 }4 F: N5 S" N
/ j; O* ~1 z+ A  q& }* ]
湿度显示  小数4 H1 I; r: G7 \/ |& R4 t5 k
- ^: T3 r! `1 N5 [# f
+ w1 i7 F' m/ p3 m+ w3 m

# n0 w9 M: R1 M7 e0 v模式选择,自动显示切换湿度和温度,只显示温度,只显示湿度。, D) d* o/ `8 k  o9 H- U

* t0 s& L5 f" s/ A/ T6 T单片机源程序如下:
* Y. }- O: h4 l, }3 ~
#include<reg51.h>; P! \- `0 t" B
3 t% M0 E( K! p5 R

3 J8 g, @) Z, Y) R2 {5 C" Kbit DHT_Start();, B0 w$ m. A/ B8 @& @
bit DHT_ByteRead(unsigned char *dat);
( C! V' m! C/ ^- Evoid ConfigTimer0(unsigned int ms);9 r! k- p/ J2 y! D4 P
void Display_hum(unsigned char *num);
# O- p) U+ K0 |/ U, O- L. @void Display_temp(unsigned char *num);
& }+ e# O4 S1 L3 D6 Q! ~2 u  v. I$ l2 R9 n; \9 K4 u: q
$ X4 n6 S% |+ R, F9 k) U- x( N

* R# s% |1 ]9 u4 q
! |6 o( ?/ K& |" }
unsigned char T0RH = 0;  //T0重载值的高字节# u4 b" O5 i# \! `: |. I. @% p9 D
unsigned char T0RL = 0;  //T0重载值的低字节
' O7 ]0 a! l0 x$ W, ?unsigned char str=88;
. T) n( H8 ^1 Vunsigned char DHT[5];# E6 H# _6 [9 g% B, U* L
# {0 U% j, s- @; ^/ y
2 F" k" x$ `# k) X% c+ Q7 B% \
unsigned int tmr1s = 0;4 {* s. n/ E2 K# n4 l5 L7 l3 M
unsigned int tmr10ms = 0;2 g# {* L! Z& T( f% H/ _' i
unsigned char st=0;
- T2 f! K2 l; I% A* b. k) Bunsigned int sdd=0;& ?! s2 h( _' Y6 X
unsigned char td=0;+ A: ~' |3 b& [* u7 b
unsigned char mode=0;
% {1 m& @! [# l& f5 a9 W; o6 A! ]/ m0 C, J, }) w

( h: ^- q5 ?& O: M7 Obit flag1s = 0;! {/ O" S5 x; K
bit flag10ms = 0;
' p$ b% {0 z6 T- vint x;; r" e9 |5 ~% O7 W# S( |* i% F9 K
            
% v# S6 |3 ]7 T# ]  }6 R* V' q/ Jsbit button1=P0^0;
, R' I9 K8 N2 |, k! zsbit dot=P1^3;   //数码管小数点* }# w+ K7 }4 T

! X" o9 p/ ~5 t/ j
4 m! L: d2 p5 L* G* u! t. p

' @' N7 n9 J, O, D5 P: m0 B- f0 C6 ^" ?

2 J- r6 K9 n2 Avoid delay(unsigned char x)   //延时ms) n3 i  t& b, Y
{, F' Z. O3 U- i2 J
    unsigned char a,b,c;
( ~" u) [/ a5 A" U$ c; @+ B        for(c=x;c>0;c--)
4 _, D  L! v  r( R9 o    {
# g7 M. B& j' w( ]9 S$ w                for(b=102;b>0;b--)4 d3 N. o* @, \5 y
        for(a=3;a>0;a--);
( _) v; `) S  h        }9 c  l; ~" t7 X5 Y( v
}
# T4 y% {0 i, c) Y5 E1 wvoid main()          9 C: L6 K7 O; A3 X  q; n5 v
{                 - j: d9 }! v5 a$ u. U

: l  f9 G' r- t9 `( v% u3 o4 O6 G
3 D7 u# [8 P/ Z) ?' @4 v
    bit tmp;
" t. M% [, e. @# c; |( b        dot=0;1 z% V$ l! S) B8 o& H
    EA = 1;            //开总中断
- B7 q% b# @) y2 Z( T. C6 H    ConfigTimer0(10);  //T0定时10ms7 z( A$ _! \' h# h* Y9 n: J6 n
//        M1=0; M1=0;M2=0;M3=0;D1=0;D2=0;4 k, @, ^, ~5 |" O
    DHT_Start();
( n) N! @! l: ?. K( g3 m' d    delay(5);
# I+ \& `( C' Q& M% A: X/ t6 e
  t6 [! R* {# T
) ?6 k" J3 K( c: ~
    while (1)5 t( [! o$ z. N
    {3 u; v- ]! i8 ]) b* `7 H

+ `$ t2 o/ F! q- A* Y- z" A1 B
6 ]7 }. N5 W6 `  q) I" l

& x( d7 N% P& L' M8 R

% w3 S$ P* N) l' m# t- z        if(flag10ms)  //数码管刷新频率
( c) s) r1 ]4 s* v6 l7 Q7 u                {% j9 g  X$ N3 H  T4 q
                   if(st==0){
% Z7 x8 `: K7 @; f                                Display_temp(&str);- ~7 O5 L7 T" I
                                flag10ms=0;' L% V8 ~4 v6 Y: T
                        }
6 R8 V7 O  [( Z! `) \2 V1 a5 L                   else if(st==1)
4 {9 w7 Q& D8 R8 ?$ ]4 f  S3 l                   {
9 }' y7 c$ l8 d7 M. [                      Display_hum(&str);
% v; x8 f. C: L( T                          flag10ms=0;# B  I, ~2 B" t8 k) Y4 V/ ~( T; C
                        }1 f0 A1 n# J* U& l
2 i$ ?6 \+ Q* G% y3 E/ V0 e2 [, |

6 U, Z: }6 N$ l! g! C* C                  
' b2 H. b# M. G( S% p* ~9 U                   . s) C9 d8 z& p, E
                }: ]2 A- T2 L9 A" x
                else if (flag1s)  //每秒更新一次温度、湿度
( d" O1 [6 j% S# Q        {$ j  X* I; \/ r3 S% o
                DHT_Start();
+ U. _2 x8 T* E% E                   tmp=DHT_ByteRead(&DHT);/ I7 s7 B- i4 t' t2 x9 n
                   if(tmp==1)7 X$ X7 \, a* e. o
                   {
+ v* o& Z) S1 s! ~. O" V/ z/ j
: ~+ p; E/ B) E1 m- p7 ?
; m( J4 }9 j* m
                          if(st==0)0 V  S$ z* k, P- k& E# Y
                          {
, S+ [4 O; F9 {                             str = DHT[2] ;             //温度, b& L  [' }. R. l- w" X
                                Display_temp(&str);                     
0 U; V+ j+ i. ?. E. K, h                            flag1s =0;         //标志位清零
7 U) O$ v; v! S  C5 n                          }
2 d/ i' r+ U) a6 ~                          else if(st==1){
% @6 w) m, E& G1 L
% d1 {! M! f2 E, k* \% E8 {

' s, @* V1 G: z. o2 i) ?                          str = DHT[0] ;  //湿度
* X( w/ `$ X6 \% x& c+ ~                  Display_hum(&str); ( l* D6 \3 F8 D# C1 Y
                                  flag1s =0;         //标志位清零) i5 C7 ^) V/ Y! e8 r8 V
                          }
$ w& j: f/ b1 H% j5 Y; T7 E* S) w/ U7 g; T- O1 E6 i# U
) w9 @) W3 Z8 S0 B  \, b
                          1 z3 w* ~# k3 f8 D
/ b' C% c( B; R. ]9 ^: O
/ {1 a% k" [9 T& w" a( m: R
                   }7 N5 J' a# v/ d2 R
        }
4 |( j) [$ x! e, t8 p                if(button1==0)- D1 B* L& N/ z& y
                {4 C9 {# j/ d& v7 `9 m" }
                   delay(2);7 q% F' ^- C8 j1 G9 p
                  
9 R% h8 [: E0 \" e* Y0 c8 n                   if(button1==0)5 R6 ]/ j# X9 v1 m+ L* V
                   {& ?$ {: k, S% u& ~+ Q( O
                     
, w, ^' U$ b, G                                mode++;
( N1 P6 I+ D/ f8 g                                switch(mode)4 F! w* o. y2 |1 Z: f( |
                                {
$ l) }9 }& j& G4 r                                  case 0:  st=0;      break;
# _% l" Q3 H& }  L& T# a                                  case 1:  st=1;      break;
# L) U4 v1 j8 D                                  case 2:  td=1;      break;! C" O/ n5 ~/ E; [3 y0 V
                                  default:     break;
! T( {1 q# i/ m7 d9 o                                }- o* O3 ?- @" g3 `0 |3 B
                                if(mode>=3)+ A) a" x1 u& x2 \1 {" f% i2 r
                                {
+ w, X) q+ {/ {+ q6 E9 I0 b0 f                                  td=0;
! G% I# U- H; E. t, X' l                                  mode=0;$ _3 \) c4 f1 n( N
                                }
( |0 [& \5 _& O0 ~                                while(button1==0)/ G; @) ?. }! K& @/ i
                                {
& y3 M6 r3 d1 y( \                                }
7 E+ @% {! T+ Q- g( `1 z
6 e- s% r3 r$ e) V: ^; P1 z

. R) @$ l' _$ v6 a( d! p9 t* ^4 B
$ l" x. N! S6 ~
                   }2 L. n/ I4 N& F3 d) d3 A  y" n7 M5 _
6 r& n- p/ J9 [% e

- s4 L1 {1 j0 y) S% T                }. D. D; w. X( g  N" M1 w& K0 l: f
; K& n' }1 i0 a+ ~8 ]) ?

$ d( I( t; j5 `) \
) {! L" \* ]9 _& T
2 F3 d+ d! u' N7 t: M
5 ^# i( h( ^' Z# M5 U4 }+ t

  C& t6 w6 f5 J6 l% t- l         }
, i7 r; N9 X- Q( M4 d% C}* T4 p9 m* [7 m  i: S

: R1 Z. \# `( |  c

$ G2 W" T; E& ^% }- R) q. [% L2 T8 Q

1 y+ a3 h# _& F7 U. o* m2 _3 L: B& J/* 配置并启动T0,ms-T0定时时间 */
/ B1 ]! }4 Y$ [9 m6 l4 t4 r9 a  `void ConfigTimer0(unsigned int ms)
* _, B5 m7 I' Q0 s( \3 E* v{6 q- S3 `2 u- f6 y& ~3 o: q$ C
    unsigned long tmp;  //临时变量% P: ^/ h' ?9 F6 i
    9 R9 D; ^  k3 o
    tmp = 11059200 / 12;      //定时器计数频率' {7 Z; ?2 y5 [8 _" h
    tmp = (tmp * ms) / 1000;  //计算所需的计数值
( {9 I; m  d# M1 s* v! M! y. b4 W    tmp = 65536 - tmp;        //计算定时器重载值
9 @7 I; u8 i' W$ [- Z! {. Y    tmp = tmp + 12;           //补偿中断响应延时造成的误差
" i; E7 j( P5 |! t  ~" f    T0RH = (unsigned char)(tmp>>8);  //定时器重载值拆分为高低字节: `' h$ v* m% {( \% k1 i4 z: Z
    T0RL = (unsigned char)tmp;. @" X  P; B( x1 Y
    TMOD &= 0xF0;   //清零T0的控制位! m" [: \  q# n, [' p. a- }
    TMOD |= 0x01;   //配置T0为模式1- H& d* e8 Y( I% z$ K- }
    TH0 = T0RH;     //加载T0重载值, V1 o3 @: l. Y; Y5 o
    TL0 = T0RL;- @( p2 z8 U( ~! y$ I1 c
    ET0 = 1;        //使能T0中断
( H1 Q& u( R* Q" Y/ }  h9 d    TR0 = 1;        //启动T0
. n  Y) W% U) D+ G, r}
0 V4 v) b; U1 y* F9 ?/* T0中断服务函数,完成1秒定时 */9 z$ H9 @8 @- o1 h1 e4 o  U
void InterruptTimer0() interrupt 1+ }8 f8 l  S. y1 {, u: g
{
* f5 [9 S; n- }! Z, W) q0 }6 G# l$ \3 ^
+ q% [# P2 ^# l: D1 f6 i$ E& ~
    TH0 = T0RH;  //重新加载重载值
! f* [+ k7 P. u' X    TL0 = T0RL;
2 B+ C' `( f9 |; @5 G    tmr1s++;. L" z8 ?* d. ]+ J- J; w# G0 r
        sdd++;
2 i0 u1 t7 g8 P, D8 B4 V( v        tmr10ms++;
3 p7 E/ p! w  r4 r
- {1 `4 O3 Z+ |8 u4 H- T/ ^
3 m3 W" _, u" s4 [2 Z; g
        if(tmr10ms>=1)           //  数码管刷新频率
4 ]3 Y4 |. I1 G( x        {
) Y5 n4 h( J0 L. O2 Y! q                  tmr10ms=0;4 I, {/ f; N+ D$ @0 i1 q
                flag10ms = 1;8 h2 ~6 W- ], _6 W7 c% N& G5 `4 N
        }
( q6 C! E" X/ w( [  t8 V2 b3 q* j        if(td==1)4 {- ?, ^5 \$ {' V/ y
        {2 f' e- W1 M/ D, n% q5 s
          if(sdd>=500)           //温度显示5s        、湿度显示5s( S/ B& M) w) z
          {! S  c/ G( w2 s& Y! n: e. m
             sdd=0;% L7 @' J' W: I2 ?8 `9 N
             if(st==0)
7 u& D2 L) l) F  n8 a4 `$ X             {
2 }2 R! ~- w2 w8 f( o/ F* l! n               st=1;
4 E" ~5 a3 W9 F# v0 N" \& z+ A; g                 }: w# s9 D6 a* @3 ]5 {
                 else st=0;
* R+ ?9 y  Y3 S% S8 |          }: }9 p  H7 ^* {: W4 S6 |7 k! w
        }
) H) S/ v9 H, X5 e    if (tmr1s >= 200)  //1s 数据更新频率0 S& I$ F9 A% {( @5 s& q* F+ s4 C
    {0 b! R9 C, D$ `5 R# b( ~. |
        tmr1s = 0;; d2 Y0 O6 m' [  v
        flag1s = 1;
% ]( J9 L+ B4 ]* v) a: E. X        }# g8 L0 l& Y. _* {& D& D" \+ v4 {0 V5 M
/ C" x( L' N6 T1 ]0 g( C
: u$ k' E1 h$ @, d3 D1 A
    ! A" X0 h& u' l7 w0 @6 ^
}
& K  [( N1 H, t
/ v$ p$ `  t/ f0 A8 S/ ~& r. i) o
" y* Y7 O# i6 y& Z& g+ E0 W下载:# j: B8 b" t$ D4 J9 w, R
游客,如果您要查看本帖隐藏内容请回复
0 G/ o% s. l* q/ x

2 p$ S! S7 f1 Y- y8 j' m

该用户从未签到

推荐
发表于 2020-6-28 22:55 | 只看该作者
&#129310;&#129310;&#129310;&#129310;0 V, b* b1 E7 e( u

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

“来自电巢APP”

该用户从未签到

8#
发表于 2020-3-7 11:55 | 只看该作者
谢谢楼主分享
7 t! {0 [: Q( J) N$ G: i) h6 k; e) L

该用户从未签到

9#
发表于 2020-4-20 22:21 | 只看该作者
111111111111 {, D7 s$ R6 _" \( Y0 p" v, e

该用户从未签到

10#
发表于 2020-5-8 14:47 | 只看该作者
收藏了啦啦啦啦啦
& }/ S8 z' g" Y+ A- [* x" z
" ~7 \! c+ r7 B

该用户从未签到

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-6-4 10:59 , Processed in 0.109375 second(s), 28 queries , Gzip On.

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

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

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