合肥高端网站建设cnfg冰雪复古传奇手游官网
web/
2025/9/27 7:21:53/
文章来源:
合肥高端网站建设cnfg,冰雪复古传奇手游官网,网络优化初学者难吗,凡科怎么样四、音乐播放器 任务要求#xff1a; 设计制作一个简易音乐播放器#xff08;通过手柄板上的蜂鸣器发声#xff0c;播放2到4首音 乐#xff09;#xff0c;同时LED模块闪烁#xff0c;给人视、听觉美的感受。
评分细则#xff1a;
按下播放按键P15开始播放音乐#x…四、音乐播放器 任务要求 设计制作一个简易音乐播放器通过手柄板上的蜂鸣器发声播放2到4首音 乐同时LED模块闪烁给人视、听觉美的感受。
评分细则
按下播放按键P15开始播放音乐再次按下停止播放20分按下按键P14播放下一首按下按键P13播放上一首20分播放音乐时OLED显示相应的曲目名20分当按下下一首或者上一首〃按键但是已经播放至最后一首时显示屏显 示无更多曲目同时蜂鸣器报警三秒钟20分歌曲名横向滚动显示10分具有音乐播放模式切换键播放模式有单曲循环、顺序播放、随机播放三种 模式。10分
要求可以播放2至4首音乐音乐节拍可通过网络等渠道收集。LED模块的闪烁 方式不做要求。 涉及的单片机内容以及口袋开发板模块 单片机I/O功能、定时/计数器、显示接口 口袋开发板独立按键、OLED显示屏、蜂鸣器 原理单片机使用PWM驱动无源蜂鸣器发声PWM频率改变发声频率就会改变。一首简谱就是由不同频率的音节组成的。
部分代码
/* ****************************************** */
/* ******** 延时 80 ms 控制音乐节拍 */
/* ****************************************** */
void delay1()
{delay_ms( 80 );
}char taskBusy;
void main( void )
{unsigned char u 0, t 0;WDT_Init(); /*看门狗设置 */Clock_Init(); /* 系统时钟设置 */User_SystemInit(); /* 用户控制系统初始化函数 */Timer_Init( TimerA, 10000 ); /* 10ms定时器中断 */TBCCTL0 CCIE; /* CCR0 interrupt enabled */TBCCR0 0;TBCTL TBSSEL_2 MC_1 ID_3; /* SMCLK, contmode */dis_bofangmode();dis_bofangmode();_EINT();while ( 1 ){if ( taskBusy 1 ){User_RealTimeTask( 100 ); /* 实时控制任务 */}else { /* 空闲任务大部分时间空闲可以用来管理一些不紧急的任务不易放长时间执行的任务 */User_IdleTask();}delay_ms(10);if(daojishi0 ((music_crr 10) ||(music_crr-1)))//倒计时结束关闭蜂鸣器{TBCTL TBSSEL_2 MC_0 ID_3; /* 关闭 */GPIO_Set( P5, 6, 1 ); /* 关闭蜂鸣器 */}if(daojishi!0){TBCCR0 SYSCLK / H7 / 2; /*选一个频率 */TBCTL TBSSEL_2 MC_1 TBCLR ID_3; /* SMCLK, upmode */}if ( (music_crr 0) open_flag 1 ){u 0; /* 从第1个音符f[0]开始播放 */while ( music0[u] ! 0xff ) /* 只要没有读到结束标志就继续播放 */{if ( music_crr ! 0 ) /* 切换音乐 */{TBCTL TBSSEL_2 MC_0 ID_3; /* 关闭 */GPIO_Set( P5, 6, 1 ); /* 关闭蜂鸣器 */break;}while ( open_flag 0 ); /* 如果暂停音乐 */TBCCR0 SYSCLK / music0[u] / 2; /*选一个频率 */TBCTL TBSSEL_2 MC_1 TBCLR ID_3; /* SMCLK, upmode */for ( t 0; t music0_JP[u]; t ) /* 控制节拍数 */delay1(); /* 延时1个节拍单位 */TBCTL TBSSEL_2 MC_0 ID_3; /* 关闭 */u; /* 播放下一个音符 */}if(bofang_mode1){music_crrmusic_crr1;if(music_crr4)music_crr0;//顺序循环}else if(bofang_mode2){music_crr(music_crr13)%4;//随机}TBCTL TBSSEL_2 MC_0 ID_3; /* 关闭 */GPIO_Set( P5, 6, 1 ); /* 关闭蜂鸣器 */}if ( music_crr 1 open_flag 1 ){u 0; /* 从第1个音符f[0]开始播放 */while ( music1[u] ! 0xff ) /* 只要没有读到结束标志就继续播放 */{if ( music_crr ! 1 ) /* 切换音乐 */{TBCTL TBSSEL_2 MC_0 ID_3; /* 关闭 */GPIO_Set( P5, 6, 1 ); /* 关闭蜂鸣器 */break;}while ( open_flag 0 ); /* 如果暂停音乐 */TBCCR0 SYSCLK / music1[u] / 2; /*选一个频率 */TBCTL TBSSEL_2 MC_1 TBCLR ID_3; /* SMCLK, upmode */for ( t 0; t music1_JP[u] / 2; t ) /* 控制节拍数 */delay1(); /* 延时1个节拍单位 */TBCTL TBSSEL_2 MC_0 ID_3; /* 关闭 */u; /* 播放下一个音符 */}if(bofang_mode1){music_crrmusic_crr1;if(music_crr4)music_crr0;//顺序循环}else if(bofang_mode2){music_crr(music_crr13)%4;//随机}TBCTL TBSSEL_2 MC_0 ID_3; /* 关闭 */GPIO_Set( P5, 6, 1 ); /* 关闭蜂鸣器 */}if ( music_crr 2 open_flag 1 ){u 0; /* 从第1个音符f[0]开始播放 */while ( music2[u] ! 0xff ) /* 只要没有读到结束标志就继续播放 */{if ( music_crr ! 2 ) /* 切换音乐 */{TBCTL TBSSEL_2 MC_0 ID_3; /* 关闭 */GPIO_Set( P5, 6, 1 ); /* 关闭蜂鸣器 */break;}while ( open_flag 0 ); /* 如果暂停音乐 */TBCCR0 SYSCLK / music2[u] / 2; /*选一个频率 */TBCTL TBSSEL_2 MC_1 TBCLR ID_3; /* SMCLK, upmode */for ( t 0; t music2_JP[u]; t ) /* 控制节拍数 */delay1(); /* 延时1个节拍单位 */TBCTL TBSSEL_2 MC_0 ID_3; /* 关闭 */u; /* 播放下一个音符 */}if(bofang_mode1){music_crrmusic_crr1;if(music_crr4)music_crr0;//顺序循环}else if(bofang_mode2){music_crr(music_crr13)%4;//随机}TBCTL TBSSEL_2 MC_0 ID_3; /* 关闭 */GPIO_Set( P5, 6, 1 ); /* 关闭蜂鸣器 */}if ( music_crr 3 open_flag 1 ){u 0; /* 从第1个音符f[0]开始播放 */while ( music3[u] ! 0xff ) /* 只要没有读到结束标志就继续播放 */{if ( music_crr ! 3 ) /* 切换音乐 */{TBCTL TBSSEL_2 MC_0 ID_3; /* 关闭 */GPIO_Set( P5, 6, 1 ); /* 关闭蜂鸣器 */break;}while ( open_flag 0 ); /* 如果暂停音乐 */TBCCR0 SYSCLK / music3[u] / 2; /*选一个频率 */TBCTL TBSSEL_2 MC_1 TBCLR ID_3; /* SMCLK, upmode */for ( t 0; t music3_JP[u]; t ) /* 控制节拍数 */delay1(); /* 延时1个节拍单位 */TBCTL TBSSEL_2 MC_0 ID_3; /* 关闭 */u; /* 播放下一个音符 */}if(bofang_mode1){music_crrmusic_crr1;if(music_crr4)music_crr0;//顺序循环}else if(bofang_mode2){music_crr(music_crr13)%4;//随机}TBCTL TBSSEL_2 MC_0 ID_3; /* 关闭 */GPIO_Set( P5, 6, 1 ); /* 关闭蜂鸣器 */}}
}/* Timer B0 interrupt service routine */
#pragma vectorTIMERB0_VECTOR
__interrupt void Timer_B( void )
{GPIO_turn( P5, 6 );
}
全部代码https://github.com/xddun/blog_code_search
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81207.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!