|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我想用DA(PWM)来实现一个呼吸灯的效果,没看懂count在代码里起什么作用
' r$ g( E8 @, i
# i3 i0 \; l. c! T- I b/ R#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器9 z- g$ P" ^* ~+ n w
' y2 K$ _" [3 s( o# j; I
typedef unsigned int u16; //对数据类型进行声明定义
- U# ?7 X7 F/ t5 |% ?& N: J) [typedef unsigned char u8;
; w6 U$ G0 F4 _( T2 R: s. S$ ~/ ?7 ^5 {$ A# \" n O( L4 L
//--定义使用的IO口--//& _. j# Y9 V0 g5 c
***it PWM=P2^1;
" Y- A% y$ ^' m8 s- D. d0 A* p- Qbit DIR;% q) b2 H6 J; c3 s
8 _1 e/ }; s% p% S+ ~
//--定义一个全局变量--// 7 m' K6 n# W3 f6 W% J. O' k% B
u16 count,value,timer1;3 ?( N# D5 ^' \8 H, }; B
+ |2 b3 X! G$ h1 N+ o
/*******************************************************************************
" g9 j- r: y$ l( o1 b# G* 函 数 名 : Timer1Init" K& E' U7 _. q) `3 L
* 函数功能 : 定时器1初始化2 e+ d& b4 T. N9 {$ J: a
* 输 入 : 无
8 L% X/ O( [; t7 b7 M, Q" m7 x( Z* 输 出 : 无
2 a/ e+ ^8 W2 G9 ^# E*******************************************************************************/+ s( Q! }) y x2 @" ?9 q( x
void Timer1Init()
" \: N# `# Z' n+ {0 O; m" `{% Y* D3 s) A$ a
TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
" f |" h& z0 M5 l9 e/ T' V9 g- L3 z1 k. }; k( ^" o9 H! z* C
TH1 = 0xFF; ( O& C) Y) X# M( R9 C! {
TL1 = 0xff; //1us
6 m- `2 `5 i. \! V $ H, d5 S7 c0 u" Z
ET1=1;//打开定时器1中断允许
# P2 d/ k& d" C. u! S& V EA=1;//打开总中断3 H. U [7 J- v
TR1=1;//打开定时器 7 l- |4 d3 {1 ]! e3 j3 R: |
}/ ^! e7 _ u' T7 v5 i+ B4 c$ T
/*******************************************************************************
% _. X. F# a3 u S" Q+ G0 ?* 函 数 名 : main1 P0 p$ G! `. V: x" \0 t3 t
* 函数功能 : 主函数8 L0 H* ~8 T- W. u9 y/ g: k
* 输 入 : 无
' d% t0 q8 I, T( G: h7 A. ]# A* 输 出 : 无; S; O$ M3 u* i$ P; Z
*******************************************************************************/# c4 y5 t$ ~: i& _2 g
void main() h4 j6 d7 ^+ Q. M9 O. ~
{
# \* G) r; q5 T6 L+ U# Y& s Timer1Init(); //定时器1初始化
4 X- i9 \1 N. `6 e7 v1 o5 H& c while(1)1 E+ A) P3 f# b& G6 ?" s
{5 G! g+ K3 C0 @6 c0 q6 P% |; x
if(count>100)
~; w+ X+ I R) o; Z { $ i i) w/ s% [! N
count=0;# l5 X0 V- Z% d. R- Y* v
if(DIR==1) //DIR控制增加或减小
4 T* g4 I: ^5 n" \' f. r {+ Z4 S) G# t4 a: j! l& _ i: j, g: f
value++;4 |" q0 F: C, `, A* X- W
} # U0 r9 Y1 d0 o/ C* @6 T9 n, x
if(DIR==0)& \( `5 ^2 b1 T+ S/ q
{
( r3 _& v$ S! m2 O% S0 [, { value--;
) \1 x! ^% ~( R }
; l. A2 C d, P/ j% c5 O: z+ v 5 P; h- a% i2 T( f* L- ~1 [
}2 z! b3 D( U2 y2 k t
& V3 L& j1 n8 x: E( m3 X6 h if(value==1000)
0 {3 M* i' @# Z% Q {
( f1 U; { G3 N4 Z3 y _: t DIR=0;
+ V; ^) L6 U$ C) z2 Q! ~3 U6 n }
9 L6 `: H- q4 [* k if(value==0)
) S; U# I2 D, u# P- i) Q4 j1 a {8 m8 [7 e; W. D9 Q9 Z F
DIR=1;
/ K% o1 Z* t: [2 F2 g$ d' E7 Q- N! q } 9 B, _) i T) \6 ?% [7 ?/ X
l' x' `+ Y- S, p. T3 f& [9 { if(timer1>1000) //PWM周期为1000*1us
M. U. M; u5 O* l9 H4 o( C {- e# N9 i! f# p3 |7 V
timer1=0;; h& x# o% j+ D0 o) p$ X
}
# ^& S2 \& Y# o* p if(timer1
- S- ^! C& l1 Z; f7 z/ j1 u/ j {
! m8 f7 n$ t- a w" q PWM=1;% {) g, Q5 _# D/ P; d! f( Y* e
}
. L% p, K( z- n( }+ W else7 A0 d2 Y5 |* }- u/ F9 Q9 U' |
{
: d: t5 m1 O( R& t2 s( q! T5 H PWM=0;
. K4 q3 l$ `& L7 w+ S4 h }
- q8 Z- Q' R! q7 A! E. O } 0 ]0 Z3 s( j, m5 J) p4 O, ^, F' v
}* c% @7 ]* _7 K. Z
/*******************************************************************************
4 _2 A9 `( q7 L" C" R* 函 数 名 : Time11 L+ p/ r6 t, {* o; i0 {. i
* 函数功能 : 定时器1的中断函数
8 \! Q- {! }6 P+ [+ h7 s* 输 入 : 无
) y* k$ {4 a" d* n* 输 出 : 无
, k% H/ Q L( f& W0 `3 I0 |*******************************************************************************/
, ]$ U7 N; {# c9 W3 Gvoid Time1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断) G f$ v+ p. O* y- ?9 J& S
{
% a% o- R' N7 I& X TH1 = 0xFF; ) K1 H; e3 i! Y! M' R4 g/ E7 P* Y/ d
TL1 = 0xff; //1us2 }! T+ F2 Q0 N
timer1++;
* s3 X* c2 z5 x2 }* U$ ^ count++;2 `9 `. M# k$ Q0 G% K1 Y4 W
}
! |4 Y$ {. y A" [ |
|