主要的程序我也貼上來(lái)各位看一下
/ y8 i$ K" ~+ K: o' e$ m7 A( I* n: R
/********端口初始化函數(shù)********/
8 O- \2 G z* w8 Svoid init()
) K# V" i) j! z9 m{
- O) x; e6 k- O; I7 n ANSELH=0x00; //設(shè)置B口為數(shù)字I/O口
5 }: ] i4 N- n OPTION_REG=0x00;$ J0 {7 n! o- Z7 `( l
WPUB=0xFF; //設(shè)置B口弱上拉
$ A2 {6 Q! k6 _ INTCON=0x00; //關(guān)總中斷2 F, F" D7 }3 }1 P
PIE1=0; //PIE1的中斷禁止; x0 m' W6 s+ k% ] L
PIE2=0; //PIE2的中斷禁止2 L% k6 l# w+ g' i* d8 ]. B
TRISB0=1;
4 d; j5 b& Y2 @4 x/ z# i( v TRISB1=1; //將RB1設(shè)置為輸入口,按按鍵
7 S# X0 f @8 h, _% z D TRISB2=1; //將RB2設(shè)置為輸入口,按按鍵
" p' ?9 S! u% y8 c TRISB3=1;; |4 q2 |4 Z2 S
TRISB4=1; K1 e1 w2 E6 Y1 `
RC1=0;
+ y& G- i4 Z! |7 ]' G% M. N/ ^: G TRISC1=0; //脈寬調(diào)制輸出引腳,設(shè)置為輸出" }, ?/ j% z4 ~- [& S% B8 ~
}
$ `1 z' [% i! z3 h9 B/ T% @- ]: _/********PWM初始化函數(shù)********/, F1 a$ \. P% I! O' b- c3 @
void PWM_Init()
$ x3 T) Q, l2 H3 k. F{
& c$ T' v& U b z/ ~ PR2=249; //脈寬調(diào)制波形的周期為1000us
8 p6 ^' n, M4 |& i' M9 q CCP2CON=0x0C; //CCP2模塊工作在PWM模式,占空因數(shù)的低兩位為00
! {3 m7 ?% B a+ Q9 J( Q T2CON=0x02; //禁止TMR2,且前后分頻值為16,同時(shí)開(kāi)始輸出PWM% b+ l. }/ r, C& S' D
CCPR2L=0xB8; //脈寬調(diào)制波形的占空比初始值
) F' e# w' M7 U) |8 A9 ?: a}3 D+ o. ~9 `+ h0 C, b: z, w
/********鍵盤(pán)掃描函數(shù)******* */, F8 C' U4 q% }) b; v+ n. f
void keyscan()2 E1 k: }; R. K, }* [
{1 T- f9 y V$ U/ i6 J7 v
if(RB1==0) //如果是RB1鍵按下
# Q S% ~5 ]- W c) W9 k {
, K. q4 j' q7 v9 { delay_ms(5); //延時(shí)去抖5 n0 _9 y- o) L6 z9 {' a
if(RB1==0) //確認(rèn)是否有鍵按下
) w! a. i% W0 j. Q {
2 h2 `; Q b# d4 G- y while(!RB1); //等待按鍵釋放7 \7 | j6 }% ^. `
CCP2CON=0x0C;5 ~/ h& R6 r5 p- [% W
CCPR2L=0xB8; //80%占空比
, w# J% `. u- z% w4 E P, Y TMR2ON=1;& n2 M( L: R# w+ R# [
}
# x2 Q7 w* D1 k! s* P }
5 h: K( F, u9 R- T3 V if(RB2==0) //如果是RB2鍵按下
0 e1 Z6 Y+ v, w1 q4 z {2 F+ i9 M2 B: [+ ^- N' m
delay_ms(5); //延時(shí)去抖/ M+ h# E. M$ O( [1 @
if(RB2==0) //確認(rèn)是否有鍵按下
: w6 R' q( m8 f; j. O {0 Z `% [2 y# Q" v+ B* C
while(!RB2); //等待按鍵釋放
5 Y* M A" M6 \+ P CCP2CON=0x0C;
1 u( c+ O' C: N) d: I& J& b CCPR2L=0x96; //60%占空比4 _2 q& y5 y" E6 i* g* w
TMR2ON=1;
v$ E/ ^0 J r0 f% N) F }
/ L2 i6 g$ j2 T; `' v }) I: ?# k+ s* B1 d
if(RB0==0) //如果是RB0鍵按下
2 U \- v6 O ~) C6 V& s/ H {
5 o0 q9 @9 l1 W& ~% P delay_ms(5); //延時(shí)去抖
; u {& `7 x. _% i/ R' T" ` if(RB0==0) //確認(rèn)是否有鍵按下
/ O1 d/ G* e' s* ]6 d9 h; ? {
" v4 }1 n2 A. L$ ] R7 M, Q while(!RB0); //等待按鍵釋放
2 Z, b& g$ ~+ H2 }% n: Q2 x CCP2CON=0x00; //關(guān)PWM
3 a* V4 u; e9 t# |# H1 ], C7 ? TMR2ON=0; //禁止TMR2; k x$ g2 g4 j" M
//delay_ms(5);% C: g2 j' \3 p4 V4 _% G2 f
RC1=0;; b' R6 Y* w) z: d- U" R
}0 f0 Z: _9 O9 I$ T
}
# b. z7 e* ?& G; B1 b' P+ C}$ L/ x# d; ?$ T* y
/********主函數(shù)********/# _ d0 q3 l9 b% n7 T) Y6 h
void main()3 y/ h% X/ |1 I* S1 ~& A
{
- s* _+ h/ Z; S7 C; ]8 y/ O& m: g init(); //系統(tǒng)初始化
6 F. A1 x# ]; y/ L PWM_Init(); //脈沖寬度初始化8 d0 v4 G, \/ }1 D
while(1). r7 m9 b9 v, g9 t- ]5 v1 y
{' l. F: P" |6 ^$ r7 z
keyscan(); //調(diào)用按鍵掃描處理脈寬因數(shù)
$ X0 Y6 M& o" f* X: ^ }) G( F2 s4 y3 j$ `1 b7 ~
} |