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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的dht11温湿度数码管显示proteus仿真与程序源码2 K9 ]1 \9 \3 L/ k

% f6 @" ~) F( a

& o$ k0 H7 k  u4 {. F9 ]仿真原理图如下
) ~& v7 v  i: |) n9 D' `- K; {2 g
% N+ t" T0 ^9 K( {" y" e: j- Z. a, h2 I) t: l, u
按button1可以切换模式
5 T( A' \' k% M+ j2 ~% \2 o模式0 只显示温度
6 ?) G/ S/ S0 X; i' G模式1 只显示湿度
* U0 B3 O$ j- k/ B  A1 b% b( h+ w模式2 动态显示温度和湿度,每5s切换一次2 {8 `* d/ M) ?

% ?  x8 a* f! R/ m# G2 X
0 m. O7 e) G, n- H% I6 A/ d
实物如下
/ @( X$ J, N$ Y4 h& P# [+ s+ |, F温度显示2 r  }6 p/ L% z  i/ y

! ^7 I- G9 ]2 e5 d& C/ e% ]湿度显示  小数' ?: X/ q( F: Y
$ W2 @  S/ R; Z' d* b8 i! p
6 u; T6 ~' K# _3 c- E7 J$ a4 J' x/ e7 y
( l- f. M, k+ ]& Y2 o9 {. x
模式选择,自动显示切换湿度和温度,只显示温度,只显示湿度。
0 a/ V# G, p, N. y! e( y6 R! e7 G8 }+ Y$ U& M+ ]% W4 s$ k7 v
单片机源程序如下:

$ X4 {. s. a2 q6 x#include<reg51.h>
3 T+ ?/ I* _5 J3 X6 X/ [6 G, ^' Q7 w) z6 J; w; p

5 @6 o7 X1 A8 h6 rbit DHT_Start();+ G3 O' q  x) y
bit DHT_ByteRead(unsigned char *dat);
$ [; b5 K, n9 _1 p* Y5 Jvoid ConfigTimer0(unsigned int ms);
9 ?3 o) b, C0 _; k8 V$ rvoid Display_hum(unsigned char *num);
, X" o( |8 C% B7 G/ evoid Display_temp(unsigned char *num);
+ ]+ \' z# g0 o* e1 _7 e7 M+ z; G, \# _5 `( I

4 d  T& x# }' F" l
% v6 i  c2 F# J) i

" Z3 o0 e# v6 G8 ?8 J3 punsigned char T0RH = 0;  //T0重载值的高字节. ?  u/ i5 x+ h9 B1 A
unsigned char T0RL = 0;  //T0重载值的低字节
" R" t- a; O' K; S# ^unsigned char str=88;
5 b. Y% m  ~3 c4 k) b. f! F. {& `5 R3 @unsigned char DHT[5];# r: ]4 @- e+ e3 w9 W2 z$ }6 I" g

6 o* n5 b/ N; R0 Q8 Z2 l

# A/ f# R" N0 V* T5 o' Sunsigned int tmr1s = 0;
4 H0 d( m0 H* {& Z2 w  Sunsigned int tmr10ms = 0;9 W/ a0 H/ s/ G. F
unsigned char st=0;
9 p* |: e. L( T$ n$ Runsigned int sdd=0;
; W( J4 m. D4 N2 [7 I/ Lunsigned char td=0;5 S! x( K" w5 p$ |* B' k9 v$ a, T
unsigned char mode=0;8 z: _6 z; i  X6 M: T7 e% N9 |
" c' x$ |8 I( p1 e' C
" ^3 L4 v1 e1 F- P$ h, w) F
bit flag1s = 0;: h) R8 h+ K$ [5 E. m9 T6 j6 _
bit flag10ms = 0; 6 P1 V1 p0 P& n4 X
int x;
8 n" S  L0 L+ d6 U+ k2 x            
6 F9 ~  n3 O/ c8 Ssbit button1=P0^0;
9 R' L6 P+ Y; n' x0 d4 Zsbit dot=P1^3;   //数码管小数点- h  x7 r- T( b1 P* S/ r' C8 N, s6 L4 D) [
; |$ e$ N+ N: Q( E' z

  O0 n3 s3 }* F7 p/ [, m
, ~4 y* D4 u9 }" M+ K( i  q

5 y# P6 Z  K4 xvoid delay(unsigned char x)   //延时ms0 L5 ~# j% j" L7 P$ G8 t, R
{
! ~2 E  L9 U! I2 z6 [9 a# ^    unsigned char a,b,c;
. U  t0 G, }- W% g/ M; e* ^        for(c=x;c>0;c--)9 ~5 l7 w$ ^0 I4 h: k' S+ k2 t
    {% y6 b8 e' _5 v/ D- x& I
                for(b=102;b>0;b--)
1 t8 z; b. ]" x( {. u* Z7 i        for(a=3;a>0;a--);6 @# |( T- y: `# Z' g
        }
# c$ B% I: f+ a$ ^& r}
$ n) H$ p0 _0 T+ x) ivoid main()         
/ G4 |: d/ y3 D) ~) ]% `{                 . P* `! N0 P3 G5 ~& E

