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

单片机ds18b20温度检测电路仿真设计 带源码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-12-26 07:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
单片机ds18b20温度检测电路仿真设计 带源码% e! \2 Q0 B& g

1 g2 o8 R5 k* y( I$ a; Z" Q
* j2 c6 R. }! P- Y1 I
分享一个ds18b20传感器检测环境温度,数码管显示并且超过一定温度蜂鸣器蜂鸣报警,下面是部分电路仿真图。
* f, n. x. O: f- P3 q* l& ]: b2 Z0 l- @4 k5 r3 s
* ]& T" P$ [( M/ Y0 e4 U
4 X7 {( ~8 }9 K& c" y& q. H
6 ]5 K; G! g$ u' E3 h* U
51单片机源程序:
% ?% R; b! p, e+ `( y' u3 ~

% f4 v( a# X+ ^3 W6 Z/ C/ q. w5 a4 }# T/ O6 I8 }& M
2 X! X- l! h- ~+ b; T- K0 b0 ]
#include <reg52.h>( h  C( i" r* V) T
#define uchar unsigned char- g; {; T' I9 P$ @( a9 t) [
#define uint unsigned int
5 }2 i. T- |4 ?2 c1 W3 Psbit DS=P2^2;           //define inteRFace; M& E2 P* X$ Q- N7 x
uint temp;             // variable of temperature" Y3 ]; w7 B# Q/ [% c
uchar flag1;            // sign of the result positive or negative
2 r2 S$ E5 b$ B: u/ g' bsbit wela1=P2^4;                //段选信号的锁存器控制
& C; Y9 @8 U( L& M4 l5 R( L/ K- y' dsbit wela2=P2^5;7 h$ A: f- f0 H/ r8 |
sbit wela3=P2^6;                //段选信号的锁存器控制1 G1 m- `, R8 A; K# G: ?
sbit wela4=P2^7;                //位选信号的锁存器控制
( Z7 d6 |/ i$ C; b2 \; A# O: [$ ?7 esbit beep=P2^3;9 y. m3 j3 ]3 |( {  v, k9 h
unsigned char code table[]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
& E3 x- a# ?, o9 @                        0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};* p% X- I- P' }4 N: Y4 N" y
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
0 X! S  I& L, J: F! t/ Y. A                        0x87,0xff,0xef};0 V9 v  n6 _4 J" j' X; I5 ]. j

