主要的程序我也貼上來各位看一下) d8 ]9 Z8 m, T+ h1 Q8 `( V4 R
% L% V2 l2 Z9 V! @: I& H
/********端口初始化函數********/
- f4 R; |- W3 a! Mvoid init()/ _) {$ l) H* R* _; a% r7 k/ F4 H
{8 e) w% G. K, p% `' y9 \: ^* F
ANSELH=0x00; //設置B口為數字I/O口& W; H8 k9 z- c1 p
OPTION_REG=0x00;& I; M4 `" H! K6 K0 N9 u* T" `/ f
WPUB=0xFF; //設置B口弱上拉/ W& l2 g" N3 ]! o
INTCON=0x00; //關總中斷, F, }$ L3 J3 A$ @
PIE1=0; //PIE1的中斷禁止: s. J- }3 V4 p$ ]
PIE2=0; //PIE2的中斷禁止: h4 X- ?& a8 e( S
TRISB0=1;
/ A9 @1 x4 {7 S% U TRISB1=1; //將RB1設置為輸入口,按按鍵) _3 d/ p9 ?- ~2 t- z1 J
TRISB2=1; //將RB2設置為輸入口,按按鍵1 M0 r4 Z' N) I: n
TRISB3=1;
; K Z- H! Y& \ TRISB4=1;9 t0 ?) a/ N! y/ `2 T5 [
RC1=0; l! z* s/ Q/ A) R8 {: s
TRISC1=0; //脈寬調制輸出引腳,設置為輸出
7 C9 ^7 M5 _) k' t" T}
: J$ D6 h1 Y- ?* _' ?/********PWM初始化函數********/* \) L$ m3 ?8 p
void PWM_Init()# O' H! x, f* @$ D! r2 p2 P: o. T
{) k4 i2 C9 ^) G! o4 r9 n
PR2=249; //脈寬調制波形的周期為1000us
. R6 w) @# a3 ^+ A! c CCP2CON=0x0C; //CCP2模塊工作在PWM模式,占空因數的低兩位為00& S; w" q" p" M" k
T2CON=0x02; //禁止TMR2,且前后分頻值為16,同時開始輸出PWM/ M) V& o0 G6 Y) O3 C4 V5 `2 t
CCPR2L=0xB8; //脈寬調制波形的占空比初始值
+ D5 q2 A' u! a# n# G) d}! f/ Y7 s8 b( r9 [1 J: Y$ q0 X6 |
/********鍵盤掃描函數******* */8 P9 Q8 w# p. J* B$ f
void keyscan()1 Y4 ]- ]5 e o" r6 W
{0 ]+ k/ @3 [' T" l7 I7 m( `7 l" k& w
if(RB1==0) //如果是RB1鍵按下
+ }; }- f+ X/ b# Y {
o4 x* F8 H6 q" e$ E$ n delay_ms(5); //延時去抖
1 `$ E" _+ C+ | if(RB1==0) //確認是否有鍵按下
$ Y8 n9 m/ Q3 |9 O {
/ F; v! Z6 O% U3 z, b while(!RB1); //等待按鍵釋放9 e$ b7 p. |1 ^8 E+ N( ], i
CCP2CON=0x0C;
5 N, h5 k- l9 N' c CCPR2L=0xB8; //80%占空比3 Z9 b* g3 _1 Y2 ]& {/ D$ H# C$ J; ?
TMR2ON=1;
: D" p! A4 c x- I" a) X }
. d- U2 [9 }6 n$ t! Q2 v. I }
5 ?: |: [- z+ q2 p if(RB2==0) //如果是RB2鍵按下
8 \5 o O; x$ t& H& n2 F, c% P {8 M& F# T( p# o. `$ G
delay_ms(5); //延時去抖' Z, ]9 n; N* J7 O! b* j6 J; k
if(RB2==0) //確認是否有鍵按下
" Y6 T" n, A% A4 g+ B! j {
2 @8 _5 _% ]+ B& I- P; M7 U while(!RB2); //等待按鍵釋放
, j* T$ T' } a6 G CCP2CON=0x0C; G! Z, J! S4 f1 c: u; \ D* F
CCPR2L=0x96; //60%占空比# F% ~4 L0 _ Q+ z; O- G
TMR2ON=1;* C3 o. X! A+ c/ I1 v
}
% @) E0 s) }4 l5 l }
5 w+ i/ B; g" w1 ~ if(RB0==0) //如果是RB0鍵按下7 g, E6 N% S% d. ~: N ]
{
) i" @$ G( ~# ~8 G delay_ms(5); //延時去抖! y8 b! P! z+ G! j
if(RB0==0) //確認是否有鍵按下
# ]$ d& \9 g/ M {' o' e8 L, m# |$ x( {8 }, H
while(!RB0); //等待按鍵釋放
# v( ]& b. G! z% r( H8 W7 ^+ G0 ~ CCP2CON=0x00; //關PWM
7 K( S( p4 a" i9 V t TMR2ON=0; //禁止TMR2
6 x8 K5 s3 ^: U$ L; j2 x //delay_ms(5);
+ G, q' T! l( x RC1=0;
" V$ S3 h; O; a& N; W/ a }
' C$ f1 V2 ]# U" L$ p' ~1 p- E }
3 W! z/ u- V+ ~8 D}
4 u) m1 k' n! s4 E R/********主函數********/
) p5 o% r! A- Y! n' kvoid main()
* d8 {, j: |6 I0 J, ]0 z* R{5 e/ |! e! L; b0 m' V) {( U* E! S
init(); //系統初始化
9 h( _9 D) D4 h" M' G& Z; U2 g PWM_Init(); //脈沖寬度初始化6 R" V/ e. S! o1 Z7 V! c+ v6 @* ^
while(1). F' w8 J2 Z5 f- E& j
{
, x/ H& r$ x1 j6 M! [) k keyscan(); //調用按鍵掃描處理脈寬因數
" r, A- \* D9 |3 W5 S6 z9 }( f }
& r9 n4 E9 z' F} |