M48的音乐程序.doc_第1页
M48的音乐程序.doc_第2页
M48的音乐程序.doc_第3页
M48的音乐程序.doc_第4页
M48的音乐程序.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

);M48的音乐程序#ifndef _MUSIC_H_#define _MUSIC_H_/Type definitions typedef unsigned CHAR byte;typedef unsigned int word;/#define SLEEP() asm(SLEEP)/音乐频率 基于1M时钟频率。const word tone_frq PROGMEM= 0, /低音 500000/262, 500000/277, 500000/294, 500000/311, 500000/330, 500000/349, 500000/370, 500000/392, 500000/415, 500000/440, 500000/466, 500000/494, /中音 500000/523, 500000/554, 500000/578, 500000/622, 500000/659, 500000/698, 500000/740, 500000/784, 500000/831, 500000/880, 500000/932, 500000/988, /高音 500000/1046,500000/1109,500000/1175,500000/1245,500000/1318,500000/1397, 500000/1480,500000/1568,500000/1661,500000/1760,500000/1865,500000/1976; /音乐简谱定义/低音#define L1 1 /低音DO#define L_1 2 /半音DO,用于升调/降调#define L2 3 /以下以此类推#define L_2 4#define L3 5#define L4 6#define L_4 7#define L5 8#define L_5 9#define L6 10#define L_6 11#define L7 12/中音#define M1 13#define M_1 14#define M2 15#define M_2 16#define M3 17#define M4 18#define M_4 19#define M5 20#define M_5 21#define M6 22#define M_6 23#define M7 24/高音#define H1 25#define H_1 26#define H2 27#define H_2 28#define H3 29#define H4 30#define H_4 31#define H5 32#define H_5 33#define H6 34#define H_6 35#define H7 36/节拍定义,以四分音符为一拍,1/4拍为187ms#define P1 32*5 /4#define P1D 48*5 /6#define P2 16*5 /2#define P2D 24*5 /3#define P4 8*5 /1#define P4D 12*5 /1+1/2#define P8 4*5 /1/2#define P8D 6*5 /3/4#define P16 2*5 /1/4#define P16D 3*5 /3/8#define P32 1*5 /1/8 #endif / _MUSIC_H_ /=/ 音乐文件数据/ 二维数组第一个表示音符,第二个表示节拍长度/ 音符里1-7表示7个音阶,数字前带_表示半音,L、M、H分别表示低、中、高音/ 具体定义见 music.h 文件里的定义/=/*第一首:莫斯科郊外的夜晚*/const byte music_dt02 PROGMEM=L6,P8,M1,P8,M3,P8,M1,P8,M2,P4,M1,P8,L7,P8,M3,P4,M2,P4,L6,P2, M1,P8,M3,P8,M5,P8,M5,P8,M6,P4,M5,P8,M4,P8,M3,P2, M4,P4,M5,P4,M7,P8,M6,P8,M3,P4,M3,P8, L7,P4,L6,P8,M3,P8,M2,P8,M4,P4,M4,P8,0,P8, M5,P8,M4,P8,M3,P4,M2,P8,M1,P8,M3,P4,M2,P4,L6,P2,L6,P8,0,P8, 0,P4,0,0; /*第二首:铃儿响叮当*/const byte music_dt12 PROGMEM=M3,P8,M3,P8,M3,P4,M3,P8,M3,P8,M3,P4, M3,P8,M5,P8,M1,P8D,M2,P16,M3,P2, M4,P8,M4,P8,M4,P8D,M4,P16,M4,P8,M3,P8,M3,P8,M3,P16,M3,P16, M3,P8,M2,P8,M2,P8,M1,P8,M2,P4,M5,P4, M3,P8,M3,P8,M3,P4,M3,P8,M3,P8,M3,P4, M3,P8,M5,P8,M1,P8D,M2,P16,M3,P4D,0,P8, M4,P8,M4,P8,M4,P8D,M4,P16,M4,P8,M3,P8,M3,P8,M3,P16,M3,P16, M5,P8,M5,P8,M4,P8,M2,P8,M1,P4D,0,P8, 0,0; /*第三首:卡秋沙*/const byte music_dt22 PROGMEM=L6,P4D,L7,P8,M1,P4D,L6,P8, M1,P4,L7,P8,L6,P8,L7,P4, L3,P4,L7,P4D,M1,P8,M2,P4D, L7,P8,M2,P4,M1,P8,L7,P8, L6,P2,M3,P4,M6,P4,M5,P4, M6,P8,M5,P8,M4,P4,M3,P8, M2,P8,M3,P4,L6,P4,0,P8, M4,P4,M2,P8,M3,P4D,M1,P8, L7,P8,L3,P8,M1,P8,L7,P8, L6,P2,M3,P4,M6,P4,M5,P4, M6,P8,M5,P8,M4,P4,M3,P8, M2,P8,M3,P4,L6,P4,0,P8, M4,P4,M2,P8,M3,P4D,M1,P8, L7,P8,L3,P8,M1,P8,L7,P8, L6,P2,0,0; /*第四首:康定情歌*/const byte music_dt32 PROGMEM=M3,P8,M5,P8,M6,P8,M6,P16,M5,P16,M6,P8D,M3,P16,M2,P4, M3,P8,M5,P8,M6,P8,M6,P16,M5,P16,M6,P8,M3,P4D, M3,P8,M5,P8,M6,P8,M6,P16,M5,P16,M6,P8D,M3,P16,M2,P4, M5,P8,M3,P8,M2,P16,M3,P16,M2,P16,M1,P16,M2,P8,L6,P4D, M6,P8,M2,P4D,M5,P8,M3,P4D,M2,P16,M1,P16,M6,P4D,M5,P8,M3,P8, M2,P16,M3,P16,M2,P16,M1,P16,M2,P8,M6,P4D, 0,0; /*第五首:童年*/const byte music_dt42 PROGMEM=H3,P8,H3,P4,H3,P8,H3,P4,H2,P4,H1,P8,H1,P4,H1,P8,H2,P8, H1,P8,M6,P4, M5,P8,M5,P4,M5,P8,M6,P8,M5,P8,H2,P8,H3,P8,H1,P2, M3,P8,M5,P8,M5,P4,M3,P8,M5,P8,M6,P8,M6,P8,M7,P8,M6,P4, M6,P8,M6,P8,M5,P8, H1,P4,H1,P8,H1,P4,H1,P8,M6,P8,H1,P8,M6,P8,M5,P2, M3,P8,M5,P8,M5,P8,M3,P8,M5,P8,M6,P8,M6,P8,M7,P8,M6,P4, M6,P8,M6,P8,M5,P8, H1,P4,H1,P8,H1,P8,H1,P8,M6,P8,M6,P8,H1,P8,H2,P2, H5,P8,H5,P4,H5,P8,H5,P4,H3,P8,H2,P8,H1,P8,H1,P4,M6,P4, H1,P8,M6,P8,H1,P8, H2,P8,H2,P8,H2,P8,H2,P8,H2,P8,H1,P8,H3,P8,H2,P8,H2,P2, H3,P8,H3,P4,H3,P8,H3,P4,H2,P4,H1,P8,H1,P4,H1,P8,H2,P8, H1,P8,M6,P4, M5,P8,M5,P4,M5,P8,M6,P8,M5,P8,H2,P8,H3,P8,H1,P2, H3,P8,H3,P4,H3,P8,H3,P4,H2,P4,H1,P8,H1,P4,H1,P8,H2,P8, H1,P8,M6,P4, M5,P8,M5,P4,M5,P8,M6,P8,M5,P8,H2,P8,H3,P8,H1,P2, 0,0;/*第六首:沧海一声笑*/const byte music_dt52 PROGMEM=M6,P8,M6,P16,M5,P16,M3,P8D,M2,P16,M1,P2, M3,P8D,M2,P16,M1,P8,L6,P16,L5,P16,L5,P2, L5,P8D,L6,P16,L5,P8D,L6,P16,M1,P8D,M2,P16,M3,P8,M5,P8, M6,P8D,M5,P16,M3,P16,M2,P16,M1,P8,M2,P2, 0,0;/*第七首:两只蝴蝶*/const byte music_dt62 PROGMEM=M5,P8,M5,P8,M6,P8,H1,P8,M7,P8,M7,P8,M6,P8, M3,P4,M2,P8,M3,P8,M3,P4D,0,P4, M3,P8,M3,P8,M5,P8,M6,P4,H1,P4D, L6,P8,M5,P8,M3,P8,M2,P2D, M3,P8,M5,P8,M5,P8,M3,P8,M5,P4,0,P8, H1,P4,M7,P8,M6,P8,M7,P8,M3,P4,0,P8, M6,P8,M6,P8,H1,P8,M6,P8,M5,P8,M3,P8,M2,P4,M2,P4,M3,P8,M5,P2, M5,P8, 0,0; /*第八首:两只老虎*/const byte music_dt72 PROGMEM=M1,P4,M2,P4,M3,P4,M1,P4,M1,P4,M2,P4,M3,P4,M1,P4, M3,P4,M4,P4,M5,P2,M3,P4,M4,P4,M5,P2, M5,P8D,M6,P16,M5,P8D,M4,P16,M3,P4,M1,P4, M5,P8D,M6,P16,M5,P8D,M4,P16,M3,P4,M1,P4, M1,P4,M5,P4,M1,P2,M1,P4,M5,P4,M1,P2, 0,0; /*/* 单片机放音机源程序(V1.0b) */* 创建人:QQQ 创建日期:2005-3-8 */* 修改人:QQQ 修改日期:2005-3-18 */* 修改人:CWD 修改日期:2005-6-15 */*/*修改内容:改为M48,并用GCC编译。 */ 目标CPU : ATmega48/ 晶 振: 默认:8.0000MHz/8/* - 1-| |-28 2-| |-27 PC4-9012-SPEAK 3-| |-26 4-| AT |-25 5-| MEGA |-24 6-| 48L |-23 7-| |-22 8-| |-21 9-| |-20 10-| 1MHz |-19 11-| |-18 12-| |-17 13-| |-16 14-| |-15 - */=/ 头文件和变量定义 /=/#include #include #include /#include #include /#include #include #include #include #include music.h#include music_data.h#define music_out PC4volatile byte tone_dl,play_flag;volatile word nop_time;byte yinyue,jiepai,play_num,play_tmp,j;word i;const byte (*p)2; /指向flash存储区的二维数组指针/=/ 函数名称:timer0_ovf_isr() / 功 能:定时器0中断服务程序,对节拍等提供时基 / 参 数:无 / 影响变量:tone_dl / / 创 建:2005-3-8 by QQQ / 修 改: /=/#pragma interrupt_handler timer0_ovf_isr:10/void timer0_ovf_isr(void)SIGNAL(SIG_OVERFLOW0) TCNT0=0xb7; tone_dl+; nop_time+;/=/ 函数名称:timer1_compa_isr()/ 功 能:定时器1中断服务程序,翻转PC.0口的状态/ 参 数:无/ 影响变量:无/ 创 建:2005-3-8 by QQQ/ 修 改:/=/#pragma interrupt_handler timer1_compa_isr:7/void timer1_compa_isr(void)SIGNAL(SIG_OUTPUT_COMPARE1A) PORTC=_BV(music_out);/=/ 函数名称:init_device() / 功 能:初始化各寄存器及I/O口/ 参 数:无 / 影响变量:无/ 创 建:2005-3-8 by QQQ/ 修 改:/=void init_device(void) cli(); /port initialized DDRB=0xFF;PORTB=0xFF; DDRC=0xFF;PORTC=0xef; DDRD=0xFF;PORTD=0xFF; /timer0 initialized TCCR0A=0x00; TCCR0B=0X00; TCNT0=0xb7;/定时时长18mS,则1/4拍为 2*5*18ms187ms。1M TIMSK0=0x01;/开溢出中断。 /timer1 initialized TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=0xFF; OCR1AL=0xFF; TCCR1A=0x00; TIMSK1=0X02; / / MCUCR=0x00; /EICRA=0X00; /外部中断 /EIMSK=0x03; set_sleep_mode(SLEEP_MODE_IDLE);/=/ 函数名称:get_music_num()/ 功 能:通过曲目值让指针指向对应的歌曲,实现曲目查找/ 参 数:无/ 影响变量:*p/ 创 建:2005-3-9 by QQQ/ 修 改:/=void get_music_num(void) switch(play_num) case 0 : p=music_dt0;break; case 1 : p=music_dt1;break; case 2 : p=music_dt2;break; case 3 : p=music_dt3;break; case 4 : p=music_dt4;break; case 5 : p=music_dt5;break; case 6 : p=music_dt6;break; case 7 : p=music_dt7;break; /=/ 函数名称:sound()/ 功 能:将得到的数据转化为声音信号/ 参 数:无/ 影响变量:yinyue,yinfu,jiepai,num/ 创 建:2005-3-9 by QQQ/ 修 改:2005-3-14 by QQQ/=void sound(void) yinyue=pgm_read_byte(p); if(yinyue != 0) OCR1A=pgm_read_word(tone_frq+yinyue);/取得音符对应的频率值 TCCR1B=0x09; /+TCCR1A 0X00,设置为CTC,时钟无分频。 TCNT1=0x00; else TCCR1B=0x00;/若音乐为零,表示休

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论