找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1007|回复: 3
打印 上一主题 下一主题
收起左侧

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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:725040 发表于 2020-6-4 17:44 | 只看该作者
有没有大佬教我一下,谢谢了,现在我不知道怎么改我的程序了
回复

使用道具 举报

板凳
ID:725040 发表于 2020-6-4 17:45 | 只看该作者
有没有大佬教我一下,小弟万分感谢
回复

使用道具 举报

地板
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. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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