對于PIC16F877A,需要考慮端口復用的問題。
你的RA1~RA3要把ADC功能關(guān)閉了。
具體請看ADCON1這個寄存器。
下面代碼增加了ADCON1=0X07,表示所有pa口都為數(shù)字口,不是ADC口。
- #include <pic.h>
- #define uint unsigned int
- #define uchar unsigned char
- void delay(uint x) //延時函數(shù)
- {
- uint a,b;
- for(a=x;a>0;a--)
- for(b=110;b>0;b--);
- }
- void main() //主函數(shù)
- {
- TRISA=1;PORTA=0xff;
- ADCON1=0X07;
- TRISC=0;PORTC=0x00;
- while(1)
- {
- if((PORTA & 0x02) != 0x02) //判斷按鍵是否有被按下,有則為0
- {
- delay(10); //去抖
- if((PORTA & 0x02) != 0x02) //去抖完得再判斷一次
- {
- RC1=1;
- RC2=1;
- RC3=0;
- }
-
- }
- if((PORTA & 0x04) != 0x04) //判斷按鍵是否有被按下,有則為0
- {
- delay(10); //去抖
- if((PORTA & 0x04) != 0x04) //去抖完得再判斷一次
- {
- RC1=0;
- RC2=1;
- RC3=0;
- }
- }
- if((PORTA & 0x08) != 0x08) //判斷按鍵是否有被按下,有則為0
- {
- delay(10); //去抖
- if((PORTA & 0x08) != 0x08) //去抖完得再判斷一次
- {
- RC1=1;
- RC2=1;
- RC3=1;
- }
- }
- }
- }
復制代碼 |