主要的程序我也貼上來各位看一下# o# S w- J8 ?: f+ n
5 q1 O; Y% H4 S4 U n
/********端口初始化函數********/" y) M' |" {8 g2 o7 H; @3 u1 a
void init()2 U4 Q q8 \) {* N) J! n M
{
4 a" A1 V$ [* X9 Y ANSELH=0x00; //設置B口為數字I/O口
7 s9 J, h) R0 b9 K( | OPTION_REG=0x00;
. Y8 @& Y: |! _ WPUB=0xFF; //設置B口弱上拉
a+ b0 r9 |6 J INTCON=0x00; //關總中斷, d+ q! L7 ^; {3 `+ J; h
PIE1=0; //PIE1的中斷禁止2 G7 {& l# q, q, T
PIE2=0; //PIE2的中斷禁止
; D/ ?, X& T8 c TRISB0=1;
) l3 l* k, g) o% J4 z TRISB1=1; //將RB1設置為輸入口,按按鍵
6 s. E/ O% m% u4 V0 x3 d0 @. \( u TRISB2=1; //將RB2設置為輸入口,按按鍵4 y, W) s* S4 ~
TRISB3=1;# w1 y9 b( W: `' Z% i- c
TRISB4=1;
9 u- U( g& V, H1 W RC1=0;
0 x* N, F/ D0 g TRISC1=0; //脈寬調制輸出引腳,設置為輸出4 M4 ^0 `1 r) y0 z, L
}
3 {! W1 f* |; T0 t9 y$ ?, F/********PWM初始化函數********/
0 Z0 ?9 f' W8 U) Bvoid PWM_Init(); v7 p' V7 B# [0 ~- W7 y
{
8 \' T# L. ?% }, J) M PR2=249; //脈寬調制波形的周期為1000us , p' E: a4 G0 I% _! r8 x7 g" b! O
CCP2CON=0x0C; //CCP2模塊工作在PWM模式,占空因數的低兩位為00
! r# Q" q* s: F6 H7 S4 V# b T2CON=0x02; //禁止TMR2,且前后分頻值為16,同時開始輸出PWM
; Q, _! y. t: W4 R" @ CCPR2L=0xB8; //脈寬調制波形的占空比初始值
" @8 i) P7 `2 X" P3 ~3 M) C! X}9 K' y$ W- `9 x2 s' p0 ], w
/********鍵盤掃描函數******* */
2 N- G+ Y) _- C9 @2 N7 z8 v% ?0 P& Lvoid keyscan()
/ k x/ U& c% s2 k{+ R. @+ N% P4 ]: |5 r( f2 f2 T
if(RB1==0) //如果是RB1鍵按下
! h4 }' Q7 M6 K" {8 n {
+ P/ d3 }. j1 M9 d( m4 S) s delay_ms(5); //延時去抖
& \+ q- C R: x* Y3 Q if(RB1==0) //確認是否有鍵按下
6 X. w* Y8 X2 M z, z6 K {
4 z$ K7 O1 Q- e2 E5 r: D while(!RB1); //等待按鍵釋放( {# b& P* |5 A. L4 Z9 |" g* O
CCP2CON=0x0C;
6 M, I; G: q' z% ^1 E CCPR2L=0xB8; //80%占空比
! D+ f. s: m6 z h6 f/ I TMR2ON=1;$ V7 Z! i' A. X
}
1 ^$ j7 v3 s" m2 l }- Y, S I4 Z0 c, M% M
if(RB2==0) //如果是RB2鍵按下
- j, V" V( h( Y {
8 H2 S4 ?9 O, @0 I delay_ms(5); //延時去抖
) S+ V- @/ L& s- ?$ | if(RB2==0) //確認是否有鍵按下! B: a2 K: i, S$ Q6 f7 j6 ^4 }
{
) h0 B& b M$ J2 d* t) a! h4 C. d while(!RB2); //等待按鍵釋放
( f @- Q+ v+ J- L5 e7 B( A CCP2CON=0x0C;# E% D. c2 @ j9 c3 U" w( V
CCPR2L=0x96; //60%占空比8 h9 c$ s y0 `
TMR2ON=1;1 }! Q; U' ] H0 m k* b
}
& v! n8 ] h) M4 e }
* i: m- S- E; r* W; W if(RB0==0) //如果是RB0鍵按下6 e- S: L! [4 [
{& E5 W) m* z8 Y
delay_ms(5); //延時去抖3 t' r, _4 w( t, j( t' X6 i
if(RB0==0) //確認是否有鍵按下1 z0 B# W) U6 ?7 @! H, l1 k
{
& [' q: F/ U/ O! H4 P# A while(!RB0); //等待按鍵釋放
' Z/ `3 U6 X9 v5 C6 R$ } CCP2CON=0x00; //關PWM& _# j9 ?# B: z( Q3 q+ Z
TMR2ON=0; //禁止TMR22 a/ D! `- k% ]: d
//delay_ms(5);
7 n" z4 {. F) o0 |2 r( _ RC1=0;
3 k% g* T/ |+ b# n- w }
) C# g) ~+ m, B1 w2 r4 b; S }6 h( g9 a! M) m0 k; O |
}. |+ d& B) ^' M) r. t
/********主函數********/
: n- W& R( @8 r# `/ M tvoid main()
2 P% H* j0 m' K$ U{' K, B0 A7 z+ G2 w4 P
init(); //系統初始化
, d' W+ \, z- ]0 m PWM_Init(); //脈沖寬度初始化
. y9 @8 J; G% Y' t while(1)9 \! F" i h7 d- {% y7 a
{
2 b+ S$ t2 i9 L2 ~ keyscan(); //調用按鍵掃描處理脈寬因數, n# u5 B/ E ^. k. o& S
}
6 }5 X1 Q. D- C+ H2 |} |