找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

PIC16单片机按键控制源程序错误

查看数: 1057 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-6-4 15:36

正文摘要:

PIC16系列单片机,RA1-3引脚接按钮,三个按钮控制RC1-3引脚的高低电平变化.RA1按钮按下,RC1为高电平,RC2为高电平,RC3为低电平。 RA2按钮按下,RC1为低电平,RC2为高电平,RC3为低电平。 RA3按钮按下,RC1为高电 ...

回复

ID:18297 发表于 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. }
复制代码
ID:725040 发表于 2020-6-4 17:45
有没有大佬教我一下,小弟万分感谢
ID:725040 发表于 2020-6-4 17:44
有没有大佬教我一下,谢谢了,现在我不知道怎么改我的程序了

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表