(초보용)led 순차점등에 대해서 질문드립니다 ,,( pic16F877A)
돌심보
질문 제목 : led 순차 점등 .......에서 질문드립니다
질문 요약 :1.○○○○○○●● 2.○○○○○●●○ 3.○○○○●●○○ 4.○○○●●○○○
5.○○●●○○○○6.○●●○○○○○ 7.●●○○○○○○ 8.●○○○○○○●
질문 내용 : 위처럼 엘이디를 순차적으로 좌로시프트하면서 불을켜는건데요 ..
#include 16F877A.h
#byte port_d=8
#use delay (clock=11059200)
main () {
int8 led;
set_tris_d(0);
led=0x03;
do {
port_d = ~led;
led=1;
if (led==0) led = 0xc0;
if (led==0) led = 0x81;
delay_ms (1000);
} while(1);
}
이렇게 짜서 해봤더니 마지막에위에7번이 켜진후 ●○○○○○○○ 이렇게만 들어왔다가 ○○○○○○●●다시 1번부터 시작을 하는데 .. 도저히 이유를 모르겠습니다
제가 시작한지 1주일정도밖에 안되서..이렇게 도움의 손길을 구합니다 ..
-
초코홀릭
아... 제가 아직완전초보라 이해는 잘안되지만 답변 너무 감사합니다 ..
한번 실행해 보겠습니다 ( __) ,감사합니다 수다님. -
얀
아! 죄송합니다. 잘못 답변해드렸네요.
0x03을 왼쪽으로 하나씩 shift하면 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0이 됩니다.
0xC0에서 한번더 왼족으로 shift하면 0x80이 되는데요. (0x180에서 아래쪽의 8비트만 취하게 됩니다)
이렇게 되면 원하던 결과를 얻을 수 없어서
0xC0 다음에는 0x81이 되도록 해야 합니다.
if(led == 0x80) led = 0x81;
0x81을 왼쪽으로 한칸 shift하면 0x0 -
하람
1. 질문게시글을 작성할 때는 긁기방지(오른쪽비허용)을 하지 않는 편이 좋습니다.
2. if(led == 0) led = 0xC0; 때문이네요. 왜인지는 한번 따라가보면 이해가 될겁니다.