#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 |