标题: PIC16单片机按键控制源程序错误 [打印本页]

作者: RINIDABA    时间: 2020-6-4 15:36
标题: PIC16单片机按键控制源程序错误
PIC16系列单片机,RA1-3引脚接按钮,三个按钮控制RC1-3引脚的高低电平变化.RA1按钮按下,RC1为高电平,RC2为高电平,RC3为低电平。
RA2按钮按下,RC1为低电平,RC2为高电平,RC3为低电平。
RA3按钮按下,RC1为高电平,RC2为高电平,RC3为高电平

下面是自己写的,但是实现不了,不知道哪里错了?求教
#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;
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;
   }
  }
}
}


1.png (31.27 KB, 下载次数: 34)

1.png

作者: RINIDABA    时间: 2020-6-4 17:44
有没有大佬教我一下,谢谢了,现在我不知道怎么改我的程序了
作者: RINIDABA    时间: 2020-6-4 17:45
有没有大佬教我一下,小弟万分感谢

作者: zjjhtony    时间: 2020-6-6 09:19
对于PIC16F877A,需要考虑端口复用的问题。
你的RA1~RA3要把ADC功能关闭了。
具体请看ADCON1这个寄存器。
下面代码增加了ADCON1=0X07,表示所有pa口都为数字口,不是ADC口。
  1. #include <pic.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. void delay(uint x)  //延时函数
  5. {
  6. uint a,b;
  7. for(a=x;a>0;a--)
  8.   for(b=110;b>0;b--);
  9. }


  10. void main()   //主函数
  11. {
  12.         TRISA=1;PORTA=0xff;
  13.         ADCON1=0X07;
  14.         TRISC=0;PORTC=0x00;
  15.         while(1)
  16.         {
  17.           if((PORTA & 0x02) != 0x02)  //判断按键是否有被按下,有则为0
  18.           {
  19.           delay(10); //去抖
  20.           if((PORTA & 0x02) != 0x02) //去抖完得再判断一次
  21.            {
  22.                  RC1=1;
  23.                  RC2=1;
  24.                  RC3=0;
  25.            }
  26.        
  27.           }
  28.         if((PORTA & 0x04) != 0x04)  //判断按键是否有被按下,有则为0
  29.           {
  30.           delay(10); //去抖
  31.           if((PORTA & 0x04) != 0x04) //去抖完得再判断一次
  32.            {
  33.                  RC1=0;
  34.                  RC2=1;
  35.                  RC3=0;
  36.         }
  37.           }
  38.         if((PORTA & 0x08) != 0x08)  //判断按键是否有被按下,有则为0
  39.           {
  40.           delay(10); //去抖
  41.           if((PORTA & 0x08) != 0x08) //去抖完得再判断一次
  42.            {
  43.                  RC1=1;
  44.                  RC2=1;
  45.                  RC3=1;
  46.            }
  47.           }
  48.         }
  49. }
复制代码





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1