主要的程序我也貼上來各位看一下% e) ?5 S/ p8 H" B" V* [
# L9 P- m; E9 s7 k5 d! W9 K% F
/********端口初始化函數********/
/ P6 T8 c) c. d( I! Ovoid init()
( @7 G/ ]8 c; ^! }9 V0 }5 n Z{
; ^2 ^3 k" r' Y ANSELH=0x00; //設置B口為數字I/O口
3 N5 v* U1 L% P' D2 h% j OPTION_REG=0x00;/ g7 e- [* |. H4 b+ n
WPUB=0xFF; //設置B口弱上拉6 E- U+ _4 S% x r Y# ~
INTCON=0x00; //關總中斷
" T0 N g: [) X/ A/ q& U; Z- T% ]" a% u w PIE1=0; //PIE1的中斷禁止
9 ]0 |9 J( f, b2 N" y! k! o0 o, | PIE2=0; //PIE2的中斷禁止3 @0 H' @( J: T0 Q4 |
TRISB0=1;
+ q* a! Y2 X# M( `) K5 ?7 g9 H' a# r TRISB1=1; //將RB1設置為輸入口,按按鍵
: e+ { U4 T" G1 S7 H. y% E* _ TRISB2=1; //將RB2設置為輸入口,按按鍵3 i$ |) Q- r, d; }/ ?) U
TRISB3=1;
! d9 j) f1 d$ o+ D4 D! r TRISB4=1;
8 @3 O( Q/ e- e; F RC1=0;& B. m0 a0 N' M) X! ]+ U( s
TRISC1=0; //脈寬調制輸出引腳,設置為輸出, I# {& X" g4 h4 D6 [
}7 ~4 y0 d3 ^" G4 w8 L' p! p
/********PWM初始化函數********/2 Z( o" C b# D
void PWM_Init()
4 ~# E2 J8 x; Z5 Z; a{2 z2 M1 ]0 `' {6 b
PR2=249; //脈寬調制波形的周期為1000us
/ M9 _6 |1 B; W$ Z CCP2CON=0x0C; //CCP2模塊工作在PWM模式,占空因數的低兩位為00
% l! x% O! S, G4 s; n% d T2CON=0x02; //禁止TMR2,且前后分頻值為16,同時開始輸出PWM
) u' w a9 l& O2 i4 [1 r& O CCPR2L=0xB8; //脈寬調制波形的占空比初始值
. ?5 g( R) u E+ {, w- R. h/ U}
( l9 T" Y/ ~$ m4 M* u/********鍵盤掃描函數******* */
2 N8 E4 h% g7 k& b' \void keyscan(), \. J* ?0 m* V( b4 c
{
( H9 b6 k0 ]. [0 C1 G if(RB1==0) //如果是RB1鍵按下
2 G5 M( r& X7 t- T) L- s0 A1 a {
$ B/ J8 t' R% K( ]/ c# V' d delay_ms(5); //延時去抖
' z- ?0 F; F5 V. e$ a if(RB1==0) //確認是否有鍵按下1 ^& S/ b4 o3 x$ H8 C4 o
{
6 M, G8 z( c7 E/ m, t while(!RB1); //等待按鍵釋放! o% r4 J; {5 Y9 J; i
CCP2CON=0x0C;
& G1 F7 `' V9 x: m G CCPR2L=0xB8; //80%占空比
/ ~6 T! V, w. `3 ~: R/ } TMR2ON=1;
9 @. f9 ^6 U3 Y' B+ r: K }
# p+ @& D. r% s9 A }
/ O* K8 Z- U* |6 W$ ^ if(RB2==0) //如果是RB2鍵按下* o0 C+ p, Z, C+ V6 I
{
+ S: T# U, f3 H- z, y6 x% Z( m, f( ]3 o delay_ms(5); //延時去抖 b$ T- E6 \5 V! Z
if(RB2==0) //確認是否有鍵按下3 P! c0 I" L( a( s- s1 F9 M
{
; l+ o7 H1 q4 j, @1 C while(!RB2); //等待按鍵釋放
: d7 T0 k! E2 ~, a$ A: H CCP2CON=0x0C;
+ Z8 l4 Q5 f: ]- h8 {5 a CCPR2L=0x96; //60%占空比/ P9 q' a3 a! F& e& t) C
TMR2ON=1;. `7 ^% `) n g* r- r. X
}
4 q% U' a; {( k( r( U* e7 _2 M }7 c! v1 g1 x2 n3 o- W( n$ u
if(RB0==0) //如果是RB0鍵按下
$ l6 C$ k+ ?' f {
& e2 Q: o( [. b/ v: } F0 k delay_ms(5); //延時去抖
4 _& B8 _! n1 X4 V if(RB0==0) //確認是否有鍵按下
4 ?+ z S2 e- a* o% Y; C9 l {
: I! Z9 d* @+ B, z g while(!RB0); //等待按鍵釋放7 v# y3 g7 i' F; P1 U. q
CCP2CON=0x00; //關PWM. F) o: c! r3 c/ j5 Y
TMR2ON=0; //禁止TMR2
5 k* u0 c O2 ~9 z, ? //delay_ms(5);
# U6 N O. i; @( T RC1=0;& m! \ q& J: f; [8 X# Y V C
}
: Y: u% L; M7 p4 z: w$ X }; m0 e1 l/ v% L3 p- P, R
}; m Z; z; R, a" X1 j `
/********主函數********// p. W8 W' U4 P) ]
void main()
) {" H7 M* ^7 j4 D{
6 S* |" k- N' I9 I1 H8 O init(); //系統初始化
2 Q8 ] z' \0 T" a6 c2 m/ {. s5 O PWM_Init(); //脈沖寬度初始化7 D# w3 x9 G E
while(1)
: h) x1 p, ]$ T. p {, ~- N0 p4 o7 r8 H4 f+ b
keyscan(); //調用按鍵掃描處理脈寬因數. J! X; c8 [4 c0 }
}
- i( u2 z1 ?& s3 }2 O! P} |