1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.
판매자 | 아크마 | 판매 납포인트 | 무료 | 평점 | 3.8점 / 총 9명 참여 |
---|
//------------------------------------------------------------------------------ // LED MODULE TEST PROGRAM SamKwang SMM-51616 //------------------------------------------------------------------------------
// MPU: ATmega128-16au // Clock: 16Mhz // modified by akma @090303
#include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h>
#ifndef BV #define BV(bit) (1<<(bit)) #endif #ifndef cbi #define cbi(reg,bit) reg &= ~(BV(bit)) #endif #ifndef sbi #define sbi(reg,bit) reg |= (BV(bit)) #endif
#define outp(bit,reg) reg = bit
#define red_on sbi(PORTA,0) #define red_off cbi(PORTA,0) #define green_on sbi(PORTA,1) #define green_off cbi(PORTA,1) #define enable_on sbi(PORTA,2) #define enable_off cbi(PORTA,2) #define latch_on sbi(PORTA,3) #define latch_off cbi(PORTA,3) #define clock_on sbi(PORTA,4) #define clock_off cbi(PORTA,4) #define addr PORTC
volatile unsigned int addr_buf; volatile unsigned char reset_count; volatile unsigned char data_count; volatile unsigned int cursor_count; volatile unsigned int cursor;
void display(void); void port_init(void); void timer0_init(void);
unsigned int const led_red[100] = { 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0380 , 0x06E0 , 0x0420 , 0x0420 , 0x03C0 , 0x0000 , 0x0360 , 0x0340 , 0x0240 , 0x0240 , 0x07FE , 0x0600 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0780 , 0x0040 , 0x00C0 , 0x0300 , 0x0620 , 0x03D0 , 0x0180 , 0x0100 , 0x07F8 , 0x0C00 , 0x0000 , 0x00E0 , 0x01B0 , 0x0110 , 0x0110 , 0x00E0 , 0x0000 , 0x0000 , 0x0000 , 0x3C78 , 0x7EFC , 0xFEFE , 0xFFFE , 0xFFFE , 0xFFFE , 0x7FFE , 0x7FFC , 0x7FFC , 0x3FF8 , 0x1FF0 , 0x1FF0 , 0x0FE0 , 0x07C0 , 0x0380 , 0x0100 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 };
unsigned int const led_green[100] = { 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0380 , 0x06E0 , 0x0420 , 0x0420 , 0x03C0 , 0x0000 , 0x0360 , 0x0340 , 0x0240 , 0x0240 , 0x07FE , 0x0600 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0780 , 0x0040 , 0x00C0 , 0x0300 , 0x0620 , 0x03D0 , 0x0180 , 0x0100 , 0x07F8 , 0x0C00 , 0x0000 , 0x00E0 , 0x01B0 , 0x0110 , 0x0110 , 0x00E0 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0008 , 0x0008 , 0x1C08 , 0x3718 , 0x2110 , 0x211F , 0x1E10 , 0x0010 , 0x0010 , 0x0010 , 0x0010 , 0x0010 , 0x0010 , 0x0010 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0780 , 0x0040 , 0x00C0 , 0x0300 , 0x0620 , 0x03D0 , 0x0180 , 0x0100 , 0x07F8 , 0x0C00 , 0x0000 , 0x02E0 , 0x0330 , 0x0220 , 0x0268 , 0x0278 , 0x0260 , 0x0000 , 0x0000 , 0x0000 };
//----------- Timer0(8bit) Interrupt service ---------------------------------- SIGNAL(SIG_OVERFLOW0){ outp(0x04, TCCR0); // CLK/64 prescale outp(0x06, TCNT0); // 1msec
cursor_count++; if(cursor_count>70){ cursor_count=0; cursor++; if(cursor>84){ cursor=0; } }
display(); } //-----------Port Initialize --------------------------------------------------- void port_init(void){ PORTA=0x00; DDRA=0x1f;
PORTC=0x00; DDRC=0x0f;
red_off; green_off; clock_off; enable_off; latch_on; addr_buf=0x0f; addr=addr_buf;
} //----------- Timer0(8bit) Initialize ------------------------------------------ void timer0_init(void){ outp(BV(TOIE0), TIMSK); // T0 overflow interrupt Enable outp(0x04, TCCR0); // CLK/64 Prescale outp(0x06, TCNT0); // 1msec } //--------- system_Initialize routine ------------------------------------------ void system_initialize(void){ cli(); // Global interrup Disable port_init(); timer0_init(); sei(); // Global Interrup Enable } //------------------------------------------------------------------------------ void display(void){ unsigned char i; unsigned int red_buf; unsigned int green_buf; enable_on; if(reset_count==0){ reset_count=1; data_count=0; } red_buf=led_red[data_count+cursor]; green_buf=led_green[data_count+cursor]; for(i=0; i<16; i++){ if(red_buf&0x8000){ red_on; } else{ red_off; } if(green_buf&0x8000){ green_on; } else{ green_off; } clock_on; clock_off; red_buf<<=1; green_buf<<=1; } data_count++; if(data_count>=16){ data_count=0; reset_count=0; } latch_off; latch_on; addr_buf++; if(addr_buf==16){ addr_buf=0; } addr=addr_buf; enable_off; } //--------- mian program routine ----------------------------------------------- int main(void) {
system_initialize(); while(1){
} }
저놈 잔상이 생겨서 예전에 삽질했던 기억이 나네요.
아크릴 붙이시다니 저 귀찮은 작업을 ^^;;;;
멋져요!~~~~