led가 다 켜져있다가 맨끝부터 하나씩 차례로 꺼지는 프로그램인데
다 켜진상태에서 시작을 안하고 맨끝이 꺼진상태부터 시작해서 반복때도 다 안켜지고 하나 꺼진거부터 도네.
(0x00상태가 다 켜진거고 0xff상태가 다 꺼진거야.)
어디가 문제길래 이런현상이 나오는거임???
#include<reg51.h>
void delay(unsigned int i) //시간지연함수
{
while(i--);
}
void main(void)
{
unsigned char led;
led=0x00;
do{
if(led==0xff) led=0x00;
led=(led>>1) | 0x80; // 오를쪽으로 시프트하고 빈자리에 1채움
P1=led;
if(led==0xff) led=0x00;
delay(0xb100);
}while(1);
}
P1이 LED 배열 나타내는놈임? led값이 0x00일때 P1에 적용되기 전에 이미 한번 시프트된 상태로 가는거라 그런거같은데
P1이 led출력함수라고 보면 됨. 나도 0x00일때 바로 시프트되서 출력되는것같다고 느끼긴하는데 어떻게 수정을 해야 될지 모르겠어
do->P1=led -> if(다 꺼짐)다 킴 else 시프트 -> 딜레이 ->while 순으로 하면 안되려나?
어 좋은 의견인데 한번 해볼께. 고마워. for문 스위치문 if문으로 다 만들어본다음 시프트와 로직만을 이용해서 만들어보라해서 굳이 이틀안에서만 생각했네. 로직, 시프트에 if else문 넣을 생각을 아예 안하고 있었다.
저기서 지연시간을 1초로 바꿀 땐 뭘고 써야됨?