//ICC-AVR application builder : 2005-05-30 ¿ÀÀü 1:48:51 // Target : M128 // Crystal: 11.059Mhz //PORTC¿¡ Data¼±À̱¸¿ä(DB0~DB7) //PORTD 0ºñÆ® : RS // 1ºñÆ® : RW // 2ºñÆ® : E ÀÔ´Ï´Ù. //PORTD 7,8ºñÆ® : ½ºÇÇÄ¿ //PORTD 6ºñÆ® : ½ÎÀÌ·» #include #include #include #define MaxLine 2 #define MaxCol 16 #define ON 1 #define OFF 2 #define DELAYTIME 1 #define DELAYTIME1 0 #define C1 523 // µµ #define C1_ 554 #define D1 587 // ·¹ #define D1_ 622 #define E1 659 // ¹Ì #define F1 699 // ÆÄ #define F1_ 740 #define G1 784 // ¼Ö #define G1_ 831 #define A1 880 // ¶ó #define A1_ 932 #define B1 988 // ½Ã #define C2 C1*2 // µµ #define C2_ C1_*2 #define D2 D1*2 // ·¹ #define D2_ D1_*2 #define E2 E1*2 // ¹Ì #define F2 F1*2 // ÆÄ #define F2_ F1_*2 #define G2 G1*2 // ¼Ö #define G2_ G1_*2 #define A2 A2*2 // ¶ó #define A2_ A2_*2 #define B2 B2*2 // ½Ã #define DLY_1 DLY_4*4 // ¿ÂÀ½Ç¥ #define DLY_2 DLY_4*2 // 2ºÐ À½Ç¥ #define DLY_4 400 // 4ºÐ À½Ç¥ #define DLY_8 DLY_4/2 // 8ºÐ À½Ç¥ #define DLY_16 DLY_8/2 // 16ºÐ À½Ç¥ int OneUsCounter=0; int OneMsCounter=0; int SoundTimeout=0; long T1HIGHCNT=0xFF, T1LOWCNT=0xF0; int SoundState=ON; int Soundonoff = ON; unsigned int noteon; void port_init(void) { PORTA = 0x00; DDRA = 0xFF; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0xFF; PORTD = 0x00; DDRD = 0xFF; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0x00; PORTG = 0x00; DDRG = 0x00; } //TIMER1 initialize - prescale:1 // WGM: 0) Normal, TOP=0xFFFF // desired value: 1uSec // actual value: 0.995uSec (0.5%) void timer1_init(void) { TCCR1B = 0x00; //stop TCNT1H = 0xFF; //setup TCNT1L = 0xF5; OCR1AH = 0x00; OCR1AL = 0x0B; OCR1BH = 0x00; OCR1BL = 0x0B; OCR1CH = 0x00; OCR1CL = 0x0B; ICR1H = 0x00; ICR1L = 0x0B; TCCR1A = 0x00; TCCR1B = 0x01; //start Timer } #pragma interrupt_handler timer1_ovf_isr:15 void timer1_ovf_isr(void) { OneUsCounter++; if(OneUsCounter >=1000){ OneMsCounter++; OneUsCounter=0; } if(Soundonoff==ON){ if(SoundState == ON){ PORTD=0x80; SoundState=OFF; }else{ PORTD=0xc0; SoundState=ON; } } //TIMER1 has overflowed TCNT1H = T1HIGHCNT; //reload counter high value TCNT1L = T1LOWCNT; //reload counter low value } void delay(int delaytime){ int i,j; for(i=0;i<=1000;i++){ for(j=0;j<=delaytime;j++){ } } } //UART0 initialize // desired baud rate: 9600 // actual: baud rate:9600 (0.0%) // char size: 8 bit // parity: Disabled void uart0_init(void) { UCSR0B = 0x00; //disable while setting baud rate UCSR0A = 0x00; UCSR0C = 0x06; UBRR0L = 0x47; //set baud rate lo UBRR0H = 0x00; //set baud rate hi UCSR0B = 0x18; } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts XDIV = 0x00; //xtal divider XMCRA = 0x00; //external memory port_init(); timer1_init(); uart0_init(); MCUCR = 0x00; EICRA = 0x00; //extended ext ints EICRB = 0x00; //extended ext ints EIMSK = 0x00; TIMSK = 0x04; //timer interrupt sources ETIMSK = 0x00; //extended timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized OneUsCounter=0; OneMsCounter=0; } void sound(int freq){ Soundonoff=ON; T1HIGHCNT = (0xFFFF-floor(10000000/freq))/0x100; T1LOWCNT = 0xFFFF-floor(10000000/freq) - 0xFF00; } void nosound(void){ Soundonoff=OFF; delay(10); } void Sailen(int onoff){ if(onoff==ON) PORTD = PORTD|0x20; else PORTD = PORTD&0xBF; } void schoolsong(void){ sound(G1); delay(DLY_4); nosound(); sound(G1); delay(DLY_4); nosound(); sound(A1); delay(DLY_4); nosound(); sound(A1); delay(DLY_4); nosound(); sound(G1); delay(DLY_4); nosound(); sound(G1); delay(DLY_4); nosound(); sound(E1); delay(DLY_2); nosound(); sound(G1); delay(DLY_4); nosound(); sound(G1); delay(DLY_4); nosound(); sound(E1); delay(DLY_4); nosound(); sound(E1); delay(DLY_4); nosound(); sound(D1); delay(DLY_1); nosound(); sound(G1); delay(DLY_4); nosound(); sound(G1); delay(DLY_4); nosound(); sound(A1); delay(DLY_4); nosound(); sound(A1); delay(DLY_4); nosound(); sound(G1); delay(DLY_4); nosound(); sound(G1); delay(DLY_4); nosound(); sound(E1); delay(DLY_2); nosound(); sound(G1); delay(DLY_4); nosound(); sound(E1); delay(DLY_4); nosound(); sound(D1); delay(DLY_4); nosound(); sound(E1); delay(DLY_4); nosound(); sound(C1); delay(DLY_1); nosound(); } void main(void){ int i, delayustime=50; init_devices(); printf("Sound Test"); while(1){ while(1){ schoolsong(); delay(1000); /*sound(E1); delay(100); sound(C1); delay(100);*/ } } }