AVR 따라하기 > 096 - [타이머 CTC 토글-3] 스위치 8개 피아노

TODAY700 TOTAL241,215
사이트 이용안내
Login▼/회원가입
포럼 동영상강좌 회원가입


BASIC4MCU 후원업체 최신 정보

BASIC4MCU | AVR 따라하기 | 2015년 강좌 | 096 - [타이머 CTC 토글-3] 스위치 8개 피아노

페이지 정보

작성자 키트 작성일2017-08-23 16:33 조회424회 댓글0건

본문

	

 

3660040649_rx5casnW_25C125A625B825F1_25BE25F825C025BD.PNG3Ftype3Dw740
스피커 연결

3660040649_hN1HkFzI_25C125A625B825F1_25BE25F825C025BD1.PNG3Ftype3Dw740
스위치 8개

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
//--------------------------------------------------------
// CVAVR
// [타이머 CTC 토글-3] 스위치 8개 피아노
//--------------------------------------------------------
#include <mega128.h>
#include <delay.h>
// pitch
#define Do   0
#define DoS  1
#define Re   2
#define ReS  3
#define Mi   4
#define Fa   5
#define FaS  6
#define Sol  7
#define SolS 8
#define La   9
#define LaS  10
#define Ti   11
//
unsigned int ocr1a[7][12]={
    30577,28860,27240,25711,24268,22906,21620,20407,19261,18180,17160,16197,
    15288,14429,13619,12855,12133,11452,10809,10203963090898579,64791,
    61155,57722,54482,51424,48538,45814,43242,40815,38524,36362,34321,32395,
    30577,28860,27240,25711,24268,22906,21620,20407,19261,18180,17160,16197,
    15288,14429,13619,12855,12133,11452,10809,102039630908985798098,
     764372146809642760665725540451014814454442894048,
     360634043213303228622701255024062271214420231910
// , 1802, 1701, 1606, 1515, 1430
};
//
int cnt=0;
// 
void sound(char octave, char pitch){
    if(octave>6)octave=6;
    if(pitch>11)pitch=11;
    if((octave*12+pitch)<23)TCCR1B=(TCCR1B&~7)|2else TCCR1B=(TCCR1B&~7)|1;
    OCR1A=ocr1a[octave][pitch];
    cnt=0;
}
//
void main(void){
    PORTE=0xFF;  // 스위치 포트 내부 풀업 저항 사용
    DDRB=0x20;   // PB5 펄스출력
    TCCR1A=0x40; TCCR1B=9; TCCR1C=0x80; OCR1A=0;
    while(1){
        if(!PINE.0)sound(4, Do);
        if(!PINE.1)sound(4, Re);
        if(!PINE.2)sound(4, Mi);
        if(!PINE.3)sound(4, Fa);
        if(!PINE.4)sound(4,Sol);
        if(!PINE.5)sound(4, La); // 440Hz
        if(!PINE.6)sound(4, Ti);
        if(!PINE.7)sound(5, Do);
        if(PINE==0xFF){ delay_ms(10); if(++cnt>200)TCCR1B=8; } // 2초이상 입력 없으면 off
    }
}
cs

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
//--------------------------------------------------------
// AVRStudio
// [타이머 CTC 토글-3] 스위치 8개 피아노
//--------------------------------------------------------
#define  F_CPU 16000000UL // 16 MHz
#include <avr/io.h>
#include <util/delay.h>
// pitch
#define Do   0
#define DoS  1
#define Re   2
#define ReS  3
#define Mi   4
#define Fa   5
#define FaS  6
#define Sol  7
#define SolS 8
#define La   9
#define LaS  10
#define Ti   11
//
unsigned int ocr1a[7][12]={
    {30577,28860,27240,25711,24268,22906,21620,20407,19261,18180,17160,16197},
    {15288,14429,13619,12855,12133,11452,10809,10203963090898579,64791},
    {61155,57722,54482,51424,48538,45814,43242,40815,38524,36362,34321,32395},
    {30577,28860,27240,25711,24268,22906,21620,20407,19261,18180,17160,16197},
    {15288,14429,13619,12855,12133,11452,10809,102039630908985798098},
    { 764372146809642760665725540451014814454442894048},
    { 360634043213303228622701255024062271214420231910}
// , 1802, 1701, 1606, 1515, 1430
};
//
int cnt=0;
// 
void sound(unsigned char octave,unsigned char pitch){
    if(octave>6)octave=6;
    if(pitch>11)pitch=11;
    if((octave*12+pitch)<23)TCCR1B=(TCCR1B&~7)|2else TCCR1B=(TCCR1B&~7)|1;
    OCR1A=ocr1a[octave][pitch];
    cnt=0;
}
//
int main(void){
    PORTE=0xFF;  // 스위치 포트 내부 풀업 저항 사용
    DDRB=0x20;   // PB5 펄스출력
    TCCR1A=0x40; TCCR1B=9; TCCR1C=0x80; OCR1A=0;
    while(1){
        if(!(PINE&0x01))sound(4, Do);
        if(!(PINE&0x02))sound(4, Re);
        if(!(PINE&0x04))sound(4, Mi);
        if(!(PINE&0x08))sound(4, Fa);
        if(!(PINE&0x10))sound(4,Sol);
        if(!(PINE&0x20))sound(4, La); // 440Hz
        if(!(PINE&0x40))sound(4, Ti);
        if(!(PINE&0x80))sound(5, Do);
        if(PINE==0xFF){ _delay_ms(10); if(++cnt>200)TCCR1B=8; } // 2초이상 입력 없으면 off
    }
}
 
