|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我想用DA(PWM)来实现一个呼吸灯的效果,没看懂count在代码里起什么作用
: E/ y9 I! C/ X$ d( w/ M# e
[$ e6 X( y7 H" U#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
4 f) b, s5 d% ^& Z! C1 [9 `7 q1 Z( l8 D/ H/ R
typedef unsigned int u16; //对数据类型进行声明定义
) H! _. ?* D( b4 j+ X7 V. [, m0 |typedef unsigned char u8;
; o, e' c) n5 @/ r8 K; R2 P1 a$ [ X" j! P' X: F
//--定义使用的IO口--//
4 f* Z8 A) `+ m. I5 f/ x***it PWM=P2^1;
2 z$ U9 p1 S" D5 C9 ~0 o. Ubit DIR;7 U7 F- b( t: @$ s3 J" S/ Q7 d
3 {6 e# ^; U# ?
//--定义一个全局变量--//
2 {- d1 ?8 Y+ n2 t2 l5 Tu16 count,value,timer1;
. N2 s) R) o5 j) [ F- L% T7 x8 W* ]* {, _" {6 W7 {
/*******************************************************************************5 e7 I$ E6 h8 C, H, T9 Z1 }7 B) w' r
* 函 数 名 : Timer1Init
) W7 f2 o) w6 Q" n6 V* 函数功能 : 定时器1初始化7 }5 c" i1 J+ t8 E- z" Q
* 输 入 : 无
8 ]' r9 H+ e1 i* 输 出 : 无
% r1 o* R9 E% |0 t' H/ x9 N% S*******************************************************************************/
Q& I3 h' z+ t3 }& q5 ]$ S" Avoid Timer1Init()" N: Q t9 U7 G' A* ^* ~- B3 u6 Z
{
4 s% [, e4 V+ E& j4 t$ ^/ O TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
7 M; |* J% W2 S% r
3 ]) G6 O6 U0 u" D- \ TH1 = 0xFF;
) ]0 ?) m5 q$ O! f3 b8 K TL1 = 0xff; //1us
, A" p( u8 G( m: B1 s! W
8 C+ ?' B, ?7 b5 t7 X8 Q! [ ET1=1;//打开定时器1中断允许
# |9 S: F, g! X0 }7 Q% g EA=1;//打开总中断" y. ?+ G6 {9 D# f" q. J$ m; R6 E
TR1=1;//打开定时器 2 e# ?7 a" A0 f- y y# E k
}
) O2 x6 p' K' N9 u4 I/*******************************************************************************' d3 [% I& d$ G9 f& J! P
* 函 数 名 : main7 G7 G6 b6 E/ G3 e3 r
* 函数功能 : 主函数
3 u) M# h! j4 |0 s* 输 入 : 无
Y( R0 V( M& a& W9 D* 输 出 : 无
7 Q" g7 _9 d5 B( @3 x*******************************************************************************/ |& d" D: j$ `2 E& `6 E) |& I9 O5 U+ [
void main()
& u! U0 f; q' [! q1 x{
( V8 M4 N: i/ [0 S9 ` Timer1Init(); //定时器1初始化+ j3 z, _1 ]1 ?1 ~8 N
while(1)
& f+ ~% a+ @' P8 k. ^ {6 [, w; N! e: F3 E; V+ l
if(count>100) 3 m E" e4 k; n- c
{ 5 [4 F7 f3 Y$ N' X8 z
count=0;: l k9 j9 |( \ O9 L) Z l1 `$ b
if(DIR==1) //DIR控制增加或减小6 w3 H* K+ n; _ z! S* S
{: g, z/ S! v# E* ~+ k
value++;7 r# }; L) O5 `& c* O8 _2 H0 ]
}
" z/ B( a. A) F, A& v. |7 B6 }" O if(DIR==0), N% g/ g y! Z
{
! w& ~" e" i* m( R% r9 }& y4 | value--;
' z2 d3 v6 `8 y. d# X }
6 K# ~- @$ }3 C+ M: Y7 @0 b % s" n$ a: D' R$ H
}
' I5 e; x4 o) x6 @' s: i
( ~$ l" T6 Q H" G if(value==1000)
' m- ]/ Q% R2 [ {. S& H, ~4 g1 P5 I; m% I
DIR=0;5 z# s# G0 I8 U% T% H" Y
}
* W) [' z( c: r. e0 U$ ^9 y8 M if(value==0)
& V) G+ e1 w7 } {7 T3 R* T2 d4 H) J; O8 Z
DIR=1;
( V5 O$ O7 V" L- | }
+ [7 s7 R9 [8 h1 T8 x, d
: P- D/ E, Q0 a) ?1 F$ Y2 O if(timer1>1000) //PWM周期为1000*1us, v/ Y. M d5 k. X
{
1 z+ |) v) q/ V; M2 i9 k timer1=0;/ H: k1 N5 f. J' t- H- O: f- ?. [
}
- |3 B- G2 y& e! F if(timer1 4 [2 q, K3 k: j
{. j# E# y. i! G+ D. M% B
PWM=1;
8 K, P+ o3 H9 Y6 N, j" ] }: e/ `1 s. r( g* P/ ` w% b
else4 G1 U% W) E% ?- }
{" O9 U- T: i, _' L+ J6 |
PWM=0;
! ]* M b: ~' ?$ a3 w } ' \7 | R z* x$ H# L5 w
}
( b. S0 f$ [2 U: Z7 U}3 D2 @4 w8 ~2 o6 b
/******************************************************************************** R( t/ S# ^( W) n, n: C6 m) V! @
* 函 数 名 : Time18 H! B, V8 }2 }: m8 ?* [0 n5 |
* 函数功能 : 定时器1的中断函数
+ b2 ?6 A3 H0 N* 输 入 : 无
# k4 m8 s' k# N2 t3 \* 输 出 : 无
) O( z4 O, W" U! p3 v*******************************************************************************/; v9 L1 e* d; [6 V
void Time1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断
' M l6 b# \, G: G+ T) T{
& a9 \* N# T* \. I% X2 Z! ` TH1 = 0xFF; ! N$ j* p' o* k2 [5 g+ r
TL1 = 0xff; //1us3 P; o) o& y. E8 W
timer1++;
+ ^3 M# d" |9 }/ |8 b# p3 ~5 n count++;% U9 e9 L2 n1 @, i$ ]! q
}5 C3 g. r+ q" a) q
|
|