atmega16单片机C语言程序

#include //AVR单片机相关库

flash unsigned int t[9] = {0,956,865,759,716,638,568,506,470}; flash unsigned char d[9] = {0,105,116,132,140,157,176,198,209};

#define Max_note 32

flash unsigned char music[Max_note] =

{5,2,8,2,5,2,4,2,3,2,2,2,1,4,1,2,1,2,2,2,3,2,3,2,1,2,3,2,4,2,5,8}; unsigned char note_n;

unsigned int int_n;

bit play_on;

// External Interrupt 1 service routine

interrupt [EXT_INT1] void ext_int1_isr(void)

{

if (!play_on)

{

TCCR1B = 0x09;

}

}

// Timer 1 output compare A interrupt service routine

interrupt [TIM1_COMPA] void timer1_compa_isr(void)

{

if (!play_on)

{

note_n = 0;

int_n = 1;

play_on = 1;

}

else

{

if (--int_n == 0)

{

TCCR1B = 0x08;

if (note_n Max_note)

{

OCR1A = t[music[note_n]];

int_n = d[music[note_n]];

note_n++;

int_n = int_n * music[note_n];

note_n++;

TCCR1B = 0x09;

}

else

play_on = 0;

}

}

}

// Declare your global variables here

void main(void)

{

PORTD=0x08;

DDRD=0x20;

TCCR1A=0x40;

TCCR1B=0x08;

TCNT1 = 0x00;

ICR1H = 0x00;

ICR1L = 0x00;

OCR1A = 0x00;

OCR1B = 0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x10;

GICR|=0x80;

MCUCR=0x08;

MCUCSR=0x00;

GIFR=0x80;

// Global enable interrupts

#asm("sei")

while (1)

{

}

}

相关推荐
相关主题
热门推荐