cs

댓글 0

조회수 424

등록된 댓글이 없습니다.

AVR 따라하기HOME > AVR 따라하기 > 전체 목록

AVR 따라하기 목록
제목 작성자 작성일 조회
170 2015년 강좌 106 - [타이머인터럽트-19] 누른시간 & 뗀시간 & 더블클릭 체크 키트 17-08-23 538
169 2015년 강좌 105 - [타이머인터럽트-18] 스위치 누르는 시간 & 스위치 누르지 않는 시간 체크 댓글[3] 키트 17-08-23 774
168 2015년 강좌 WS2812B [1개]- 테스트 - AVRstudio 키트 17-08-23 378
167 2015년 강좌 delay_us()보다 더 짧은 딜레이 함수 - 2 키트 17-08-23 589
166 2015년 강좌 delay_us()보다 더 짧은 딜레이 함수 - 1 키트 17-08-23 599
165 2015년 강좌 104 - [부저] 회로내장형 키트 17-08-23 659
164 2015년 강좌 103 - [타이머인터럽트-17] 스위치 누르는 시간 체크 키트 17-08-23 675
163 2015년 강좌 102 - [타이머인터럽트-16] 스위치 누를 때마다 1칸씩 좌우시프트 키트 17-08-23 700
162 2015년 강좌 101 - [타이머인터럽트-15] 스위치 8개 SRAM에 읽어서 LED에 출력 키트 17-08-23 435
161 2015년 강좌 100 - [타이머인터럽트-14] 스위치 8개 읽어서 LED에 출력 (포트 다이렉트) 키트 17-08-23 550
160 2015년 강좌 099 - [타이머인터럽트-13] 스위치 1개 SRMA에 읽어서 LED에 출력 키트 17-08-23 337
159 2015년 강좌 098 - [타이머인터럽트-12] 스위치 1개 읽어서 LED에 출력 키트 17-08-23 446
현재글 2015년 강좌 096 - [타이머 CTC 토글-3] 스위치 8개 피아노 키트 17-08-23 425
157 2015년 강좌 095 - [타이머 CTC 토글-2] Sound Test 키트 17-08-23 367
156 2015년 강좌 094 - [타이머 CTC 토글-1] Freq. Test 키트 17-08-23 394
게시물 검색

Privacy Policy
MCU BASIC ⓒ 2017