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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的dht11温湿度数码管显示proteus仿真与程序源码" T6 R+ R! e$ r) y
6 e- @! R( k5 b3 p# U
; R" T+ R4 G2 j( N6 e
仿真原理图如下
$ T. U- Q2 r' P( r- w, G6 A
3 m* n( x3 `$ P4 q" c' p/ X
* |: `6 z: q. m, e. o$ {: P按button1可以切换模式( D: c8 s( p/ F* O  J. ]) m
模式0 只显示温度
; L5 {& g1 F" w6 U: w" Q模式1 只显示湿度
) J* q" x# H4 a模式2 动态显示温度和湿度,每5s切换一次
) T8 u5 R# ?, G" p! j/ o5 j# [+ Q: I) W0 i9 k: F3 b

# X& b; j! T  ]2 G实物如下6 C* `; F+ F: \! t
温度显示9 A4 n  k) p2 p" _! u$ M) P
9 I8 d+ J: w% X, s% J* @( j
湿度显示  小数
" G0 O, {6 H& x ) t% o7 D6 n5 I
; T: h8 P$ @+ E$ s
3 v, {6 d5 ^: S& C
模式选择,自动显示切换湿度和温度,只显示温度,只显示湿度。% t' a7 y# B  ^# I% k7 H
# E) }2 J5 \3 w1 I6 R
单片机源程序如下:

' i. [+ V4 `4 C- h  P#include<reg51.h>
6 V6 j3 f0 }- O- ^6 p0 X6 K5 x: F& Q3 F8 i
1 l) E% {3 Y' w
bit DHT_Start();
1 J! a* u3 \2 g- E7 K8 I8 R+ Kbit DHT_ByteRead(unsigned char *dat);' G7 z+ Z9 Z% ?) G6 E
void ConfigTimer0(unsigned int ms);; n4 `' H. x% }8 K/ ]6 t
void Display_hum(unsigned char *num);
) q3 A3 h' l9 F/ N- \4 f, j/ ^" fvoid Display_temp(unsigned char *num);8 }. h8 }3 n& f
$ ]% j- q: @0 J

& T* u; O( _6 {& z. v- l( J( Q+ _3 n  p6 n

  @4 F+ o. M7 y0 s# d, \1 Qunsigned char T0RH = 0;  //T0重载值的高字节0 f, q0 L1 y" W, \/ @) t! L
unsigned char T0RL = 0;  //T0重载值的低字节 2 }' E  Q5 p; f2 n. J, v
unsigned char str=88;; Q1 L, |3 R+ ~" U' C5 ?- k+ G! M
unsigned char DHT[5];
% A8 w, z( a" x3 `
' e1 X2 n9 v. {  l6 y  Y0 g* V: l
$ p' |  ?0 D' F6 Y  B! I8 h6 Q7 [
unsigned int tmr1s = 0;
, V% l+ h0 u" v; J; u5 [; Yunsigned int tmr10ms = 0;
/ |4 @  X- q- X& n) a: s* Cunsigned char st=0;
8 S- ~! j0 M! C2 h, W8 sunsigned int sdd=0;
1 U6 c" j/ Q% ]6 H9 ounsigned char td=0;
7 R% L. Y5 D; {1 K4 punsigned char mode=0;( V; ^: \% P* v/ a' P. h8 l

, q( O! `6 T( J/ c. l
& w# m3 F9 M# U% P( j5 v3 {
bit flag1s = 0;8 u* E# @. g& H/ \" y" Y2 ~
bit flag10ms = 0;
, N. |8 M% a/ k4 e# Gint x;
7 y1 k4 d) P0 ?6 v6 Z2 ~+ R- j             2 h- r1 G: Z  u5 ?7 ~
sbit button1=P0^0;$ k4 I7 ~# t! ~* E4 E
sbit dot=P1^3;   //数码管小数点* C: V+ e( Q; Z3 C9 Y/ K
8 V9 v3 G  Z2 h7 M/ G+ y% R& N
7 v& V. o) c( K" v2 w5 v( j! B- O1 l  S

  X; g3 X% Y  t. s
+ [/ R$ k( Y# d
void delay(unsigned char x)   //延时ms, p9 \% C1 J' N0 H
{
. S- S, Y: v4 s2 C0 P    unsigned char a,b,c;: Z4 w, ~) }6 Z3 v0 S: G$ C4 p
        for(c=x;c>0;c--)2 @& z& f  e# g- X4 w6 b; p
    {/ \$ ]  v7 x; q6 Z( T1 l5 z
                for(b=102;b>0;b--)
6 b- r$ s( P- v3 d        for(a=3;a>0;a--);$ L) Y2 ^# ^; }7 T' F) C
        }
* c1 K) \* D7 R2 I6 J! h}; I' c! N- J( X3 S7 E6 L
void main()          % F3 S" W7 X* O9 o0 `
{                 
0 m8 b4 V9 t0 k# S* b2 s/ D6 D4 o1 s. d  Q+ e
3 O5 g8 l6 D* v6 w% u: h! z
    bit tmp;
/ B" Q: B# b9 R" G) J# t3 u9 y7 A        dot=0;8 R/ y/ H* o$ S
    EA = 1;            //开总中断
; y/ o/ w2 ~5 k/ I3 O    ConfigTimer0(10);  //T0定时10ms1 Y1 q9 O- H* K% [8 C
//        M1=0; M1=0;M2=0;M3=0;D1=0;D2=0;
: s" D# S- B& s( d! v. u& m5 ?    DHT_Start();
  r- t) l5 q- E: B9 o! h    delay(5);5 a/ T; P. c" `: C' w3 s  L
0 P/ z1 \* a  T/ I1 w) z4 \6 z

/ U: U9 B, I9 C: |' ^/ Y2 {    while (1)
& T9 U3 d" D7 R2 V6 F5 [    {
7 c1 w% R+ c& ?$ b+ r+ a$ q3 m( |2 z* Z; X( J" l5 n
, \/ x3 f$ K6 D% G5 U* L
7 m3 @+ [( p% F. a+ _
7 A. {4 S, i6 Q! E- h4 G% G7 t
        if(flag10ms)  //数码管刷新频率
: ~* d# i% \; F% A                {
+ J4 B8 o  P* S3 y4 z5 R: b                   if(st==0){
/ P  ?. M7 Z0 Z# o! A- j" z5 r0 J                                Display_temp(&str);/ N$ B2 m0 @. N9 v) y/ `
                                flag10ms=0;
7 w/ P& z% N2 e                        }
9 g1 R, t: Y* m7 _$ Q                   else if(st==1)
; _& J" P0 }% `4 b5 v                   {
8 Z$ y' @% B# @* Z3 M, Z& R                      Display_hum(&str);- {0 w4 M! y' J, r/ j' i
                          flag10ms=0;/ N6 ~: H2 A. |$ X
                        }
3 U3 L. W. w5 l" S! Y
" D& y* h, `" @8 Z  \4 d
- J3 d' E* O0 I5 b
                   6 q# k2 e: h, a. D& u9 S
                  
4 ?/ `# C; F9 ~4 g' m/ s                }4 l. o; z. [6 M  G2 a# k) _
                else if (flag1s)  //每秒更新一次温度、湿度' J3 x6 a3 \! S# n( U6 T" m0 h4 h
        {
9 a0 b8 W6 E$ ]7 ~                DHT_Start();
( X) @' p& v% R! A3 s( S+ U* H                   tmp=DHT_ByteRead(&DHT);
1 p0 B& F+ x! F/ }; Q' d  Y) ^                   if(tmp==1)/ J1 H' Y# e, e& m1 \, E
                   {
5 i* ^( g- u4 |- I. P' U7 ~2 u# o2 `- t4 ]0 Q# F6 Q

( l' _3 Z& {8 H" R+ R2 E                          if(st==0)6 K, w* M, O: X  l
                          {
" a2 m: q& S  c+ x: b1 h                             str = DHT[2] ;             //温度; G8 |4 Y& Z, B5 `
                                Display_temp(&str);                     ) L- l( d8 S' L3 ~" |
                            flag1s =0;         //标志位清零
2 z& y2 N# J9 B7 y  D& P                          }+ U8 S) Y) N% Z8 ~" @
                          else if(st==1){
* h2 L) F* L) ~, k' D  A6 o" }
5 S- i$ h' v; j' p7 G
9 [1 H" f# J6 T( F0 |- b* K( c
                          str = DHT[0] ;  //湿度
' f, j4 j; Q8 n                  Display_hum(&str); 8 _* G5 x% ]6 I
                                  flag1s =0;         //标志位清零3 E, I( [5 A$ S% Q! `) m
                          }! ]- M/ b. M  t* }( X6 O

. a' _% A. M3 Q

! L1 c6 V5 q. H9 @$ P% f                          / ]* \3 \7 S% _4 Q8 V
. s  M7 i& P2 K0 p  I  g3 @

+ @$ {$ w' O' r                   }- [( N6 i" [3 G/ \
        }' ?) o( ?# o( H5 p
                if(button1==0)
' s7 [# Q- ^  p                {
8 i, U' F+ a8 @# K& W# z                   delay(2);( y- x* S) ^9 u! U, d
                   2 d  K6 L. t" q  U0 j7 i8 ?8 O
                   if(button1==0)! a- r/ @$ w: f5 T1 b2 K/ W. T
                   {4 Y2 M* e3 E* p7 b) n! p
                     
  N" @3 Y# B$ [+ V! }9 ~) ~4 T                                mode++;
2 H, p4 A, K& X+ c+ P) }4 O                                switch(mode)0 q( t( _) Q8 {" y; {3 s
                                {
7 h. R1 C& u8 C                                  case 0:  st=0;      break;& Z9 }. W9 p# Q% u8 m' x' ?
                                  case 1:  st=1;      break;- U- S  }- ]1 N0 |  u+ ?
                                  case 2:  td=1;      break;  y( _5 q, b0 Q& {3 ~8 u
                                  default:     break;
. H4 Q2 _& P7 B4 f                                }
8 ]- }( }- [5 Z: f, @                                if(mode>=3)
0 {, C1 Z, ]0 m1 W% V) W* P                                {) a6 a! h  }% l1 Q
                                  td=0;
$ G% _- J9 g- G! L  |5 W2 l% @                                  mode=0;
" I5 Q4 I4 E) p  ?                                }  }' E) k/ w" l' S- A) a
                                while(button1==0)
& ]  ~! [2 g  |4 F* n+ y# `                                {
2 t6 {0 I2 ~& h& I* H1 u# j                                }. K' a& v% C/ e% l  _$ G2 I% y
6 z- m7 Y3 w$ \
; g. S- e) r/ Q% O% j

- s( X- W- y# R( X1 p

; m" c8 M! S2 X+ j+ Z6 V8 J3 a                   }
. m/ N0 I5 h2 ]: E! S' l& o, E4 F
  Z5 P# X; o  g- l. g  O

2 `7 B- Z2 [) m                }; a2 R6 N& o& o. u- I8 a* K" S/ S
" g4 P+ D" M8 Z. q! V$ n4 P6 H
! Q$ P# \4 A1 [+ g, y

1 {4 \" k- ?" Q
4 T1 k- s6 B/ e7 D/ }2 U8 c, H

+ ~, q. M# O! [* m4 X
" Z# \+ A' O& L* P; o; a; y
         }
# p# Q3 j/ G, F1 _- g! f}9 P' ~) `' Z1 e/ b* j% F
: [. i& V7 R6 }( e
- s7 s* [/ n# W
+ V4 w' {3 L+ l

) o+ _$ y5 G6 r6 e2 k( Z/* 配置并启动T0,ms-T0定时时间 */' M* U- ]2 [1 i) e: p
void ConfigTimer0(unsigned int ms)
  R* A# \+ x3 C- F  e+ U' m3 w{  j) f( j7 P4 S7 m$ F! I
    unsigned long tmp;  //临时变量  f% L! L9 I; E" v$ W1 {
   
# ?+ l8 r. C* R1 O5 F+ D; a3 Y0 n    tmp = 11059200 / 12;      //定时器计数频率
4 F; ~/ h0 f, f7 Z/ y0 X* l7 i4 a    tmp = (tmp * ms) / 1000;  //计算所需的计数值
6 w' o" N* g* V' W    tmp = 65536 - tmp;        //计算定时器重载值3 R( Q) n! O- E1 d
    tmp = tmp + 12;           //补偿中断响应延时造成的误差$ G. L+ A1 y5 ]' a4 X% `" |+ R9 }" D
    T0RH = (unsigned char)(tmp>>8);  //定时器重载值拆分为高低字节
" E! ]' B7 Q& x$ G' ^1 m    T0RL = (unsigned char)tmp;2 y% Z) A' U  F# {6 e
    TMOD &= 0xF0;   //清零T0的控制位
2 _4 Z( l4 J5 H5 y! q    TMOD |= 0x01;   //配置T0为模式10 _+ P" ]/ p& Y" b$ p  @
    TH0 = T0RH;     //加载T0重载值7 a9 ]) R0 s4 Y. S
    TL0 = T0RL;- h" H$ A( w7 \% |9 _) ?
    ET0 = 1;        //使能T0中断
8 ~; L3 a& H: x3 h# t3 n: w. X    TR0 = 1;        //启动T0! A( g3 f4 H6 t) l0 K1 p- b- b2 n
}6 x* O: k% Y, f( f) F3 M; [, W* X( t
/* T0中断服务函数,完成1秒定时 */
8 N0 f4 F' r7 q" z5 ?& Avoid InterruptTimer0() interrupt 1
$ y* K- \& c0 F3 G{
/ K( x+ Y/ m# r
* z1 I/ x; G( K- w$ t7 H0 F
* @7 d4 z# X# d! d! G, p. S  \% W7 m
    TH0 = T0RH;  //重新加载重载值: z3 Z/ k$ Z/ k. P% g5 S
    TL0 = T0RL;" T7 r2 Z" C  p
    tmr1s++;) [1 b& }6 x$ N, N! L
        sdd++;
! F) x8 b$ y) _+ ~7 u  W* ~- ~        tmr10ms++;7 t" G! k) ?* \) }  e  w
: x$ l! V7 F6 }: u: V

% s( _) D7 q) o- f& ~* S! G        if(tmr10ms>=1)           //  数码管刷新频率
  L' j3 @) U+ C/ e+ m0 c7 Z        {  f) G4 t" n) _$ V
                  tmr10ms=0;
- ^. b# d8 _- Q2 K5 `                flag10ms = 1;
8 J3 F* ^8 p& T: t4 c        }
* S" e6 N9 [1 k, i4 n        if(td==1)
' d/ s5 m$ T3 }8 x, }        {( Z0 y3 y, s* `+ X0 a
          if(sdd>=500)           //温度显示5s        、湿度显示5s
, i: U. o9 l0 m  e          {
  C1 ]+ b7 s! t4 @7 H8 w/ i# U% I             sdd=0;
" b- `8 s; G" d7 X3 u& R* {9 U+ c             if(st==0)
# A8 E# A( l2 y" k             {
, I" G9 T8 Y/ {& |& O               st=1;
: J& ?5 C! y  l# k3 c# R8 i. A                 }
. Z6 r8 }9 W; p* @- z( n                 else st=0;1 m9 U/ }* \. }! T2 O
          }
: y) ?7 d( @' Z        }- f. ]9 K6 o* n1 r
    if (tmr1s >= 200)  //1s 数据更新频率
( y& ?/ `+ w; T2 H/ B% J    {  f, q8 M( R& K' S
        tmr1s = 0;
2 ^5 d2 F6 W/ N; T- a7 p        flag1s = 1;
4 Z! T6 ?' S! e: M0 o" b        }# p+ ]7 H  ?+ C+ g& M/ f
1 v) {% t) ^) `

0 V/ I/ q3 o! k* J- y  k) i! c   
" b; E: M; o  o4 U& w}0 d- l4 v$ \5 R$ |) s
+ {/ n5 H' H4 ^3 }' ]
3 X# |' i- p2 G% |5 l
下载:! f* `8 A; F8 W$ K7 }0 w7 C6 n
游客,如果您要查看本帖隐藏内容请回复

) k! T, Y, O. z" `  M6 i
: p4 C2 q" I: n' q: j

该用户从未签到

推荐
发表于 2020-6-28 22:55 | 只看该作者
&#129310;&#129310;&#129310;&#129310;+ I4 j% t. O+ H" ]3 j) j

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

“来自电巢APP”

该用户从未签到

11#
发表于 2020-3-7 11:55 | 只看该作者
谢谢楼主分享
7 ]$ }; d- S  q& w8 f

该用户从未签到

12#
发表于 2020-4-20 22:21 | 只看该作者
11111111111' i/ t  s) l) ], f% Y/ U! j

该用户从未签到

13#
发表于 2020-5-8 14:47 | 只看该作者
收藏了啦啦啦啦啦
. _5 p. X9 X0 A) @* ?" Z) G* X. \8 D! a6 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-10-13 00:34 , Processed in 0.171875 second(s), 28 queries , Gzip On.

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

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

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