BASIC4MCU | 8051/PIC | 8051 | 2개 스위치 입력 해서 4개 LED 시프트 시키기
페이지 정보
작성자 키트 작성일2017-09-12 10:05 조회1,115회 댓글0건본문
// P2.0 SW1
// P2.1 SW2
// P1.0~P1.3 LED
//-----------------------------------------------------
//SW정논리, LED정논리 동작인경우
//-----------------------------------------------------
#include <AT89C51.h>
void delay(long i){ while(i--); }
void main(void)
{
char i=0;
P1 = 1<<i;
while(1){
if(P2 & 0x03){ //키가 하나라도 눌리면
if( P2_0 ) i++; //왼쪽으로 시프트
else if( P2_1) i--; //오른쪽으로 시프트
if((i>3)||(i<0))i=0; //값이 비트3 넘어가면 비트0
P1 = 1<<i; //i값에 해당하는 비트를 1
while(P2 & 0x03); //키 누름 끝낼 때까지 대기
delay(3000); // 위에서 키에서 손 떼는 것을 기다리므로 딜레이를 조금만 줌
};
};
}
//-----------------------------------------------------
//SW부논리, LED부논리 동작인경우
//-----------------------------------------------------
#include <AT89C51.h>
void delay(long i){ while(i--); }
void main(void){
char i=0;
P1 = ~(1<<i);
while(1){
if((P2 & 0x03)!=0x03){
if( !P2_0 ) i++;
else if( !P2_1) i--;
if((i>3)||(i<0))i=0;
P1 = ~(1<<i);
while((P2 & 0x03)!=0x03);
delay(3000);
};
};
}
직접 테스트 해본 것은 아니고 눈으로만 코딩 해봤습니다.
버그 있으면 알려주세요 ^^
8051은 스위치 눌렀을 때에 1이 되게 하려면
스위치를 +5V에 연결 해야하며 풀다운 저항을 내부 풀업저항에 비해서 상당히 작은 값을 연결 해야 합니다.
내부 풀업저항의 1/20 저항 값일 때에 0.25V이므로 1K옴 이하를 걸어주면 안전하게 0V 인식이 됩니다.
1일 때에 LED를 구동 하면
8051 포트의 High 출력의 전류는 순전히 내부 풀업 저항에 의존한 전류 밖에 안나옵니다.
따라서 포트 외부에 풀업저항을 걸어줘야 하는데 그경우 불필요한 전류가 계속 소모됩니다.
0일 때에 LED가 구동되게 회로를 구성 하는 것이 좋습니다.
외부에 풀다운 혹은 풀업저항 없이 사용하려면, 스위치나 LED를 부논리로 사용하는 것이 좋습니다.
댓글 0
조회수 1,115등록된 댓글이 없습니다.