⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 music_test.c

📁 avr编写的模拟音乐的程序
💻 C
字号:
#include <iom16v.h>
#include <macros.h>
#include "music.h"
/***********音乐数据(卡秒莎) ***********/
/* 四分之一拍为0x10, 二分之一拍为0x20, 一拍为0x40*/
/* 低1-1 2-2 3-3 4-4 5-5 6-6 7-7 */
/* 中1-8 2-9 3-A 4-B 5-C 6-D 7-E */
/* 高1-F*/
unsigned int toneconst;        //音阶重装常数
unsigned char sound[]={0x66,0x27,0x68,0x26,0x28,
0x28,0x27,0x26,0x47,0x43,0x67,0x28,0x69,0x27,
0x29,0x29,0x28,0x27,0x46,0x46,0x4a,0x4d,0x4c,
0x2d,0x2c,0x2b,0x2b,0x2a,0x29,0x4a,0x46,0x20,
0x4b,0x29,0x6a,0x28,0x27,0x23,0x28,0x27,0x46,
0x46,0x4a,0x4d,0x4c,0x2d,0x2c,0x2b,0x2b,0x2a,
0x29,0x4a,0x46,0x20,0x4b,0x29,0x6a,0x28,0x27,
0x23,0x28,0x27,0x46,0x46,0x00};
/***********音阶表***********/
const unsigned int TONETABLE[15]={DO,RE,MI,
FA,SO,LA,TI,DO_H,RE_H,MI_H,FA_H,SO_H,
LA_H,TI_H,DO_HH};                                                                              /***********微秒级延时程序***********/
void delay_1ms(void)
{	 
	 unsigned int i;
	 for(i=1142;i>0;i--)
	      ;
}

/***********毫秒级延时程序***********/
void delay_ms(unsigned int n)
{
     for(;n>0;n--)
	      delay_1ms();
}
/***********T1溢出中断服务程序***********/
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{	 
	 TCNT1=toneconst;
	 PORTC^=1;
}
/***********音乐服务程序***********/
void music(void)
{	 
	 unsigned char temp,temp1;
	 unsigned int sound_add=0;
	 TCCR1A = 0x00;
	 TCCR1B =(1<<CS11);         //8分频
	 temp1=sound[sound_add];
	 while(temp1!=0)
	 {     
	 	   temp=temp1;
		   temp&=0x0f;

		   if(temp!=0)
		   {     
		   		 TIMSK|=(1<<TOIE1);
				 //根据SOUNDTABLE中数据的低四位选择音调频率
				 temp--;
				 toneconst=TONETABLE[temp];
				 TCNT1=toneconst;
		   }
		   temp=temp1;
		   temp>>=4;
		   temp&=0x0f;
		   delay_ms(temp*129);
		   //根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
		   TIMSK&=~(1<<TOIE1);
		   sound_add++;
		   temp1=sound[sound_add];
	 }
	 delay_ms(1000);
}
/***********主程序***********/
void main(void)
{	 
	 DDRC=0x01;
	 PORTC=0xff;
	 SEI();
	 while(1)
	 {    
	 	  music();
	 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -