본문 바로가기

카테고리 없음

마이크로프로세서_LED

반응형

void setup() {
  // put your setup code here, to run once:
  //설정값 넣기 - 전원이 들어오는 순간, 모든 설정값이 초기화 되어서 전원을 넣은 후 초기 옵션값을 설정해야 한다. 
  DDRB = 0xff; // 포트B 쓴다
  max_send_add_data(0x09,0x00); //디코드 하지 않겠다. 01, 0F 등등 있긴한데 00만 사용. 
  max_send_add_data(0x0a,0x01); //주사율 설정. 3/32로 설정표 보고 원하는대로 조정 가능.
  max_send_add_data(0x0b,0x07); //몇비트 스캔하는지 정함. 일반적으로 8비트 다 써서 07
  max_send_add_data(0x0c,0x01); //동작 안할때 - 기본동작모드 
  max_send_add_data(0x0f,0x00); //디스플레이 테스트 모드는 모든  LED 키는게 목적 - 기본동작모드 

}

void loop() { //계속 루프함.
  // put your main code here, to run repeatedly:
  max_send_add_data(1,7); 

}

void max_send_add_data(char add, char data){
  PORTB = 0x0;
  max_send(add); 
  max_send(data);
  PORTB = 0x1 << 2; // 1 에서 시프트를 통해 100이 되어 4가 도출.
  //ㄴ 아래 사항을 4번 반복
}

void max_send(char data){ //레지스터 입력 프로세스 (중요)
  for(int i = 0; i < 8; i++){ //0~7까지 8비트 
    int send_data = (data >> (7-i)) & i; 
    // ㄴ data 를 (7-i)만큼 우측 시프트 한 것을 and 연산자를 하여 같을때 1 도출 = 출력
    // 
    PORTB = send_data;
    PORTB != 1<<i; //특정 비트를 1로 연산한다. 
    PORTB = PORTB & ~(1<<i); // PORTB &= ~(1<<i)  특정비트를 0으로 연산한다. 
    //ㄴ 이를 통해 한줄씩 켜짐 ?
  }
}

반응형