: z7 O: G6 o7 c- J! ^* \
) L8 w4 n9 |  d; B
    bit tmp;
: ^; N' L! V4 ]" {) m" P. c9 u        dot=0;7 |( P" Y: B5 t# `( K
    EA = 1;            //开总中断1 v) w5 M* r  N
    ConfigTimer0(10);  //T0定时10ms& y# U4 }  t& |6 P
//        M1=0; M1=0;M2=0;M3=0;D1=0;D2=0;
! n) t: V9 ?) z    DHT_Start();" z1 S" n: ]( ?7 `! E; n
    delay(5);  K0 t% ^& `. i7 S

. [: A( ^# |; f6 R* X
( U8 f' A" Y8 _1 V5 y! b
    while (1)
1 N1 V: _% Q0 ~9 e0 ]    {/ V7 J, c& O" U, j% m
. T7 D( V3 Q. S, e1 A% f
: M  n# x9 x. L  H" Z5 Y# g
1 W# j: K5 v3 G- [9 T
' _6 r' ^/ [9 j* B. a4 w: e" o
        if(flag10ms)  //数码管刷新频率3 h8 s1 k, |) U/ }1 A$ ^" g0 D! G$ n" S
                {/ b/ z# N4 s; \. O) j( Y. J
                   if(st==0){! s3 s  I5 p- }5 @6 ^9 Y4 `- n
                                Display_temp(&str);2 m5 i9 ~) D: P6 x! y
                                flag10ms=0;1 d+ v; ^' F9 W2 _
                        }  h* J  o! D) i1 m" M* V
                   else if(st==1)
: B& l7 \3 r; K8 G. e: ?8 H! z2 N3 }                   {
! V  r1 Z$ f! [+ ?0 a7 |                      Display_hum(&str);
4 D+ ^/ G' X1 v$ S6 b                          flag10ms=0;
' n" M1 ^8 C, U; `3 C& R                        }
1 o" g$ s1 l  K6 K) o+ N* s! X4 z' H/ A6 M( q

" G& D: A' m" W9 i4 n  g                   ' i+ x" m. U9 ?$ m
                   , H! ], z2 [% f
                }
8 G: ]* \4 ]  y! r+ C8 t, G                else if (flag1s)  //每秒更新一次温度、湿度
$ n1 a8 I, U/ l. B2 K        {6 n, D& ?5 W. K8 ]( Z$ E. Y
                DHT_Start();
8 z2 A1 p' n: x* Z                   tmp=DHT_ByteRead(&DHT);" t6 Q, ]# T, T+ i3 R$ f0 ^
                   if(tmp==1)$ G. U  H9 i% i! `; q" c9 Q
                   {
- F, Z2 B8 ^& {  m/ R- K5 @: s6 K6 }3 L" i% X/ T% {* U

- h! u' F" c  w% z# O" V3 ~                          if(st==0)
% ]7 R/ y$ _! H9 [1 \0 a5 m& {                          {
& U+ M) K/ ?# V1 t, c6 o0 _$ Z                             str = DHT[2] ;             //温度
4 X+ ^! R! J; y, V1 E0 M                                Display_temp(&str);                     
, ~7 ?8 k% o* U# B$ j% D/ k* f+ Z                            flag1s =0;         //标志位清零
) `: L" B1 m1 H+ ~7 ?6 i                          }
2 }) t; K& y+ _& J5 D' i                          else if(st==1){% R2 A0 C" P) b7 z* K4 _

6 H" {. e+ Q. e4 A/ c) {
/ c2 e- v/ B- W% u4 ^
                          str = DHT[0] ;  //湿度
! m' m6 v. n; l' G2 @; f4 w                  Display_hum(&str);
0 l. Q" Q+ z: ~8 E; v                                  flag1s =0;         //标志位清零; L' }6 ]3 k, t# ?  @) O
                          }
' T: E0 C7 t, y% e& U
% _1 @* Y; F$ ^; U( \' T6 F4 @1 N
# X# o: t( h- u# }
                          
+ z6 R* d$ A1 X  M7 s
% U: k: y: s; H3 b3 H' e7 U
: @) \6 @( n* y) B
                   }
