BASIC4MCU | 질문게시판 | 답변 : 질문드립니다.
페이지 정보
작성자 master 작성일2019-06-14 07:04 조회4,156회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=9400
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-06-14 오전 7:02:49// by Ok-Hyun Park//#include <mega128.h>#include <delay.h>#include <stdio.h>#include "lcd.h"//#define Do 1908#define Re 1700#define Mi 1515#define Fa 1432#define Sol 1275#define La 1136#define Si 1012//bit flag=0;//interrupt [TIM3_COMPA] void timer3_compa_isr(void){ // 1secstatic char ss= 0,mm=0,hh=12;static char as=10,am=0,ah=11;char str[21];//if(++ss>=60){ ss=0;if(++mm>=60){ mm=0; if(++hh>=24)hh=0; }}//if(hh<=12){ sprintf(str," AM %02d:%02d:%02d ",hh ,mm,ss); }else { sprintf(str," PM %02d:%02d:%02d ",hh-12,mm,ss); }LCD_Pos(1,0); LCD_Str(str);//if(hh==ah&&mm==am&&ss==ad){ flag=1; }}//void main(void){int alarm[]={Do,Re,Mi};int i,melody;//LCD_Init();LCD_Pos(0,0); LCD_Str(" [ Time ] ");TCCR3B=0x0C; OCR3AH=62499>>8; OCR3AL=62499&0xFF; ETIMSK=0x10; //1secSREG=0x80;while(1){if(flag){ flag=0; // Buzzer(melody[i]);for(i=0; i<3; i++){PORTG|=1<<PORTG4; delay_ms(100);PORTG&=~(1<<PORTG4); delay_ms(100);}}}}
https://www.basic4mcu.com/bbs/board.php?bo_table=gesiyo9&wr_id=138
멜로디 예제 참고하세요
이해가 잘 안되면 게시판에 멜로디 출력에 관한 글이 여러개 있으니 읽어보세요
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-06-14 오전 7:11:50// by Ok-Hyun Park//#include <mega128.h>#include <delay.h>#include <stdio.h>#include "lcd.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,10203, 9630, 9089, 8579,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,10203, 9630, 9089, 8579, 8098,7643, 7214, 6809, 6427, 6066, 5725, 5404, 5101, 4814, 4544, 4289, 4048,3606, 3404, 3213, 3032, 2862, 2701, 2550, 2406, 2271, 2144, 2023, 1910// , 1802, 1701, 1606, 1515, 1430};//void sound(char octave, char pitch){TCCR1B=8;if(octave>6)octave=6;if(pitch>11)pitch=11;TCCR1B&=~7; if((octave*12+pitch)<23)TCCR1B|=2; else TCCR1B|=1;OCR1A=ocr1a[octave][pitch];}//bit flag=0;//interrupt [TIM3_COMPA] void timer3_compa_isr(void){ // 1secstatic char ss= 0,mm=0,hh=12;static char as=10,am=0,ah=11;char str[21];//if(++ss>=60){ ss=0;if(++mm>=60){ mm=0; if(++hh>=24)hh=0; }}//if(hh<=12){ sprintf(str," AM %02d:%02d:%02d ",hh ,mm,ss); }else { sprintf(str," PM %02d:%02d:%02d ",hh-12,mm,ss); }LCD_Pos(1,0); LCD_Str(str);//if(hh==ah&&mm==am&&ss==ad){ flag=1; }}//void main(void){int i;//DDRB=0x20; //포트 B.5 펄스(멜로디) 출력LCD_Init();LCD_Pos(0,0); LCD_Str(" [ Time ] ");TCCR1A=0x40; TCCR1B=8; TCCR1C=0x80; OCR1A=0;TCCR3B=0x0C; OCR3AH=62499>>8; OCR3AL=62499&0xFF; ETIMSK=0x10; //1secSREG=0x80;while(1){if(flag){ flag=0;for(i=0;i<3;i++){ // 3회반복sound(4,Do); delay_ms( 500);sound(4,Re); delay_ms( 500);sound(4,Mi); delay_ms( 500);TCCR1B=0; delay_ms(2000); // 무음}}}}PB5로 출력한다면 이렇게하면 되겠습니다.
//
2010.11.20. |
약 9년 전에 멜로디 예제를 만들었습니다.
많은 사람들이 제 소스를 참고하고, 아두이노 소스를 참고해서 새로운 코드를 작성하고 있으나
더 나아진 것도 있지만 나아지지 않은채로 제 소스를 조금 변형하기만 한 것도 있습니다.
타이머의 동작원리를 이해한다면 대단한 것은 아닙니다.
서보모터와 초음파센서 경우에도 타이머를 사용해서 예제를 만들었는데
제 소스를 보고 공부한 후 변형해서 많이 만듭니다.
문제는...제가 만든 소스보다 더 복잡한 것이 있습니다.
남의 소스와 출처를 올리기엔 쪽팔리는지...
어차피 내 소스를 보고 공부했다면 출처를 올리는 것이 처음 소스를 만들어준 사람에 대한 예의일텐데 말이죠...
댓글 0
조회수 4,156등록된 댓글이 없습니다.