主要的程序我也貼上來各位看一下
* y( {1 n# J; |7 K( Z# V5 k4 j C) w' I' ~5 I
/********端口初始化函數(shù)********/
7 l7 B4 w9 b8 o1 ~; I2 U/ q3 Nvoid init()
2 k4 u1 J$ Q' }5 L" U0 ]{
3 P0 X9 ^+ M* o7 J/ e2 m ANSELH=0x00; //設(shè)置B口為數(shù)字I/O口, _- w3 u+ W' }: H" A
OPTION_REG=0x00;
* z3 ] l* ?+ K e6 R1 Y0 } WPUB=0xFF; //設(shè)置B口弱上拉
/ }1 s( s1 u/ T; R K8 |% R$ p INTCON=0x00; //關(guān)總中斷+ K- J1 l. {. I- ^3 U) M- S
PIE1=0; //PIE1的中斷禁止: o- }$ k; E" q
PIE2=0; //PIE2的中斷禁止
* f& H# m# n G& C TRISB0=1;
( _# s) e4 }% F7 Y( r TRISB1=1; //將RB1設(shè)置為輸入口,,按按鍵
5 m9 \7 \ d+ K9 b0 E TRISB2=1; //將RB2設(shè)置為輸入口,,按按鍵! |0 r' l& o& g
TRISB3=1;* c7 F. Y* m$ y7 ^" n
TRISB4=1;% J- j0 l/ a; y$ \- y) A# C( r1 p" B
RC1=0;
, B4 j9 G0 s: U: D8 Z) H8 e" }( c TRISC1=0; //脈寬調(diào)制輸出引腳,設(shè)置為輸出
/ y3 N0 R# U/ w8 Q! A}6 _3 e2 U5 l7 O5 i
/********PWM初始化函數(shù)********/; R, l, U; y9 q5 A' I* K' h
void PWM_Init()
9 {$ n0 Y7 \0 h n+ ?{8 O7 X' j; |9 k! \
PR2=249; //脈寬調(diào)制波形的周期為1000us / a; v' W7 `, l0 p" X3 s
CCP2CON=0x0C; //CCP2模塊工作在PWM模式,,占空因數(shù)的低兩位為00' L6 ~; [2 g: e
T2CON=0x02; //禁止TMR2,,且前后分頻值為16,同時(shí)開始輸出PWM
( T, `5 n9 t% c4 |3 K CCPR2L=0xB8; //脈寬調(diào)制波形的占空比初始值
( [* Z% u; L2 l}
! [8 G; @' H3 i! W' P/********鍵盤掃描函數(shù)******* */5 p5 }5 x- ?% |
void keyscan()
5 q5 ~& a q T$ A/ ^{4 I% t1 x1 N& }! C4 a g
if(RB1==0) //如果是RB1鍵按下- }+ ]3 R8 o2 S! P" w
{* R+ D3 a( A4 h+ L, X9 Z
delay_ms(5); //延時(shí)去抖2 w% n2 \. g( f; l; x' w$ A, c! f
if(RB1==0) //確認(rèn)是否有鍵按下
& V& R: | _( C+ }& D6 r8 { {
0 A- U) j* W2 r3 u while(!RB1); //等待按鍵釋放! N# l: P8 W# O6 Z! ^6 J/ g
CCP2CON=0x0C;
3 [% F+ ~" u( N CCPR2L=0xB8; //80%占空比
. d* R! R3 E6 R+ g7 O TMR2ON=1;
3 x8 P9 [5 e* s' i }* a4 G& j9 M5 W0 l
}, c* W* U: z9 _/ a
if(RB2==0) //如果是RB2鍵按下
5 ?+ O! X! @ E, m0 u& @( [ {
" K8 l" W! B5 v) l delay_ms(5); //延時(shí)去抖0 G! _% w0 h; `- @
if(RB2==0) //確認(rèn)是否有鍵按下
: B* I3 B% u4 m {
0 [# \. s5 d3 K" H0 L z while(!RB2); //等待按鍵釋放
4 S" R# f# Q! F2 I$ z* n CCP2CON=0x0C;' j' @, t! H& s; T# d; K" l" \- E
CCPR2L=0x96; //60%占空比
! p6 n4 q6 e! L TMR2ON=1;
4 {/ r$ l: \) n' W6 Z! l }9 n" S- O9 A4 a# [3 z7 C/ ^4 f
}. u8 h, n. q/ o2 o! z
if(RB0==0) //如果是RB0鍵按下
3 D3 e! I8 `& z4 m/ H3 B6 K8 t! U {4 v- r& c% L0 ~; S; P
delay_ms(5); //延時(shí)去抖% k8 }; Y/ C+ F r
if(RB0==0) //確認(rèn)是否有鍵按下) ~: \$ g& w' Q
{
; E8 [% ^5 f& T( z/ { J/ W while(!RB0); //等待按鍵釋放7 a/ R& |8 m0 R# h# U
CCP2CON=0x00; //關(guān)PWM
. j& c' M7 H0 \' O. g TMR2ON=0; //禁止TMR2
~6 ]" A% C; O$ u) f! u //delay_ms(5);3 c0 U! p$ g! Q2 O$ h4 o; B
RC1=0;
! s" K) `' v0 k5 E( V }
0 }1 @, ^# x+ N) p; u' p }" b, D3 I. ]5 N! v1 M' u5 U" o$ N! d
}
- @/ n+ _1 g/ M9 F3 X8 T/********主函數(shù)********/
- `- A0 s& h* k, S; }void main()
) M& t# ], W. A8 w5 b% p{% E. c9 L5 S7 p$ Y
init(); //系統(tǒng)初始化
5 p% |9 W. X2 ~, I" n PWM_Init(); //脈沖寬度初始化3 q. M% a; w* p
while(1)% A3 U, o, t9 n
{
" `# n" |# }' X G1 [ keyscan(); //調(diào)用按鍵掃描處理脈寬因數(shù)
# p6 \1 s( I' B5 z* U1 q9 e3 q/ R }4 [( B5 n! Y- }& ]% A0 j
} |