主要的程序我也贴上来各位看一下
8 K9 j& z6 f/ c; a% T! n/ o" N" t" z5 {4 X5 F g
/********端口初始化函数********/, H2 S4 Y2 f* |0 A; C" [* z
void init()/ [0 D7 }. D2 ?$ T; ]) k1 b$ x4 E
{* N1 T [# g; F! O" S4 y
ANSELH=0x00; //设置B口为数字I/O口
6 T) w6 W9 O4 M OPTION_REG=0x00;
5 O( L1 r% N! l( |5 R. {' O, E WPUB=0xFF; //设置B口弱上拉8 f3 k$ k$ n" K, }0 r
INTCON=0x00; //关总中断4 r8 l3 w' v+ _; K: u3 _' p
PIE1=0; //PIE1的中断禁止: p! G. @' ?! a# I1 v* H; l! C, m; t! `
PIE2=0; //PIE2的中断禁止
7 [/ H0 K0 j [# D& c% H# h4 D TRISB0=1;2 Q, B$ b+ n1 v' u
TRISB1=1; //将RB1设置为输入口,按按键7 m9 z/ ?3 T' Q' u
TRISB2=1; //将RB2设置为输入口,按按键" ?: ^: o5 ^3 h/ H- R% T/ j8 S: H3 ?
TRISB3=1;9 q( b" R1 {5 z% W2 X, k2 y% h
TRISB4=1;) [6 y! ?, o! a) T8 F9 Y9 u5 s
RC1=0;
8 w2 G: v* j' |* P7 u, u5 h) K TRISC1=0; //脉宽调制输出引脚,设置为输出
4 E/ d! y- \/ B8 e1 ?9 J8 j6 Q/ m" e}
; h7 f5 H7 }- c. [/********PWM初始化函数********/) h0 ^' j: M' w/ Y2 f
void PWM_Init()
# Z: A p9 m6 e+ n3 T" g{
) M3 t- W0 o+ p PR2=249; //脉宽调制波形的周期为1000us
; |5 _1 C7 e% X2 ]% r. P9 v CCP2CON=0x0C; //CCP2模块工作在PWM模式,占空因数的低两位为00
& a3 D' H1 T3 E% J% L! B3 G T2CON=0x02; //禁止TMR2,且前后分频值为16,同时开始输出PWM
, N3 M3 N: e1 J) E4 Q' \2 I7 L CCPR2L=0xB8; //脉宽调制波形的占空比初始值
* O! g. ?4 D# d% o* K}
/ `* g; g1 Z6 Q/********键盘扫描函数******* */
/ ~3 C- d7 {3 svoid keyscan()) T6 X! v3 ] Z0 w0 Z! \$ I
{# R0 Z( N/ k/ ?* N5 m$ v, W
if(RB1==0) //如果是RB1键按下4 k# p. q! Y5 g
{, P% h# _1 l0 c
delay_ms(5); //延时去抖4 d: X+ j5 P3 b! i! R
if(RB1==0) //确认是否有键按下9 T* ?1 W7 E9 W% B0 j' \- B
{
8 M E' F1 f2 Z8 c9 q while(!RB1); //等待按键释放
. g \, j$ b. Z CCP2CON=0x0C;9 P5 }" n" P6 x1 q/ ^$ l4 d
CCPR2L=0xB8; //80%占空比; ]+ j+ b( H0 R$ k( p9 S9 H/ P
TMR2ON=1;' a) }7 l! s% C. t4 k/ o- m# X) `
}/ V4 K! a z- v% q( |1 s: R9 Q# }- S
}
. E7 l+ K$ @' n) ~ if(RB2==0) //如果是RB2键按下
9 r5 z' w4 ?' t$ I {1 j+ M9 `3 V; D* u
delay_ms(5); //延时去抖
1 d" q& j; D. j% h+ B1 I8 k if(RB2==0) //确认是否有键按下
# @0 {5 {; S' D* P: S, y {
3 [* M$ g, U/ V3 ^* U9 y while(!RB2); //等待按键释放, N2 \! ]7 }- x; ]* h9 C2 ~* N
CCP2CON=0x0C;" @5 D* @1 s5 r. b: Q- Y
CCPR2L=0x96; //60%占空比# ~( \# r8 o7 m" z- U$ O
TMR2ON=1;8 c! D# ^/ A& m
}7 Q, W' K' S5 O3 Y( e/ q
}, C% h! k( ~7 T+ x" |9 y, g7 t
if(RB0==0) //如果是RB0键按下
" c4 E* Z1 r! g/ E J0 l {5 c8 h5 S2 E1 i7 c- t
delay_ms(5); //延时去抖: T9 U' o, Q, S( u, S6 L
if(RB0==0) //确认是否有键按下% J) ]% q, x' `6 I- j5 F
{3 { R/ }0 A6 O% Q
while(!RB0); //等待按键释放# f, X7 G' o4 W9 `: Z S' Q
CCP2CON=0x00; //关PWM1 O% k+ @& ^0 t/ F
TMR2ON=0; //禁止TMR23 m3 y$ t' w9 E2 ]
//delay_ms(5);$ [+ I. G9 W6 }; C- z; y
RC1=0;
- F X' T, Q" l) P4 y- A i' m" ? }
. Z5 `$ N2 G; c* `8 b3 a, n }2 b& U4 c0 G4 O" p3 n1 e! k
}, j+ E; v* W! d! y1 c$ Z
/********主函数********/
/ g; w5 {/ J; {1 D. h0 Ovoid main()7 ]/ s. d$ f, g4 L
{
; J8 ] k% Q! s init(); //系统初始化2 r" {7 X$ r6 o0 V/ C
PWM_Init(); //脉冲宽度初始化' y9 B. a% L8 M4 e
while(1)
) X4 L6 V: Q4 t* Q {
- W7 u/ I5 p3 o( S keyscan(); //调用按键扫描处理脉宽因数
5 k9 q) z) @! \ a" U' I2 s A, Z }* {! l* ^. s* J) G! \
} |