|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我想用DA(PWM)来实现一个呼吸灯的效果,没看懂count在代码里起什么作用: N; N+ Y9 U$ S9 {7 h
0 ?! w2 n: V+ _1 F# {( C I( q/ A+ s#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器8 }& X3 Y! O0 W. u) B% e* a, x
+ v3 {" I: r7 a" O" F9 Wtypedef unsigned int u16; //对数据类型进行声明定义$ ?# A, g c. j6 F
typedef unsigned char u8;
. J" `8 L6 f" l9 ^. {+ O) G5 f9 D; R, g: P3 N5 R4 ]
//--定义使用的IO口--//- v8 D% l6 c$ H6 L9 e$ R. Y& p
***it PWM=P2^1;
, v# v; U- K3 M/ jbit DIR;
( ?- {! y- i Q) G% w8 X1 Y( I- O: s8 K; L: V3 Q# c
//--定义一个全局变量--//
& Z3 Q. I) D$ k# r) tu16 count,value,timer1;
) ~( e! ?& {. k5 a3 U7 w1 s4 C- u& `. p6 [4 a
/*******************************************************************************
- ?" `. I: `. J$ N1 C* 函 数 名 : Timer1Init% Y( o5 U8 [" k' w. Q! G
* 函数功能 : 定时器1初始化. B' f, M9 O& o+ ]) K
* 输 入 : 无
% N3 h, o/ Q5 O! I! D* 输 出 : 无# c2 H j3 K5 X
*******************************************************************************/) W0 \/ _3 J" R+ a
void Timer1Init()% W" q5 x: ^+ Y1 j; ] [, F% V k' }* G
{
& B. [" A3 g! G* Z1 ?1 c7 d0 {) o TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
% \, [5 @+ y; y* C* Z. S
1 z j4 A) v5 o( D6 Z) ~ TH1 = 0xFF; : i! M+ a' f$ N; {6 T) _4 }
TL1 = 0xff; //1us9 J8 X; E+ u: h; b( n& h
A3 |" R+ k: |) V9 W2 u2 z
ET1=1;//打开定时器1中断允许
# r2 C d' s4 {1 I EA=1;//打开总中断" I& p+ ~* ~% I/ J% {( }
TR1=1;//打开定时器
4 B- v; m% ?! U. g; r}( j v9 U- ^7 P' ^
/*******************************************************************************
! v9 j/ ~1 A2 r& R' X6 {2 f: `* 函 数 名 : main
' A& ^- S' J5 L' ~3 r0 ]* 函数功能 : 主函数5 G2 H: S) a) `: f5 T% P. ?
* 输 入 : 无
' o- N4 {! k! L5 i$ h0 @0 T* 输 出 : 无. Q+ a% ?5 ?+ _8 H/ r
*******************************************************************************/
( T) E' y1 y _# Q' W6 f* U) Avoid main()7 R1 K8 q, b# \0 w* b0 c& J7 g8 F
{
& }/ {- O4 W: q$ [- w Timer1Init(); //定时器1初始化$ P* {, l+ \ I3 b. i) P
while(1)9 _ b( Z0 g3 ^& I
{
9 H; G+ C% x, } if(count>100) / y( E9 x9 F6 X: S
{ 5 o& p1 _- q+ \, p7 H( |
count=0;- Z0 I4 o/ |7 F/ Z2 e% a
if(DIR==1) //DIR控制增加或减小
4 C V' i/ F$ ? {
) ~3 e- v; ~6 }- k' A9 G value++;
1 H9 h" }. w J }
+ u+ Q% r w8 M8 L& [( M if(DIR==0)
- j& |, I3 z/ V; ?. k1 P* z l {- [& o# H6 {4 a5 _ ]4 N
value--;
2 g5 r( K5 {8 Z, ^! Z6 E: j }
# i+ g" |9 u: O. L% |3 q1 m( B
) O$ h) U8 c& e9 T, m( U. | }9 A( e& d4 i3 F
* N# I2 v U8 R C: j9 D! q) ~ if(value==1000)1 r! z; d$ S0 x2 g) B7 z
{" K' A" B, l) E2 \: \0 n$ o3 ]4 i
DIR=0;+ u% W' K" Y& ~; ?
}( t0 N" A4 s7 {- _4 A/ q
if(value==0)
5 I" ~! i5 ]8 ?2 |! \ {
/ [% U* l/ x2 [: p9 F) S5 }$ B DIR=1;
/ G' l5 k$ K% s, p' u; _ } . g2 l9 C$ x( g3 l& X& a! v* F) k8 ~
# Y6 Q7 j# ]8 D. ^6 {; n if(timer1>1000) //PWM周期为1000*1us
% b- P7 d+ V$ @1 K( L {! L& V9 `9 ^# v% b5 W, m. B+ L
timer1=0;7 T. J. s: J- J
}
) m H: Z6 |! }+ \4 t if(timer1
$ [+ B5 T7 q: Y0 A! w: h {8 g- C5 g1 n4 j) t# R/ E3 h
PWM=1;: H F" z5 T) U6 _4 ?/ m9 V
}
& B! j3 H4 F9 [6 H% X. ~1 G8 C else
5 K4 n, e- L9 @9 g {$ N: c: Y/ A" S3 e8 K, E$ f
PWM=0;
# @8 N, [# R% p& k }
+ x7 a, C8 ~1 ~- S# e f } 0 N. D+ b* o9 e2 _2 Y( a# M9 \% a7 Y
}
% X0 N. u2 V; @4 Z8 S/*******************************************************************************
0 U$ ^% x: k2 h" {* A3 _4 P* 函 数 名 : Time13 _' ?; b8 y, w
* 函数功能 : 定时器1的中断函数
7 H, ]* Y( U5 \+ Y% _; v- p* 输 入 : 无: {2 m% n% e1 Y
* 输 出 : 无' ]) O d% l; Q: ?/ p
*******************************************************************************/, {3 `% w! w% j8 o( m
void Time1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断
: u6 \, W% p! W7 j8 E" X) k{
: O- g* D% N) P7 y; X TH1 = 0xFF;
S: r- M( E: k( Q7 v* |- O* H* j TL1 = 0xff; //1us
8 ~9 k3 V3 `* s: W' x' R3 j% G timer1++; 8 j& H+ S/ Q% }" s
count++;0 _% H4 D! H% P/ ~* p
}" Y% @: {3 r7 h9 S' n+ k) b! V( S
|
|