, U1 `! h1 e9 |( H/ J        }
, ]) V& ~! j$ Q/ t( ]. i                if(button1==0)% E' x' W: G; u3 F: W4 P
                {
7 M% X0 A5 Y; b) t                   delay(2);
+ e- p/ b/ S: S1 h; n. G+ e; f                  
8 V1 y3 |$ p1 O" p9 d8 a                   if(button1==0)
6 ]$ H: H  V) t9 Y% J( V                   {% t7 x8 w; D( D0 ]! f: Z8 x$ l
                      4 ^9 A8 {5 W7 G( c) ?
                                mode++;
9 t( F3 q8 \. }* A6 ?                                switch(mode)
! m& P, R: P4 \$ n                                {
: g/ C+ u1 p5 @7 W                                  case 0:  st=0;      break;' Q3 ]" j2 l  ~1 h4 b
                                  case 1:  st=1;      break;( d/ X5 g4 b7 ?- y* a) Y
                                  case 2:  td=1;      break;
( O$ D+ q) ~3 }  _0 m                                  default:     break;
6 K, F# l- O% l0 @# c                                }
- l. K$ N# U+ N: W' P                                if(mode>=3)
, T- z' _' g7 u" T1 l# [                                {  M8 X3 g" N+ j6 l) K
                                  td=0;
6 h/ }  Z) c$ r1 K! z2 g                                  mode=0;
4 w& Q  D" {) n# y                                }
5 k1 Z' `( g. }* l$ c                                while(button1==0)
0 m* H' v( k5 A- X3 n* t1 J4 I& c                                {2 q5 @& p& v1 [7 |+ m
                                }
5 Z& q9 b. f- a+ s
4 T* U3 l  s7 s, X, z. s6 S% P

