对于PIC16F877A,需要考虑端口复用的问题。
你的RA1~RA3要把ADC功能关闭了。
具体请看ADCON1这个寄存器。
下面代码增加了ADCON1=0X07,表示所有pa口都为数字口,不是ADC口。
- #include <pic.h>
- #define uint unsigned int
- #define uchar unsigned char
- void delay(uint x) //延时函数
- {
- uint a,b;
- for(a=x;a>0;a--)
- for(b=110;b>0;b--);
- }
- void main() //主函数
- {
- 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;
- }
- }
- }
- }
复制代码 |