主要的程序我也貼上來各位看一下" t7 j% _# o0 `" H4 M' r! L
$ }: p7 F% r- S E/********端口初始化函數********/6 n' y7 s, O7 _1 N# r
void init()/ A) y; R n8 t6 u' N( Z
{# E2 i6 @3 X; V& V# `) C
ANSELH=0x00; //設置B口為數字I/O口9 D6 f( D+ f8 r" y0 c! S
OPTION_REG=0x00;
- g9 n( b. i6 w r8 y. X WPUB=0xFF; //設置B口弱上拉
# x' C: n5 M" N4 w' R3 Z INTCON=0x00; //關總中斷1 `4 U; F9 \$ S# f
PIE1=0; //PIE1的中斷禁止
& x! ]: t, i& V0 S( E! J PIE2=0; //PIE2的中斷禁止- r8 [3 L6 e, j& g4 x* x k
TRISB0=1;
8 H' |4 k( q1 S& F) v8 K5 }( u TRISB1=1; //將RB1設置為輸入口,按按鍵
9 T) x' j/ O4 d6 _# e TRISB2=1; //將RB2設置為輸入口,按按鍵
# r& O$ L3 a/ Q4 t! M2 u" | TRISB3=1;% e" l6 V- i! g# ?
TRISB4=1;
7 t8 I% x d. I* H RC1=0;* _0 W9 P4 t+ s2 K
TRISC1=0; //脈寬調制輸出引腳,設置為輸出8 P* F9 a) Z7 s' u
}) G# G' Z. y" \( `( i
/********PWM初始化函數********/
Q9 [% S# [, h. Svoid PWM_Init()# J n' Q: Y) H
{' ?2 M( M, `' C; P% u/ A
PR2=249; //脈寬調制波形的周期為1000us 5 K" ^( X7 q3 G0 X6 ]# i* S" w
CCP2CON=0x0C; //CCP2模塊工作在PWM模式,占空因數的低兩位為00
$ y0 c/ |7 g9 F- ` T2CON=0x02; //禁止TMR2,且前后分頻值為16,同時開始輸出PWM
% Q) G: _; g- W CCPR2L=0xB8; //脈寬調制波形的占空比初始值+ P+ J% l0 A! ^) A2 ?. f
}
! z8 f3 f N! X& q/********鍵盤掃描函數******* */
% }+ U- n+ N+ _2 Svoid keyscan()! w1 m, ?' p G" ^0 e
{ m6 V; h' S4 X1 E
if(RB1==0) //如果是RB1鍵按下9 v. p0 W# \. y& ^7 O1 F
{* @6 |' N# t1 k c# T
delay_ms(5); //延時去抖7 V* j4 p: [7 w* Z" i
if(RB1==0) //確認是否有鍵按下7 @2 Y/ k$ }8 O- P& n1 e
{, J; s! t1 p- f# t( f8 N( ]2 l" `
while(!RB1); //等待按鍵釋放9 b( ~9 \8 K* c8 N
CCP2CON=0x0C;
; W) [# k) G; ?$ ^& s' O" J% F CCPR2L=0xB8; //80%占空比
4 K& t6 P5 |+ x, G TMR2ON=1;1 S N; c/ v. K4 r* A# i
}
- Z$ b. n; ^1 L: ?# ` }
. r' C3 n' z" p" }) M if(RB2==0) //如果是RB2鍵按下2 ~* t% s' p% H3 m" ?
{
; G4 x& }4 _+ m: ^ delay_ms(5); //延時去抖
{# v$ F* v' U$ |0 K if(RB2==0) //確認是否有鍵按下( \, n, ~+ ~, h4 W" N T
{ f" [3 I8 H3 R7 Z/ T0 i
while(!RB2); //等待按鍵釋放. H [6 n. ^5 t9 R2 x% @0 D! u: X
CCP2CON=0x0C;
1 R4 Y& K2 R$ C' ?4 y/ ~) Q CCPR2L=0x96; //60%占空比
/ N' [6 H# [! [$ t a/ [9 q TMR2ON=1;
& A6 Y: l- p0 H* Y }
r" W9 u/ ]4 n* z }+ T$ e- v/ Q" h1 l x' c8 q
if(RB0==0) //如果是RB0鍵按下7 Z0 N4 c( T9 N2 O
{
* X$ `+ X$ h0 Y& F, E: V4 s. V delay_ms(5); //延時去抖
6 O" E1 d& ~8 _ r" S. t if(RB0==0) //確認是否有鍵按下& L: Z% N5 F/ }, F7 j, W
{
6 S9 f1 a" L4 v$ ~5 m5 o( w; \' } while(!RB0); //等待按鍵釋放* V; ^- p" e, f8 p( W; U1 U# e
CCP2CON=0x00; //關PWM4 ^! f @: {9 d' X6 }
TMR2ON=0; //禁止TMR2
2 q M4 \( [3 t //delay_ms(5);
7 J4 ]7 E8 x, ^3 k- l RC1=0;+ Z$ E) ^7 i; r9 N7 c4 ^: y$ e
}; ^% w0 o2 Z7 @4 I
}. m! P0 B( q7 {7 h- p% L- T) j: D
}
. t- k* }$ x% H5 M/********主函數********/
* P( B! w+ A5 Y( }9 X$ y0 u' bvoid main()
( O- y8 p( S: o8 O, g3 o" @{* X2 G( o( u/ ^$ x3 u% z; O
init(); //系統初始化3 m. V- s# _0 S) D) c7 r( Q
PWM_Init(); //脈沖寬度初始化* }+ s. M8 e2 x/ m2 {9 ~
while(1)1 q( _$ f8 j% O0 v0 c8 D( L8 k
{7 e O- D& G8 I. _2 o/ y9 M7 l
keyscan(); //調用按鍵掃描處理脈寬因數
8 }3 N" a: W/ y0 g! ~ }
6 Z* l. \) U& W/ [ D, ?} |