6 i, ^9 |; ]" T" T+ V1 L" w+ V) r" I3 Y* g( `
& o' N+ R/ [/ q) G. n
                   }; n; P/ g* |5 ?

# [) M1 W8 i8 n
% ?1 Q2 H. _+ p3 l2 r
                }- W/ [* D1 Y4 ?, m5 U# k
! @3 z9 x6 I, e3 D9 V

( v; Y0 x7 g% m; A) Q2 Q& a
* w- Y' p( Z9 z8 N( R6 I0 p
, s7 Z) h/ t7 U5 c; L
. G- e; ^2 L  Q

# m; d1 j3 o9 p2 t         }3 i( L. b; }- X$ w" h: T( o
}5 x  F; S: u& U0 T) z
" s, n' V) e" f5 u& L/ q

0 m! M! R8 A* v% a! _. O2 l" _/ S5 w  w3 Y" Q8 j

, p7 C! @+ w3 X, e/* 配置并启动T0,ms-T0定时时间 */
; J6 T( Q" V3 q+ o2 pvoid ConfigTimer0(unsigned int ms)' b! L+ H' I2 @$ b! M" ~( d! r
{
: t# Q% M& c  n! m6 E% @. b    unsigned long tmp;  //临时变量
$ N8 U1 d! D9 [% N    ( K7 B, b$ D' x+ F4 d% K
    tmp = 11059200 / 12;      //定时器计数频率6 ^% ^7 ?5 J" l
    tmp = (tmp * ms) / 1000;  //计算所需的计数值0 |  X* i# k: x0 Q/ p. X9 Q
    tmp = 65536 - tmp;        //计算定时器重载值
4 ]7 v5 R+ E* t" f% Y    tmp = tmp + 12;           //补偿中断响应延时造成的误差
. G! `% x: H# j1 H. V    T0RH = (unsigned char)(tmp>>8);  //定时器重载值拆分为高低字节
: r1 X! t2 z! T; u5 u    T0RL = (unsigned char)tmp;
3 A; h' }, \# D2 q    TMOD &= 0xF0;   //清零T0的控制位
+ M; Q- e' n) Y7 D6 K  X  @    TMOD |= 0x01;   //配置T0为模式1" o" x8 B( f% P7 A8 G
    TH0 = T0RH;     //加载T0重载值
' r. k% a! Q* D5 O- f7 L( H) ~    TL0 = T0RL;
1 Z9 e$ [- l4 Y. J2 t    ET0 = 1;        //使能T0中断* p9 X0 i- z$ x# z2 Q
    TR0 = 1;        //启动T01 v3 {- N+ i1 v* M" p0 ]
}
6 `" _9 k  l- B: D2 G/* T0中断服务函数,完成1秒定时 */1 [! C+ _- g' k9 w5 L; C9 M
void InterruptTimer0() interrupt 19 v' l2 u/ i2 x  ^4 R+ w: B/ k
{
5 f- e3 s/ C* |: s8 N. E" |( m# _' |% W" o

6 C! b3 r8 i  Z. Y: e/ O. J1 }* O    TH0 = T0RH;  //重新加载重载值) L8 t8 {% \0 U0 ?% y: S: \5 K
    TL0 = T0RL;
) G/ h( F- x* k. c% s    tmr1s++;
% |* N# Q' y. E2 ]1 E8 [        sdd++;7 q! U% E) G0 O$ e, l
        tmr10ms++;# H* b7 l' i9 E4 t

* A. S; [2 m9 p; s8 W: M

% l( d7 f  ^) [, @7 l        if(tmr10ms>=1)           //  数码管刷新频率; U, V5 v0 H" K- G* f, x! x1 D
        {
4 h8 {9 I4 F  ]3 W                  tmr10ms=0;) u" U; I- p+ }% S, m* |$ A
                flag10ms = 1;
" }" G3 b' N0 S5 T1 j6 z        }
; ^0 p% q4 ?6 G2 f9 ~1 V( u, q9 l        if(td==1)
2 B! ^0 Z; T; y# Z1 G3 ~" u        {4 p# |: M6 o7 W  T  v5 w; V4 x: _
          if(sdd>=500)           //温度显示5s        、湿度显示5s
" }# s0 @  m) Z- Z          {
1 t) H& E5 _' t( Q) k4 B: K/ _             sdd=0;
) y' c' j, O& J: U) E& {3 u) F$ l             if(st==0)8 n% ^3 H3 c. {* S6 j
             {
  N1 E: {, G9 A- s' D               st=1;
; m2 M( f& X* o; M' V) {5 N                 }  i% P# E; g4 ^6 p! I& ?" W, g
                 else st=0;
/ T, \- ~- }! v% C          }
  _9 a( `8 i2 x: n        }, i2 V1 ?1 l+ ]3 @, a
    if (tmr1s >= 200)  //1s 数据更新频率0 M9 S, b" \$ D; P3 E( v9 E
    {
, ~$ l7 P: Y$ _3 N' m; Y+ D7 c        tmr1s = 0;7 ~8 f' o* j! R$ |% q: K* m
        flag1s = 1;
- J6 h7 o3 g1 t        }( E/ K0 C2 Y; P
6 H, Z0 i1 k# \9 V

3 L6 |, r) _& F+ ]( {! F    3 d+ ^3 b" K! E& o7 H- ?8 j
}+ ~* C8 }1 \& N" R2 R" Y
' ]7 Y0 S  ~' R$ [3 n
# n! o1 P9 A( t
下载:+ [& y3 z1 t8 M6 E
游客,如果您要查看本帖隐藏内容请回复

2 W! h. w5 P% i- D, `$ e
" u) v2 d3 M1 k. u9 A6 V' d8 r8 {5 v

该用户从未签到

推荐
发表于 2020-6-28 22:55 | 只看该作者
&#129310;&#129310;&#129310;&#129310;
1 ?$ \; O, U! y5 x  a/ x

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

“来自电巢APP”

该用户从未签到

11#
发表于 2020-3-7 11:55 | 只看该作者
谢谢楼主分享
% I9 Y: O) ~4 {" @! S0 ?

该用户从未签到

12#
发表于 2020-4-20 22:21 | 只看该作者
11111111111
4 q/ X# V# O' G+ l

该用户从未签到

13#
发表于 2020-5-8 14:47 | 只看该作者
收藏了啦啦啦啦啦
! ^0 ^# h3 {8 E8 t0 {- H. n' x% R9 M0 _2 c2 L3 E; V. 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-11-26 11:33 , Processed in 0.187500 second(s), 29 queries , Gzip On.

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

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

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