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


