마이크로프로세서 수업 Dot Matrix 예제 실습 (NewTC test board) Programing










#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>

#define EX_DM_SEL  (*(volatile unsigned int *)0x8004)  
#define EX_DM_DATA  (*(volatile unsigned int *)0x8006)

//int dm_data[10] = {0x000, 0x0cc, 0x1fe, 0x3ff, 0x3ff, 0x1fe, 0x0fc, 0x078, 0x030, 0x000};   하트

int dm_data[3][10] = {0x148, 0x148, 0x1cc, 0x148, 0x1c8, 0x000, 0x0f8, 0x008, 0x008, 0x008,
     0x030, 0x048, 0x084, 0x084, 0x048, 0x030, 0x000, 0x1fe, 0x030, 0x030,
     0x000, 0x1e8, 0x128, 0x128, 0x1e8, 0x000, 0x080, 0x080, 0x0f8, 0x000};

int temp[10] = {0};

int dmi = 0;

__inline void dot_matrix()
{
 EX_DM_SEL = (1<<dmi);
 EX_DM_DATA = temp[dmi];//dm_data[i][j%10];

 dmi++;
 if(dmi>9)
  dmi = 0;
 
}

__inline void move(int j)
{
 int k, z, w;
 
 for(k = 0; k <36; k++)
 {
  
  for(z = 0; z <9; z++)
  {
   if(k < 9)
    temp[z] = temp[z] = (dm_data[0][z] >> (9-k));
   else if (k >= 9 && k <18)
    temp[z] = (dm_data[0][z] << (k-9)) | (dm_data[1][z] >> (18-k)) ; 
   else if (k >= 18 && k < 27)
    temp[z] = (dm_data[1][z] << (k-18)) | (dm_data[2][z] >> (27-k));
   else
    temp[z] = dm_data[2][z] << (k-27);


  }

  for(w = 0; w < 50; w++)
  {
   dot_matrix();
   _delay_ms(10);
  }

  
 } 
}

void main()
{
 int j;
 
 PORTA = 0X00;
 DDRA = 0XFF;
 PORTB = 0X00;
 DDRB = 0X00;
 PORTC = 0X00;
 DDRC = 0X03;
 PORTD = 0X00;
 DDRD = 0X00;
 PORTG = 0X00;
 DDRG = 0X03;

 MCUCR = 0X80;


 while(1){
  move(j);
 }

}

-----------------------------------------------------------------------------------------

복수 전공을 하는 컴공 마이크로프로세서 응용 수업에서 한

이름 출력 도트 매트릭스 프로그램 입니다

전자 명찰 이라고 생각하시면 되겠네요

늘 그렇듯이(뻥) 전 주석을 안다는 주의라(뻥)

주석이 없습니다

혹여 궁금하신게 있다면 댓글 달아주세요


덧글

댓글 입력 영역