#include <16F887.h>            

#FUSES INTRC,NOWDT,NOPUT,NOMCLR,NOPROTECT,NOCPD,NOBROWNOUT,NOIESO,NOFCMEN,NOLVP
#use delay(clock=400000000)

#byte portb=0x06
#byte portd=0x08

// '\'모양
void d1(){
      portd=0b00000110;
      portd=0b00001001;
}

// '/'모양
void d2(){
      portd=0b00000101;
      portd=0b00001010;
}

int i=0;

void main()
{
   set_tris_b(0xff);
   set_tris_d(0xf0);
   
   for(;;){
      if(i==0){
         d1();
         if(bit_test(portb,0)==0){
            i=1;
         }
      }
      
      if(i==1){
         d2();
         if(bit_test(portb,0)==0){
            i=0;
         }
      }
   }
}


문제점 : 버튼이 눌려있는 상태에 대한 고려가 없어서 엉망임.

2010/02/24 - [PIC-44Pindemoboard] - Debounce 풀이
Debounce 예제의 방법을 이용해서 해결 한다.
#include <16F887.h>            

#FUSES INTRC,NOWDT,NOPUT,NOMCLR,NOPROTECT,NOCPD,NOBROWNOUT,NOIESO,NOFCMEN,NOLVP
#use delay(clock=400000000)

#byte portb=0x06
#byte portd=0x08

// '\'모양
void d1(){
      portd=0b00000110;
      portd=0b00001001;
}

// '/'모양
void d2(){
      portd=0b00000101;
      portd=0b00001010;
}

int i=0;

void main()
{
   set_tris_b(0xff);
   set_tris_d(0xf0);
   
   for(;;){
      if(i==0){
         d1();
         if(bit_test(portb,0)==0){
            portd=0b11111111;
            i=1;
            for(;;){ //해결 : debounce예제 방법 이용
            if(bit_test(portb,0)!=0)break;
            }
         }
      }
      
      if(i==1){
         d2();
         if(bit_test(portb,0)==0){
            portd=0b11111111;
            i=0;
            for(;;){
            if(bit_test(portb,0)!=0)break;
            }
         }
      }
   }
}


문제가 해결 된 것으로 보인다.
다음 의문 : 스위치 동작 없이 일정 시간이 흐르면 자동으로 '/'모양과 '\'모양이 변환되도록 할 순 없을까?

'(예전취미)전자회로 공부 > PIC-44Pindemoboard' 카테고리의 다른 글

44pin 데모보드 전에 올린 소스들을 보니..  (0) 2011.05.23
pin out 될 때 전압  (0) 2010.07.19
인터럽트를 이용한 도트 매트릭스 동작  (0) 2010.05.28
Hello, 2*2 Dot Matrix  (0) 2010.05.26
Hello, PortD(F0)  (0) 2010.05.24
Timer0  (0) 2010.03.01
Reversible 풀이중2  (0) 2010.03.01
SETUP_ADC_PORTS()  (0) 2010.03.01
Posted by 공돌이pooh
,