2017년 128강좌 > [BK-AVR128] LED & FND 타이머2 인터럽트로 구동

TODAY353 TOTAL2,160,364
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 2017년 128강좌 | [BK-AVR128] LED & FND 타이머2 인터럽트로 구동

페이지 정보

작성자 키트 작성일2017-09-12 15:07 조회2,100회 댓글0건

본문

 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <mega128.h>
#include <delay.h>
//
#define U08 unsigned char
#define U16 unsigned int
 
#define FU08 flash unsigned char
//
#define  LCD_PORT    PORTA
#define  LCD_C_WR    PORTB=(PORTB&0x1F)|0x80
#define  LCD_D_WR    PORTB=(PORTB&0x1F)|0xA0
//
#define  LCD_EN_1    PORTB|=0x80
#define  LCD_EN_0    PORTB&=~0x80
//
//#define  LCD_RW_1    PORTB|=0x40
//#define  LCD_RW_0    PORTB&=~0x40
//
//#define  LCD_RS_1    PORTB|=0x20
//#define  LCD_RS_0    PORTB&=~0x20
//
U08 fnd[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF}; //애노드
U08 led_buf=0,fnd_buf[8]={0,},digit=5;
//
void LCD_DATA(U08 d){ LCD_PORT=d; LCD_D_WR; delay_us(1); LCD_EN_0; delay_us(50); }
void LCD_CMD (U08 c){ LCD_PORT=c; LCD_C_WR; delay_us(1); LCD_EN_0; delay_ms( 3); }
void LCD_POS(U08 c,U08 r){ LCD_CMD(0x80|(c+r*0x40)); }
void LCD_CLR(void){ LCD_CMD(1); }
void LCD_STR (U08  *s){ while(*s)LCD_DATA(*s++); }
void LCD_STRf(FU08 *s){ while(*s)LCD_DATA(*s++); }
//
void LCD_INIT(void){
    delay_ms(50);
    LCD_CMD(0x38); LCD_CMD(0x38); LCD_CMD(0x38);
    LCD_CMD(0x0E); LCD_CMD(0x06); LCD_CLR();
}
//
interrupt [TIM2_COMP] void timer2_comp_isr(void){ //100us
  static U08 cnt2=0,fnd_cnt=0;
  switch(cnt2){
    case 0: PORTA=~led_buf; PORTF|=8; PORTF&=~8; break// led out
    case 1: // fnd out
      PORTA=0; PORTF|=4; PORTF&=~4;          // common off
      PORTC=fnd[fnd_buf[fnd_cnt]];           // segment data
      if(fnd_cnt==digit)PORTC&=~0x80;        // digit out 
      PORTF|=2;PORTF&=~2;                    // 573 segment out
      PORTA=1<<fnd_cnt; PORTF|=4; PORTF&=~4; // common out
      if(++fnd_cnt>7)fnd_cnt=0;  
      break;
    case 2: break;
    case 3: break;
    case 4: break;
    case 5: break;
    case 6: break;
    case 7: break;
    case 8: break;
    case 9: break;
  }
  if(++cnt2>9)cnt2=0; 
}
//
void main(void){
  DDRA=0xFF;  // FND_COMMON & LED & lcd data
  DDRC=0xFF;  // FND_SEGMENT
  DDRB=0xE0;  // LCD control
  DDRF=0x0E;  // 573_sel
  led_buf=0;  // led off
  TCCR2=0x0B; OCR2= 24; TIMSK=0x80; //16000000/64/(1+ 24),100us
  LCD_INIT();
  SREG=0x80;
  while(1){
    led_buf=1; fnd_buf[0]=1; LCD_POS(0,0); LCD_STRf("1"); delay_ms(500);
    led_buf=0; fnd_buf[0]=0; LCD_POS(0,0); LCD_STRf("0"); delay_ms(500);
  }
}

타이머2 인터럽트 주기를 100us로 설정하고
1ms 주기로 100us마다 10개로 나누어서 시분할 구동을 합니다.
처음 0~100us는 LED
다음 100~200us는 FND
.
.
나머지는 비어있습니다.

LED만 보면 1ms마다 값을 출력하고
FND만 보면 1ms마다 한 자리씩 차례로 출력합니다.
비어있는 구간은 나중에 다른 것들을 구동해야겠습니다.^^


LED 출력은 여기에 여러개의 예제가 있으니 돌려보세요

동작시켜본 분은 답글로 인증샷 또는 동영상 남겨주세요^^ 

댓글 0

조회수 2,100

등록된 댓글이 없습니다.

2017년 128강좌HOME > 2017년 128강좌 목록

2017년 128강좌 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 9621
공지 사이트 이용 안내댓글[24] master 17-10-29 29592
31 [BK-AVR128] WS2812B 키트 17-09-12 1777
30 [BK-AVR128] LCD 시간표시 키트 17-09-12 2254
29 [BK-AVR128] KEY 매트릭스 추가 키트 17-09-12 1785
28 [BK-AVR128] DS1302(RTC) read & write 키트 17-09-12 2465
현재글 [BK-AVR128] LED & FND 타이머2 인터럽트로 구동 키트 17-09-12 2101
26 [OpenM128] NRF24L01 RF Board (B) 키트 17-09-12 1868
25 [OpenM128] FAT45DBXX DataFlash Board 키트 17-09-12 1470
24 [OpenM128] FT245 USB FIFO Board (mini) 키트 17-09-12 1626
23 [OpenM128] PCF8563 RTC Board 키트 17-09-12 1487
22 [OpenM128] PL2303 USB UART Board (mini) 키트 17-09-12 1717
21 [OpenM128] AD Keypad 키트 17-09-12 1688
20 [OpenM128] 2.2inch 320x240 Touch LCD (A) 키트 17-09-12 2112
19 [OpenM128] Hardware design 이미지 키트 17-09-12 1809
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기