|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我想用DA(PWM)来实现一个呼吸灯的效果,没看懂count在代码里起什么作用
9 j- a6 C5 G3 r( ~% Y; O8 r7 }& O6 p
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器( f* V. Q3 C1 H6 x( L C% V
: V( k" n& `* ^/ @7 ctypedef unsigned int u16; //对数据类型进行声明定义: l- f+ V3 z* J4 D5 Q& g
typedef unsigned char u8;; R8 _# _% A) Q& Z G$ ?! a
0 N) c; X. h5 S) l% o7 w4 S//--定义使用的IO口--//
& K9 l- G8 M" U$ y***it PWM=P2^1;
8 \2 O0 N9 b6 i1 Dbit DIR;$ K. c( O) @! Y% [ m+ Q
) ~8 Y7 y: t5 M) c
//--定义一个全局变量--//
, {4 e7 P( U4 ~; H& b3 mu16 count,value,timer1; m3 @" N {+ B4 K0 P5 e
0 K. }2 ^" E" m3 C0 G
/*******************************************************************************
+ u7 p& I. Q& b) C d! ~( e* 函 数 名 : Timer1Init
4 Z7 c0 V, V' i" Y2 U$ T- t& y: Z* 函数功能 : 定时器1初始化/ Y6 [( ?6 B- j
* 输 入 : 无3 m2 A$ u* l" C- I5 a& v5 C) p3 G
* 输 出 : 无: z u+ I7 K- K3 M! F+ y
*******************************************************************************/ B# w# j9 g7 Y( ^
void Timer1Init()- c( Q1 l" z3 ?4 Y2 n3 H. D3 c# F
{$ f* `& W3 m8 a: c1 C8 P1 q7 y
TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
1 V' ?3 u Q, b& u! M
; Y& M+ u0 b9 l" f+ r# t TH1 = 0xFF;
+ q% c8 _% Z- k$ M2 @2 E TL1 = 0xff; //1us
5 Y$ G) g( [% `
* R! Q7 E! ^' Q! M ET1=1;//打开定时器1中断允许- I5 e9 o+ K6 x- G. U
EA=1;//打开总中断& z! @$ d/ d3 H3 ]8 P8 \
TR1=1;//打开定时器 9 c1 ^. g+ o; h* {4 T1 \2 z& z
}! |, D. n1 O" E6 g! y
/*******************************************************************************1 [# E9 I% `( @. h4 \& `( Y
* 函 数 名 : main
1 H- \) a5 d: p6 o: y& W9 P* B* 函数功能 : 主函数
! p" q/ {" F0 L$ |0 _* 输 入 : 无
9 W' i( B. h/ c3 v1 D* 输 出 : 无# q0 P% p: H, X: S S" g: Q
*******************************************************************************/; h( G/ H! W$ P$ o
void main()
+ t1 ^: j- o6 k: O+ I{ 8 q4 R, P+ I8 t; R) c
Timer1Init(); //定时器1初始化
b( I# ]1 G4 o2 @ while(1)* Z+ G) \; d0 w' M6 @2 x+ J: J# n8 k8 J
{
8 U2 S, r5 r, r/ s" k) `) A" v% n, ^ if(count>100)
5 m$ X3 T9 E: w$ l {
* T# }) M+ E+ ]: u0 B& z, K( z count=0;+ e0 ^- p6 b- c) ^- s9 r& t8 p
if(DIR==1) //DIR控制增加或减小
- X1 g# g6 h v3 V) p# r8 ^5 J {% n+ N# j: a( o7 C2 n
value++;) \3 T, M4 A( W# W. {8 E/ [
} $ m7 Z h* I2 M9 b+ [) @
if(DIR==0)! p7 s- x( H6 Z/ w1 c/ W
{, f5 |+ N8 k( v; P
value--;# g8 f; C/ ^4 b% Z
}
/ U2 h$ ?% |/ g
y: W. V4 ?) E! ]/ p2 z; V }
. k7 j; J+ ^$ T7 y8 F8 ]* g" L) y- n0 y$ ^$ ]7 S9 G( e' G
if(value==1000)8 Y+ ?% b% M/ o$ U
{
1 J' u- }+ |5 c7 k6 a) R DIR=0;
( D& O& V1 h+ I, ~8 L' ~ }5 g* l. i) v3 k2 F n& W
if(value==0)
- b( _5 c* X3 Z+ A {
! S8 j9 |" r5 ]* y7 L DIR=1;
' z1 T5 O4 D( G: Q& s } $ t3 c, q; l1 o) M) O
4 k" E! C9 ^+ x- p8 Q( I- Q' S2 [
if(timer1>1000) //PWM周期为1000*1us
* Q; |: B" E, ]6 T6 T* O" `( { {: V, S$ m) I+ s! o% S
timer1=0;5 X: V' G1 I. ?# e3 `
}
8 T3 _- ^/ J! z3 _* P if(timer1
2 W% a3 ?3 I+ f {# y1 G0 O! T7 h0 l% c/ n
PWM=1;* z0 l4 V" d. J
}
! `: u" j, B( \5 r* l else: [: i6 j+ r: _8 [! E/ }* U+ X
{
' ~# ?$ V- J& O; B PWM=0;4 S; c* W; ]% V
}
4 e" x, \$ a& g }
- v. y/ S `. ~+ u# j}# p+ O% }7 m1 [ f6 O6 ?) ]9 F: L
/*******************************************************************************+ g9 T8 _3 ?) u# _
* 函 数 名 : Time1/ H. S) K/ M( U
* 函数功能 : 定时器1的中断函数% R$ Y1 A( A0 t2 n, H: q" J
* 输 入 : 无0 y; ]5 b! \/ o- t
* 输 出 : 无3 d# i/ ?% ^+ Y
*******************************************************************************/
% F" j- b' b: r9 j( svoid Time1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断: b6 H( e# f7 X8 z$ u( r. Z8 }
{, }9 W) N4 ~; ^3 S( e
TH1 = 0xFF;
* E$ B3 y( G: ^9 M. Q TL1 = 0xff; //1us
! \7 n% D4 b4 v) C* H. _6 m timer1++;
( m6 s6 T; n6 B6 N$ M9 F5 y count++;, s' l2 l* o. U2 G
}/ k% l1 V0 `% b |, f
|
|