EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
智能风扇调速系统 总体设计框图 系统电路设计总体设计方框图所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用2位LED数码管以串口传送数据实现温度显示。 总体设计方框图 主控制器 单片机AT89S52具有低电压供电和体积小等特点,四个端就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。 状态显示 显示风扇调速系统处于的工作状态,状态有三种分别是 低速状态、中速状态和高速状态,此系统以发光二极管指示作演示。 LED显示 本系统共使用的三个共阳极七段数码管分别显示,当前的温度和设定定时的倒计时时间。温度以标准摄氏度为单位。时间以分钟为单位。数码管采用单片机P0口并行数据输出,P2口数据扫描控制显示,三极管8550做数码管的驱动。 键盘控制 有一组键盘控制倒计时温度的设定加与减。另一组控制系统处于的三种状态,分别对应的是低速状态、中速状态和高速状态,此系统以发光二极管指示作演示。还有一个开关按键是控制系统是处于自动状态和手动状态的开关。 温度传感器 DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下: ●独特的单线接口仅需要一个端口引脚进行通信; ●多个DS18B20可以并联在惟一的三线上,实现多点组网功能; ●无须外部器件; ●可通过数据线供电,电压范围为3.0~5.5V; ●零待机功耗; ●温度以9或12位数字; ●用户可定义报警设置; ●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; ●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; 系统复位 系统单片机采用的是上电复位,当复位键按下时,系统会变为,开始的初始状态。 时钟振荡 系统单片机使用的是外部时钟振荡,振荡频率为标准的11.0592MHZ。
- p, Q$ S0 d7 t* r# y: x2 \" c![]() ![]() ![]() ![]() ![]() ![]()
9 I' m! o) t0 |( [' T
| | | | | & C3 m$ s. q3 \
| | | | |
3 a7 z: \6 A3 P a* W/ c4 z: r0 q( A | | | | |
7 {8 q5 s. g' c2 }/ `, N t8 N! V | | | |
$ Y, f8 Y, H. H" F) v5 v | ; Z S6 M E* S6 a9 m! |
| | | | 4 S& K. y- w3 p0 u: G+ j( n' O
|
+ r$ k r: _3 V5 A; g | | | | , P% E+ M4 I" ~+ d: `
| 8 B0 w- y/ u5 }. x2 ~
| | | | 4 f$ c$ z+ |. P+ o3 a; F
| 2 `# }$ t8 F+ K1 @, N! x, F: }
| | | | 0 D. w7 c, w% u/ Y3 C, u
|
7 T0 ~4 j8 H0 U& J+ b" W5 B* U | | | | * P, ?+ y* L7 I$ a" M
|
0 h/ P! v( c9 ?5 f+ W H3 q: B | | | | | | 8 G, A" F$ Y ~9 D% ?" e6 o
| | | | |
% A- W3 W0 V6 `& _8 L2 O | | | | |
" ^8 H: l2 ]4 i# j9 k$ X | | | | | ; _: ~# P& F+ ]$ |1 k" ?: F' k
| | | | |
- z3 f. u! ]. X | | | | | 9 z& }, c& i4 L
| | | | |
2 c" y0 u6 e" v% T' X+ w: c | | | | | 8 C g8 ]3 F& f
| | | |
* G( C8 Q; Z- H$ U | ' y( E0 e* u5 u e7 A( j" Z
|
2 ^$ h! a& |8 @( \& B元件清单 | | | | | | | | |
: a4 E# i+ r1 I# } | | | |
k9 z* ]; A& i0 { |
! B6 ]" v& b2 z A+ N4 t | | | | | 7 w0 L! `' j' p$ P: Y
| | |
% ^. `0 c& U; h# W) S( P | |
1 x1 q3 }0 z; O- @4 U! E# L0 { | | | | f8 G& S7 e; k' Z; @+ y8 l
|
3 B: I& Y1 j' N ^; H. B6 h | | | | , ^9 F: \- ?& ?3 C8 K" u8 h% B
|
i0 G# k' ~$ u& u v' \4 m! ~ | | | | P4 ^" n" v& n9 ?/ Q7 H# z
| 5 A: A6 h) E0 }) X5 H- `) v' a
| | | | - z3 e$ A7 @5 R. s ]
|
1 [( d" W" g) u0 f | | | | |
! f" v1 g8 {! U | | | | | 6 m$ S ~0 v; O, V
| | | | | ) X1 A7 Y) w& m4 ^7 q" l9 b: R2 Y
| | | | | " ~7 x" N) U+ c6 q( z
| | | | | & H! q& P. s% F# b2 o
| | | | | | | | | | | | | | | | | | | | | | | | | | | | |
5 z7 K7 y; x* C1 D; P. G# v | 8 Y1 ?/ |2 H* i1 Y( \
| | | | | ' O1 n8 N& R# K) U5 ~4 ?# N$ \
| | | |
3 G P s+ |* b! F. ~5 |' l | $ L8 Z7 d( g- `% _
| | | | 6 G/ a* d+ {: W/ i- c5 A
| 4 p" i* D. u1 |. t
| | | | | 0 a$ u* A( V& f$ V' {- f
| | | | | * e) z; Q8 I/ g1 a
| | | / h0 r9 K: Y' w1 C0 z' u
| 1 e0 C6 G; K' f& b+ d" s3 k7 t
| 3 H% _( D5 O: k% k
| | |
+ @: e: S* e; P% S6 Q# f1 m0 \" f; | | # N) w0 E# \) Z7 G: J. i& J
| 1 [8 y/ i# C' _ }# {7 i' M0 I3 m
|
6 f9 b0 O2 e! w: n |
- U! D+ l9 z6 m6 F6 c/ h9 n | b$ D+ l8 s5 |. v3 W! u
| * x) M+ q$ C6 e* }9 n. I
| : g; Q# i [5 T
|
2 b; A9 X3 ^/ e4 f; V) b1 i+ M K6 `6 h |
# N( c$ m; ~+ ~( k% Z- a( c |
: J3 g& r- n' C/ j9 h! V# O* p G |
M$ i1 R( m# w4 f; E3 ? |
, b8 @, @ _' l. r- @4 }$ g3 I$ v | 8 I! D8 E% a5 `: b
|
" `% ]7 s5 d: y1 | | 5 C/ m% a! w B3 Y
| * K$ T7 H. t. S
| ' b0 b* Q" c( c2 w3 N) A) u
|
1 g' _1 y5 Y( d8 x* i. U1 X |
0 Q+ d3 c) v `/ m7 \, Z }' b1 Q+ F |
4 ^/ t* Y$ D- }. |; }% _5 U0 i | : V$ K g- i$ D) v4 f" f, I1 f
| ; A, ]5 L$ E4 H8 O
|
* ]( R% Z4 v' O! t3 u% C' g! R) } |
5 T$ h! Q; {' r* A | # \; y4 w' M9 f Y- _
|
5 f6 X6 K% | K+ E" o. X) K |
. i8 G7 q1 s V$ G' P; w; m |
7 m$ o B% {# c" M. N3 r# | |
7 c5 }( @& l J% _% L/ U$ z+ w. p | ?4 j4 {! n0 ]0 U. i' ?
| 4 [% E4 m3 m$ k5 y: t2 m
| 5 I/ F f! ~* A- |3 Y
|
风扇调速系统使用说明书 - 接通交流220伏电源,电源指示灯亮。
- 按下启动电源开关,系统开始运行。
- 当手动/自动按键弹起时,为手动状态,温度显示为当前温度,时间显示为零,加,减键不起作用。
- 分别按下,低速至高速按键,相应的指示灯亮。
- 当手动/自动按键按下时,为自动状态,温度显示为当前温度,时间显示为零,加,减键起作用。每次加1或减1 。系统处于倒计时状态。
- 分别按下,低速至高速按键,相应的指示灯亮。
- 当系统处于自动状态时,如果温度大于30度,低速灯自动点亮。如果温度大于32度,中速灯自动点亮。如果温度大于34度,高速灯自动点亮。
n6 C4 P$ A* P) Z3 }% V6 o
x. B% T! r" Y' Z: {altium Designer画的原理图如下:(51hei附件中可下载工程文件). y- }) @% {7 A* D
a* F, k1 B5 d
; r4 ]! N0 f8 M5 t. j, k风扇调速最终程序:(部分代码200行)
( N0 F& P! `" B& M4 {0 v! S6 |. G
, Z7 B) U8 y1 y* y9 ]- L #include* y2 X. O. v, _0 t8 s; Y
code unsigned char seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,
$ J' Q$ {' [2 C* u8 Y# v 0x82,0xf8,0x80,0x90,0x40}; //显示段码
: `$ Y/ v) J3 c' y J8 A% U
7 H# H! A$ b6 ~$ B; Q$ n1 U$ L sbit TMDAT =P3^1; //DS18B20 的数据输入/输出脚DQ,根据情况设定
- \# v" Y7 p4 D; _ n5 [, Q2 N. P5 i1 Z. H- Q6 a& z
sbit P2_7=P2^7;+ a! A: l4 H8 p
sbit P2_6=P2^6;
+ _ [7 u* ^- |$ `: y) a sbit P2_5=P2^5;
' q9 O! z; ~2 _: q
& o& K/ ^) A: C- z sbit jia=P2^4;5 K9 ^9 R2 a: x# J( V1 ?3 G% V
sbit jian=P2^3;) o) @/ P5 ]: ^- I3 s' \, l4 n
sbit di=P2^2;# O b. \( g: {5 X
sbit zh=P2^1;% w% N' x/ q) D! q9 l7 P
sbit ga=P2^0;
+ i: c' g- Z# d: N6 w. [# i# [% @8 d; M) S3 X2 Z
unsigned int z=0;
1 L( Q. J% G+ r, Z( H; k' P2 L sbit q=P1^7;
% b! [& O' E; i! i0 A @ ) T% l, L# I! S( ^6 o# v0 z
unsigned int sdata;//测量到的温度的整数部分; B0 G: z4 k. o( D' R
//unsigned char xiaoshu1;//小数第一位( X5 T* p# S( a, J! _3 l( `
//unsigned char xiaoshu2;//小数第二位. ^" F$ v5 |- |1 [) W
//unsigned char xiaoshu;//两位小数
( A' j. g- A1 V8 E$ |
7 G1 h9 _, d6 i' \3 d bit fg=1; //温度正负标志$ ?6 I5 g% b( S: K5 y
. _3 v- S( c$ f6 \ //////////*显示延时程序*///////////////
9 b9 R% ~/ S$ |+ Y& A, g5 v6 `# x# S8 b
void Delay(unsigned int tc)
$ f0 H+ v9 Y2 K$ E {while( tc != 0 )
" R* P! T# I0 ~5 J5 o {unsigned int i;* H; i7 n, H2 e
for(i=0; i<80; i++);4 e2 ?9 R8 W* [
tc--;}
. v; ~3 W) h. ^9 \/ G0 w }
* B7 w2 ?6 e* i: o' K9 v7 x# @3 d8 }0 t, ~8 R, Q. U
////////////延时部分///////////////: Q4 C( G4 ]0 ]' z
! a; A! E! e' M9 V: G$ k2 o
void yanshi (unsigned int count)
3 N F+ D! M/ S {9 s& L- o$ V/ y" x; k' A
unsigned char i;
) b- V% t: u1 b8 N; z _ while(count--)' r/ T) K5 J# r
{for(i=0;i<115;i++);}
* o. M0 K, p! C }
% s3 l P! q! ]: u
! q3 y% t* x r3 v8 l
. q" t* ^$ S5 g! N9 w /////////////发送复位///////////////; n2 n' K9 a! P3 `" f) C! Q0 F3 {' @
% U& ?( j M, w. H$ z, x" r void fashong (void)
4 \1 Q! v% |, h9 i8 o {
2 J* R k7 l- I1 j7 a8 e$ z& O5 q4 v unsigned char i;
& N0 ?+ Y; a( k. p TMDAT = 0; for(i=0;i<103;i++);
& i+ d+ E$ Z Y, ?( m3 P TMDAT = 1; for(i=0;i<4;i++);; l+ T/ r7 o. M. S
}1 V) s: S# O( N- } ` j: V
3 }7 j D2 W" x$ H$ @) j* q/ Q' ?7 O' Z' `
bit tmrbit (void) //读一位//; o( @, m/ p W% d. s
{
$ K2 Y7 M {, D8 {, O' M9 y3 ? unsigned int i;; p1 T `' y& c! G6 [' m, V
bit dat;
& k4 C- P, D/ \6 ?8 i9 K TMDAT = 0;
' f- W {" N$ i" t i++;
0 A5 D* A( \5 K7 ]7 z TMDAT = 1;# J: e" `; k& s& ~
i++; i++; //微量延时 //, _3 @ r. s9 @1 O" |: Y; z4 a
dat = TMDAT;" K6 E; a- l6 j: m& s$ l
for(i=0;i<8;i++);
7 u; K( c' m6 D/ G return (dat);
% N! l; s2 F; J3 _$ I$ q8 U. i }0 C4 ], W5 @& J# V( W G
& T( k* O; d7 g3 ?" ?/ {8 G3 S' e
unsigned char tmrbyte (void) //读一个字节7 g3 m3 A) L& @: g) r. y
{
( i: b) P$ d! R8 f7 ~, g. ?6 Z unsigned char i,j,dat;. l6 T. k2 z: t( {0 P
dat = 0;
& T8 t; Q* @6 Q# y- N/ _2 z for (i=1;i<=8;i++)5 C, m; h4 W( ~: B6 e$ g; ]1 |
{ j = tmrbit(); dat = (j << 7) | (dat >> 1); }$ P/ m: e4 i0 i& O' l: K
return (dat);
, Z; k+ D: f) u z) T+ x+ @ }/ x+ Y- A* c4 |/ M2 h7 h
2 r1 Z, F. v6 s- q! k1 p
void tmwbyte (unsigned char dat) //写一个字节. g6 t% o. y7 L3 r9 `8 K
{
1 B2 M8 i0 X6 W unsigned char j,i;6 X) L: l( S4 _5 u& E
bit testb;
* _ K" f1 H6 G) S- \7 I/ q ]5 O for (j=1;j<=8;j++)
t0 F+ v; t- g3 o# g+ z. f { testb = dat & 0x01;9 I3 ?& q& P1 J- u. W) ?# ?2 Q
dat = dat >> 1;
3 y1 N4 N! p2 S( i# @# ? if (testb)+ i% |( f" [# Q/ @
{ TMDAT = 0; //写0
1 A$ z) x0 ~3 `8 n* ] e. { i++; i++;5 J, r. {# o& U
TMDAT = 1;+ A* j% g4 t9 X/ A; X0 j
for(i=0;i<8;i++); }
U2 s# w& q& b$ I/ n else0 L5 ^/ q& v! |( F5 _
{ TMDAT = 0; //写0+ }2 \1 {. A5 w# C _- G
for(i=0;i<8;i++);/ c; P- {5 D0 O* a: r9 Q! ]
TMDAT = 1;3 N8 n+ t( d. X) v4 a
i++; i++;}1 `9 r6 ]) t" \" ?2 @6 m: `" L
}
7 o+ l2 G/ @- ]& [9 t2 s* q3 u }* j5 y. e7 F. P( l" r. ?; N+ ~
0 Y* A- y9 N3 f! G4 I" K+ T% Z. K void tmstart (void) //发送ds1820 开始转换2 j) s: U3 |7 x$ {- i8 g# m
{% m p7 W- n" S% B. i
fashong(); //复位
! h. l/ I$ O' t, H+ y1 b yanshi(1); //延时
& q; u8 {4 E4 i; l* h tmwbyte(0xcc); //跳过序列号命令
$ X( {: O) f& H. i tmwbyte(0x44); //发转换命令 44H,# h" Y. D1 J2 ^! i& R# g3 I
}
: p) P& u, m) o) ?/ s( c# F8 N- V& Y# T void tmrtemp (void) //读取温度
7 P& s6 @$ n# a/ K {
5 y/ }2 t; E6 r$ E8 V5 e4 k unsigned char a,b;3 R0 W9 F! C9 q
fashong (); //复位
5 i5 L2 O( ^6 V+ S! E yanshi (1); //延时
; a, p8 H9 s% h tmwbyte (0xcc); //跳过序列号命令/ W* j. L* x c: r- p- S) Y& u4 P
tmwbyte (0xbe); //发送读取命令
) A' Q, H. S( r) e$ g; s; S a = tmrbyte (); //读取低位温度
8 r- ]0 z7 Z; ~1 Y; J+ l: ] b = tmrbyte (); //读取高位温度. A9 [& i+ g9 T& |
if(b>0x7f) //最高位为1 时温度是负* s2 N$ x/ l' {. X2 |
{a=~a; b=~b+1; //补码转换,取反加一
( ]) Q; F, O: U9 B6 C% n fg=0; //读取温度为负时fg=0
. h/ l* D% ~7 h4 w! b+ W1 I+ U* D) u }0 i( E c3 y/ s
sdata = a/16+b*16; //整数部分
) _4 D! G( K' T9 U8 p5 Q //xiaoshu1 = (a&0x0f)*10/16; //小数第一位
% r$ ?0 M! b; O+ s" L L: p //xiaoshu2 = (a&0x0f)*100/16%10;//小数
$ a4 q; ?* X0 y3 \& c //xiaoshu=xiaoshu1*10+xiaoshu2; //小数
# A0 ^( A! l. S% U: ` }
8 H1 z/ G# b6 B, m' S void DS18B20PRO(void)
' w, X: A- r% \1 w: a% Z {
; x4 |, F6 u6 ]4 w9 [ tmstart();
: y7 P/ [3 X% P# A //yanshi(5); //如果是不断地读取的话可以不延
; M: @) M! M3 o6 b- e8 B% L tmrtemp(); //读取温度,执行完毕温度将存于( H* ?; u9 P5 q) k) w: d
}0 z6 j7 w2 ~- j1 G- ?7 P0 q
void Led()
1 ]) |2 ^( | x7 R {
" p& H/ r! ~% @ l$ l$ }) L if(fg==1) //温度为正时显示的数据
& w* M. _% n# u! ]* @4 z {
. Y0 G# s' Z/ @! C. g+ u3 Q8 @ P2_7=0;: q& L! r! r- n6 @5 j
P0=seg7code[sdata/10]; //输出十位
% J4 A7 d4 ^5 w. b Delay(8); P2=P2|0xf0;
4 u. U9 H$ C- U
* w5 U9 _, }$ X1 X* C2 U P2_6=0;
* H! t& Y* M* Q, V, N P0=seg7code[sdata%10]|0x80; //输出个位
0 Z. l* `4 {: z4 e2 V Delay(8); P2=P2|0xf0;
, F" f* s# E! o: E a" Q0 ?; c1 j1 t) Y m
P2_5=0;: Y% p1 w+ h& m6 y" n( Z% K+ A' L
P0=seg7code[z%10]|0x80; //输出延时位 4 \( e, V+ `3 h& [4 Z( ^
Delay(4); P2=P2|0xf0;
7 e9 A3 k" t' K! W0 w S$ t2 T3 U* @0 O
if(sdata>30)
$ m! P- @- K" w! b {P1=0xfe;}* o% e! |9 f& A- u% z9 u4 W
if(sdata>32)
2 }3 s6 [2 f5 J \ {P1=0xfd;}6 p) n( d- [) B0 @& j. J" N
if(sdata>34)6 T' y( _: }& N% A U# E* s: ~
{P1=0xfb;}- `. |5 K' G, S u& J
' d& A, B _4 q% N
}0 x8 X" S" j, \
}7 H ?4 I+ [0 }- ^2 V
6 @. G0 ?3 i1 M; s# A% r% l. ^ void buzidong()
+ M& \0 e* G9 l/ ]: X( h3 W0 m {# U0 S& r4 d1 B+ i0 x$ q; ]
7 C/ _* N( Q% V' z# R void DS18B20PRO();* \* @( \7 e( p* z% ]
void Led();3 j6 S0 {* d8 z( b& Y
3 f' N: {, Y. G2 J: p
DS18B20PRO();9 Q) s7 q& C% J# i8 d
Led();
0 M6 j9 M: n/ ?, R- R0 ]& ] if(di==0)
0 ?) ^1 A! Q" x3 N# i {Delay(200) 1=0xfe;}& I9 j$ L) s; O' {
if(zh==0)
+ O5 o/ E3 V) c& n0 J& h l: C5 K/ H: l {Delay(200) 1=0xfd;}; M- [$ }8 |; n8 m) F" ?4 L
if(ga==0): g7 a4 \! O6 ]0 {, Y8 s P: w
{Delay(200) 1=0xfb;}6 |4 [2 `/ U, ^9 r$ D
6 Y- r& j8 o% M( s6 R) p
}
3 E- Z6 x& t* U1 e void zidong()
' T2 I5 P4 I: [7 Q& T {" |8 g/ A- P1 _! H1 ^6 y
while(z--)
' {- G+ z' X& K4 E9 \6 n/ ]1 h {8 |$ ]' V, `* _
void DS18B20PRO();
4 Q$ Z' j% I! L% N( S- l! z: k void Led();; `* T1 X; N* d5 v( ^
; B& B3 F3 r* g, x- a unsigned char i,k;
. Z4 `) ^6 g0 Y- \ //for(y=30;y>0;y--)* F% E( i5 d l; c! [5 X# y7 F8 i( G
for(i=12;i>0;i--)
5 e$ F3 F1 f- E6 d! Y$ D" ^ //for(j=80;j>0;j--)
% e' u/ ~/ t/ v, b d3 p6 S for(k=248;k>0;k--)
( l' T6 X5 z- ]8 F8 d1 K+ A( D {
; @9 [* C. x I( P% N% C$ X if(jia==0)9 A9 l6 V) H3 m/ V) q, c( T& \
{Delay(200);z++;}
& O" i8 w" o( f9 [ if(jian==0)& {4 r; A: {$ n, ~) Y
{Delay(200);z--;}2 ?0 k3 p# O: l, }7 `7 p
4 e7 i% y3 O6 J8 T DS18B20PRO();
) R/ }8 C6 k# @5 Q Led();. H7 Z' u2 T j. q0 c( b7 ?
if(di==0)
7 y$ Q5 }& L6 J$ k' u: o0 r {Delay(200);P1=0xfe;}
& k9 }# U; m/ A% t& p if(zh==0)& ?2 V! q7 ?% L/ e7 ~( q
{Delay(200);P1=0xfd;}* x( m0 g' A5 Q. [& T$ q
if(ga==0)
' i$ o( ?9 C" }4 q3 C6 ~ {Delay(200);P1=0xfb;}. m8 F: L2 R @0 ^$ z
5 V; h+ M$ A% n) K /*6 ~# W3 O& k8 H; X
if((di==0)||(sdata>30))
! K, Y' ]/ c% d {Delay(200);P1=0xfe;}
# F1 x2 B3 X3 s& f( f- z) O& P9 U. t
! p7 {! ^( s' C( f5 B4 ^% ]! p
|