|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我想用DA(PWM)来实现一个呼吸灯的效果,没看懂count在代码里起什么作用7 p6 t2 L0 Z; _; l: o5 R
( L; N3 T3 k- S#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器4 E. h% H, R; `" i& M- |! T
$ W3 E1 J/ E V" G# [6 o
typedef unsigned int u16; //对数据类型进行声明定义7 {1 o) ?, c) I# Y. S9 k, Y
typedef unsigned char u8;
8 G' O, B6 O+ w2 p, C( u2 j& k C& ^% e. l$ a% W1 s
//--定义使用的IO口--//4 w+ K5 G* G. c, G
***it PWM=P2^1;; W2 O/ J5 r; r; i- I' s9 S+ E
bit DIR;- Y# L) g0 @0 w+ u$ E0 F
X, a, q3 D& G& m7 m4 K3 ]
//--定义一个全局变量--// C ~1 V8 o) _" |
u16 count,value,timer1;
/ x/ D7 m: i! n/ b }. _- n! ?
' M8 {" C7 p) c+ A4 y" W/*******************************************************************************
( v9 Q& Z3 M* p! i* 函 数 名 : Timer1Init/ q+ [2 e* L% l' U6 N6 h8 U& w8 t
* 函数功能 : 定时器1初始化
4 ?- O8 n0 L/ @( [9 M* d0 `4 @% Y* 输 入 : 无" z9 }0 u5 f' K# W/ G8 _
* 输 出 : 无
+ C7 V0 V: ]% D* }# k6 ~& i8 b*******************************************************************************/
- ]0 m$ I/ H/ S; fvoid Timer1Init()
Y# v& M, h# ^4 M6 J{$ N: {( J" F; ?) c
TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
7 N8 V/ m4 c. L6 k7 Y) z0 H* Q, g3 e$ ]
TH1 = 0xFF; 5 ^" v# _% c+ G4 m; S: J
TL1 = 0xff; //1us
4 a$ T# G c; b3 r 3 y; b) f ]6 ^; Y+ o4 N( J8 C
ET1=1;//打开定时器1中断允许
/ _! e7 ~, c# R+ m- u6 u/ }- C EA=1;//打开总中断5 a7 a1 o j _1 [* R* z
TR1=1;//打开定时器 - d9 w) h7 u9 g+ i& b. o
}1 t* ^0 A& \* | u+ m
/*******************************************************************************: t# R; }6 ]' H
* 函 数 名 : main9 w- F: s) I m0 F, {: o
* 函数功能 : 主函数
9 T6 Y0 s& ~; A% o3 k* G+ ?. T* 输 入 : 无' e: b" i+ ?9 X* F5 `
* 输 出 : 无) s# p/ `, F) k; t
*******************************************************************************/
# n Z' `) _6 Y" t0 A& x+ M) Vvoid main()
4 \& t; t% S) @ I0 ?' P* N+ k{
% L+ N1 q* Z" ]* t$ X Timer1Init(); //定时器1初始化0 b7 P) ^2 u T: v8 ^
while(1)
* h( u- Z9 e4 S8 o! j* H% h {7 j' k7 m6 \# f7 q/ \6 T
if(count>100) 4 r1 b' |# X: T! L- w
{
/ X! S/ A4 O. k( o! B9 Q# Y9 H% t count=0;
+ x4 [9 z+ J* e6 j3 x9 M* C if(DIR==1) //DIR控制增加或减小
# I: y7 I- r( G% q4 \ {
/ H# Z/ L N4 ?* e3 T value++;
: W0 P. V% b; n( u# M }
2 f2 L: i7 }% ~: [) z/ n) v2 ? if(DIR==0)
; G8 H3 i+ Z# k% @ {" D% m' h; j1 a* q& i
value--;
/ P- D8 E1 a' M# v) P: o' j, D; _7 q3 O }
8 f- P; _$ C$ V1 W' w! Y* L
+ M+ n7 b" Y* R }
9 [5 `+ Q0 G" \% X# s. E" p
* y+ E4 M( `% N- R8 }( P" ` if(value==1000)9 O f. L# \& H! _2 P" K D( Y+ {
{
( Y& B6 n {. i6 _4 [3 ~3 J DIR=0;
" Z6 ]8 i0 W; q7 r! {, x6 C# A. j# @ }# a' p1 v w( P( f% S5 `: Y9 @1 M
if(value==0)
. @/ d$ j8 Y# l: g {) E {
+ F% M# B, M2 @ DIR=1;
6 b! b6 M; k v0 `" o0 P/ N' S( d }
6 P5 C; ~& r0 k3 F1 w; t. Y; X, B
6 f' [1 U+ @3 R" ` if(timer1>1000) //PWM周期为1000*1us+ V7 m* U1 D( E1 A
{0 ]5 i+ i3 w4 C$ @# [ j5 v
timer1=0;
6 R$ u" k% b+ D }
8 Y% ]. z4 Z, y7 e# m+ J# y! } if(timer1
9 _. l; l3 w( @/ D7 [3 z, l {
) b$ b* P+ G$ p* e PWM=1;1 q- ]) ?- e7 G+ W
}5 X5 d+ ?% a: O3 `' H8 V
else
. x5 z2 s4 R3 R* ` r {- r' V' o6 l0 i
PWM=0;
. ], a8 b$ @4 k3 f! [# z } 2 B _6 U' x0 o, M" q: g' _( u
} % h/ W% K% E5 ^1 E% a$ I
} v8 Z& C; \+ H c, I* P
/*******************************************************************************
9 b9 b+ J& Q: V! J) X* 函 数 名 : Time1
, M4 |" R# ?- d1 s4 y* 函数功能 : 定时器1的中断函数: R; V, [/ W! ^% L
* 输 入 : 无
0 V! s) ~1 n( _* \8 j* 输 出 : 无: D k% K& s7 f# f6 T
*******************************************************************************/5 g4 g/ C! P$ g- N6 k
void Time1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断% u4 Y y- y4 a3 r
{
1 @& ^0 S' R( l2 J; B TH1 = 0xFF;
$ { a" h) e U: F% a TL1 = 0xff; //1us, m6 f1 m5 r5 R: G/ Y
timer1++;
% c- o" f9 u$ [8 j4 G4 v! S( T count++;9 k3 N# r5 S; @6 L- o
}6 D7 x: m, J3 `! e4 t u& P
|
|