. B* n# R3 X9 \8 pvoid delay(uint count)      //delay6 [' e" X' A/ p! B
{+ Z/ y$ e# @% ^! o1 t
  uint i;3 u, y' R8 p2 T9 ~( K+ e% T
  while(count)) a* Z9 C( @$ l7 ]  d
  {
0 S" L# D4 Z# Q; @    i=200;
% h. R/ T1 J3 h$ z" I    while(i>0)
( ?/ S+ p; {4 i, \1 i    i--;
. {  k. E7 H+ O* m, d    count--;1 J% ]- J" \: l1 V  q
  }
+ ^5 W+ g: s2 b4 p5 ~3 F& {}
1 s! c+ b7 N  Lvoid dsreset(void)       //send reset and initialization command% V: \# X& y/ q; \9 a
{
# f  w- j9 m9 R+ W& P  uint i;4 z3 N2 c% e% U+ X6 ]
  DS=0;: {8 e5 ?( h9 L) `+ B
  i=103;
0 t' {4 O5 u$ R" a  while(i>0)i--;9 f0 O& ~9 `/ [' n. C
  DS=1;! u+ ~' B: ]* g
  i=4;
6 J2 ^0 s4 k% u/ E% i1 v  while(i>0)i--;
, S- ?7 w8 Q, _; T/ G}$ u) a2 ?2 @4 m. W; h

2 L) F$ |. W- s7 W; G  tbit tmpreadbit(void)       //read a bit% i: Q# r- O$ B0 Q% q( I
{) l$ p* u2 `( Y7 I0 R0 o
   uint i;) A/ N( T1 i/ G& e. V. X/ ^
   bit dat;
6 m9 u/ Q, h/ \& p+ B   DS=0;i++;          //i++ for delay- j1 K9 `& s* z8 b& K8 ^
   DS=1;i++;i++;
* }' q) _8 u! m* X( N2 A4 \   dat=DS;
. l- L+ {1 w$ U- K& b$ q   i=8;while(i>0)i--;
8 C. S. e) H1 y+ Q& S( S   return (dat);
9 i# X) a* p6 x; `}+ g9 E; B1 ~( |! I! n
, S; q$ v1 Z9 L
uchar tmpread(void)   //read a byte date  Q, j  H# f: b1 r9 G3 u; Z
{; |6 W2 y  L3 F
  uchar i,j,dat;" ?( y. q/ {: G3 ~
  dat=0;
9 t& \- \0 a( |* x  for(i=1;i<=8;i++)
. Q9 `, s9 G; h% }' M1 d. \! s  {
9 M; S# L) k9 Z    j=tmpreadbit();3 E/ @, M  L2 I+ ]' a$ P! |
    dat=(j<<7)|(dat>>1);   //读出的数据最低位在最前面,这样刚好一个字节在DAT里: }0 @1 o# @6 s: C
  }- ]9 p6 ~) z$ c% W) `' E
  return(dat);
! k6 s5 G. O7 S9 ?& l' M}) p; r+ q. p7 }3 z0 N* {
/ K" l1 Q: Y+ l" L! R9 H! N
void tmpwritebyte(uchar dat)   //write a byte to ds18b201 Z5 i3 D+ e% N
{# W% A8 q  f6 B5 C
  uint i;
8 b3 V/ x7 a: [* ?  uchar j;
4 ?! \1 o+ W1 N( M% |/ W  bit testb;# D/ T% Q1 e" q4 y8 _
  for(j=1;j<=8;j++)6 ], r3 E! z0 o- [
  {
+ r0 H+ Q( T7 A* l: `5 e    testb=dat&0x01;5 ]  x- m5 ]7 |8 \3 r6 A
    dat=dat>>1;+ r. f! G+ M8 m2 m- A) E; t6 {
    if(testb)     //write 12 t+ f3 N0 Y; w6 `  J! I7 K1 j
    {
8 E/ V+ r" o9 k7 B2 `      DS=0;
3 `3 D" M. z. j# Z( k% N4 k( H, a" ^      i++;i++;( }/ C8 P* E+ o* k
      DS=1;3 O4 c7 R, n$ `% a. K9 l7 D
      i=8;while(i>0)i--;, _+ S0 ~5 r6 x, N# R+ q
    }& ]7 Y" O/ }/ _2 u- e( W6 x6 d9 F
    else
% W- s/ n9 C* h" N    {
- b5 D: w- n4 f3 ]; ^9 e$ A8 x      DS=0;       //write 0
% j1 f! o& r" D% m0 K      i=8;while(i>0)i--;3 N1 n8 f, ^, N8 D, _, S
      DS=1;% T% Q; R/ O; {! [* N3 c
      i++;i++;* P; y- E6 G0 p7 c# o
    }
2 z! ?( l  S: N* z* D9 n3 }3 T2 w5 E' F+ t  a6 h) r
  }
# z5 A5 g/ M! H. L5 A( B8 O) b0 t- @}7 w" C4 K$ e3 F: F3 M
6 h& f/ h9 H- y. o
void tmpchange(void)  //DS18B20 begin change9 y. j/ j5 @% U  y, M7 ?/ z
{1 b6 \2 j5 W" f& u" |) G7 P
  dsreset();% Q* M1 W' T- {" ]/ [
  delay(1);7 n# G2 o" y2 L6 Y; C
  tmpwritebyte(0xcc);  // address all drivers on bus. x/ ?- j2 `# M* a  K7 q! a
  tmpwritebyte(0x44);  //  initiates a single temperature conversion- Y" I$ s$ J; |; B' o# g; v
}
+ {# k8 p" E2 x4 L$ p  i
* }6 R, v. I4 R& y# L" f+ j6 Yuint tmp()               //get the temperature
6 }  m4 L% w" }! k{  }+ C4 ^/ B0 |
  float tt;/ q! z, U) N+ |& F2 G
  uchar a,b;  _( R5 |) C3 N& M- H4 R" ?
  dsreset();& C/ G7 |5 k5 B- i# l1 P( I. [
  delay(1);4 e3 e6 Y" P+ r7 l, j
  tmpwritebyte(0xcc);1 E) U1 N( a' Q7 C) m
  tmpwritebyte(0xbe);+ ~5 L1 q7 ?, u! j# N6 [4 |
  a=tmpread();" Z; {* Y( ?8 `8 T
  b=tmpread();) V  R  {* N$ \( r
  temp=b;
1 a% [% C6 X) U  temp<<=8;             //two byte  compose a int variable
$ N, `5 ~: Q- p( Q4 U  temp=temp|a;; b& R6 K, v, r# Y% H7 N4 p% h
  tt=temp*0.0625;5 c  G* M7 z" ?( J
  temp=tt*10+0.5;
4 C' s% N' X% y. H4 r8 a  return temp;% ]4 Q3 U8 C, [4 J: o. I. H
}
" k! _) k) o- Z% y. x" T' c' v+ t  a) n" H/ u: n' t
void display(uint temp)                        //显示程序
# P% T- s* |- q; b$ ~  Y{
+ R) e$ c2 P. x- z( I% [) Y( r
   uchar A1,A2,A2t,A3;7 ]/ L% G9 N0 P9 X/ _; m  X& Y4 k4 R# Z
   A1=temp/100;
  Q. g" m2 {3 x( q; b: X   A2t=temp%100;
( j, _% T" s9 e5 `8 a; [" q; v. Y/ W, H8 ~
2 H" z  D" o% J5 e
…………限于本文篇幅 余下代码请从论坛下载附件…………9 }9 p) c9 z* I% w+ |' i
游客,如果您要查看本帖隐藏内容请回复
* o2 h, A4 c! P: _1 Q" J) s

, p8 J! u3 U9 U0 I# H

该用户从未签到

4#
发表于 2020-3-7 14:22 | 只看该作者
谢谢分享

“来自电巢APP”

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-5 17:58 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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