刚学PIC,不明白一个问题,请教大侠,谢谢先

2020-02-09 11:26发布

是这样的,我想用按键控制灯,按一下,LED亮,按一下灭,PORTC_0脚接按键,PORTD_0接LED.程序如下:
LED#include <pic.h>
#include <pic1687x.h>
#include"delay.h"

void main(void)
{
  unsigned char ID=0;
  TRISD&=~0X01;//所有D0端口输出
  PORTD&=~0X01;//所有D0端口输出低电平
  TRISC=0X00;//
  PORTC|=0X01;//所有C0端口输出高电平
  
while(1){  
         
             if(RC0==0)
          {
            delay_nms(10);  
            if(RC0==0)
              {
               ID++;
              }
          }      
      switch(ID)
      {
       case 1: PORTD=0x01;
       break;
       case 2:  PORTD=0X00;
                ID=0;
       break;
       default:
       break;
      }
   }
}
按道理是要先把PORTC_0这个脚方向置为输入 TRISC=0X01;但结果是按键控制不了,灯一闪一闪的,把它改成TRISC=0X00,就可以了,不知怎么回事,望熟手指点下,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
windingway
2020-02-10 03:23
5楼说得对,trisc=0x00是PORTC全部为输出状态,无法检测输入变化了。
想让小灯亮灭受按键控制,也就是按键导致输出状态翻转,这样倒是没有必要用switch(ID)函数,按键检测最好能检测松开作为有效,按下-松开,然后翻转PORTD0就行啦。下面的代码可能性,我没验证,我用的不是HiTec的编译器,代码有所差异

trisc0 = 1;
trisd0 = 0;


if(portc0 == 0)
{
   delay_ms(10); //去抖动
   if(portc0 == 0)  //确定有按键按下
   {
     while(portc == 0){} //等待按键松开
     portd0 = !portd0;
   }
}

一周热门 更多>