|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我想用DA(PWM)来实现一个呼吸灯的效果,没看懂count在代码里起什么作用7 S; E' h* a" q# J7 ^8 w) t, F
8 N. ^5 M5 a6 w/ {#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
& q G. n4 ]' O4 l+ Y3 i/ D, X" b& q4 F4 t# z# q, v
typedef unsigned int u16; //对数据类型进行声明定义2 L# }9 Z% J+ K# M7 n* G l
typedef unsigned char u8;" u$ P' y) C6 `
" M7 F# O0 G: K) j5 Y//--定义使用的IO口--//
+ [7 S2 {2 \9 ?: Y4 R***it PWM=P2^1;
. v A7 K# p0 w x' e6 G! x9 Ibit DIR;9 N# W0 o2 Y8 ^; `/ {
. X( W2 T' g, h0 E0 y
//--定义一个全局变量--// C( c& p+ W: v R) X; V
u16 count,value,timer1;1 \2 J9 R. {( l
6 i4 `$ Y1 p0 Q4 [, }1 L% Z! s/*******************************************************************************
9 N" r9 d! P" I$ X* A: `* 函 数 名 : Timer1Init
; [" G4 O9 |( F7 J n- q* 函数功能 : 定时器1初始化
1 X/ H$ m9 {4 t8 T+ C |# N* 输 入 : 无! M. V0 y/ f; f5 t& N& m* K9 x& r
* 输 出 : 无# w% @4 S7 C( m5 ~
*******************************************************************************/( L: K" r* o/ j" R
void Timer1Init()/ t( Z# E! B1 A+ o
{
7 q; N$ |$ D' S! |' `) e( S TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。3 H: m2 c* @, w L$ f
! ~' ^" ~9 ^- @: D
TH1 = 0xFF;
4 l5 S/ _$ x# v$ b. H' w TL1 = 0xff; //1us1 w( ~* P) ^' `6 S/ E
& ^0 U& H! g: g# z* d! y ET1=1;//打开定时器1中断允许& e1 L9 B4 Q2 n6 v" Y
EA=1;//打开总中断8 R1 e6 Y. V. Z7 e
TR1=1;//打开定时器
8 w: V& { R7 o: L9 N0 u7 i}) M9 j" Z1 O) g7 e
/*******************************************************************************2 o+ N ^% z% p) g) ^: |% J7 `, b
* 函 数 名 : main$ ]' i9 P( S( r+ g
* 函数功能 : 主函数) k; o" ~: \0 z
* 输 入 : 无
7 R( `6 j' r I4 t2 t% u( a4 _* 输 出 : 无
6 K, [0 a( O- [/ O) N4 X6 B*******************************************************************************/
/ M4 G$ W: r& U4 m. E% K3 nvoid main()
3 g& ^+ a6 q. G4 B{ : R; }) w9 w$ c. k# I$ I8 ^
Timer1Init(); //定时器1初始化
0 h/ C$ ?- g. d while(1)
( G( g8 d$ y# J1 z {
# N5 i5 K# ?/ U9 K9 h, E0 z if(count>100)
9 g8 {$ a0 L+ S$ k8 ? { 7 T8 @" [, m( G" @/ a$ g
count=0;8 u) _! K! {) ?- V8 ~) c
if(DIR==1) //DIR控制增加或减小4 o# R* w' |: j! Z& F, I
{1 i$ p! ]+ T2 N1 C1 o+ r. M! R$ |
value++;6 m y9 y0 ~4 b
} 4 Z% z: R8 |. d7 m% r
if(DIR==0)0 Y4 o: }# y& |: C% _
{- m3 x, A0 ~- ]' R; }2 t' J
value--;
, C6 N& R3 [2 a }
! E2 o5 y- S j
( P7 X) x& w J8 d% `* H9 [( n+ j }# |8 O3 N. ` S$ h2 V! @
, z4 `) u; X/ B4 v4 _8 p4 a# Z
if(value==1000)
9 {$ g+ ?$ L( `% B* K. z {
7 a& e* g$ p- ]" n" C+ D DIR=0;! g& Y( U8 m( b+ S, c& d0 F
}
# n2 }0 z% r; ^0 N. _" S4 g1 h/ o if(value==0) ^) F! b/ D* `* p, l2 P/ v
{# U8 W6 U8 ?+ n
DIR=1;! ^! o" R. g* V0 O
}
2 y! ^7 U% u' h+ o 1 o, x2 u. M9 a4 ~3 k c5 L% F8 d
if(timer1>1000) //PWM周期为1000*1us" z8 x! k+ Z, T2 ^4 W( t' g' g- u
{
, h5 D& n1 e( e: t4 u) }2 @2 g timer1=0;
3 I7 \$ U. W. p% W) f L }* ]# M7 ]9 P6 g3 F; k2 M
if(timer1 " ?/ w( F. P$ I3 E
{% {! r( m4 C/ L% f+ K
PWM=1;
; r1 L, a+ ^6 A8 I9 m }
) i3 E/ p- I% Y9 J8 u else
$ w9 K$ Y+ u# c: H j {
, A% e- i; L/ p# V8 b& e9 S V! V( z PWM=0; t4 P/ x. j: [
} 1 @$ \% H% }; U& N! _: c
} $ t6 d/ t- u1 @
}
( I! K" v" o/ a4 E7 q/*******************************************************************************5 K7 S; m5 m; X( Q) M
* 函 数 名 : Time1: {3 K9 w& Q6 Q; j; {$ c
* 函数功能 : 定时器1的中断函数5 @+ K+ `. _" N9 X( t& u
* 输 入 : 无& L2 A8 a9 `, R3 L: B4 o4 a
* 输 出 : 无% p# e9 I' \/ [0 y* S6 u/ k" E! w8 R
*******************************************************************************/
$ K, ]! |6 V" ^1 Y! Xvoid Time1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断
! U, Z/ I0 T) S+ o2 v6 C" B. V/ J& n{0 v1 r5 D3 t8 ~0 ]. ?
TH1 = 0xFF;
9 T& B# x' [: F TL1 = 0xff; //1us. w4 I) |7 e$ z4 m3 B9 Y% ~
timer1++;
; A* H# T4 B0 Q z0 {8 ~ count++;% w( S; z c9 N6 _( l
}
$ b! B$ G) H5 l7 I |
|