1、学习情境1 多功能音乐播放器的设计江西环境工程职业学院机械与电子学院 一、 引言二、 设计任务与设计原理1、 设计任务(1)可播放多首音乐,且通过按键来选择播放的音乐(2)选择音乐时,音乐名称在LCD上显示(3)音乐播放种类跨度要大一些,播放声音要清晰2、 设计原理三、 硬件电路设计1 系统框图图2-1-1 系统框图2 电路原理图(1)、单片机最小系统电路,主要由:时钟振荡电路、复位电路、电源电路等组成。图2-1-2 单片机最小系统电路(2)、矩阵键盘输入电路图2-1-3 矩阵键盘输入电路(3)、LCD12864显示电路图2-1-4 LCD12864显示电路(4)、蜂鸣器播放电路图2-1-5
2、蜂鸣器播放电路3 整体电路原理图图2-1-6 系统仿真效果图四、 软件设计1、 流程图设计2、 完整程序代码整个KEIL工程文件有4个.C文件和1个头文件组成,具体代码如下:(1)PlayMusic.c#include #include SoundPlay.h#include#define uchar unsigned char#define uint unsigned intsbit WAI_INT0=P32; / 复位/水平与垂直偏移uchar H_Offset=0;/uchar V_page_Offset=0;extern uchar Key_Num;extern uchar code
3、Name_Of_Song;extern uchar KeyScan();/ 矩阵键盘扫描子程序 extern void LCD12864_Initialization();extern void Display_Word(uchar P2,uchar L2,uchar *M) reentrant;extern void Display_char(uchar P1,uchar L1,uchar *M) reentrant;void delay(uint K); /延时子程序void key_process();/ 矩阵键盘按键处理子程序void Delay1ms(uint count)unsig
4、ned int i,j;for(i=0;icount;i+)for(j=0;j0;i-) for(j=120;j0;j-);/*-按键处理子程序-*/void key_process()EA=1;KeyScan();switch(Key_Num) case 13: delay(200); if (Key_Num=13) /以下显示歌曲名:挥着翅膀的女孩 Display_Word(V_page_Offset+2,H_Offset,Name_Of_Song+0*32); Display_Word(V_page_Offset+2,16+H_Offset,Name_Of_Song+1*32); Dis
5、play_Word(V_page_Offset+2,32+H_Offset,Name_Of_Song+2*32); Display_Word(V_page_Offset+2,48+H_Offset,Name_Of_Song+3*32); Display_Word(V_page_Offset+2,64+H_Offset,Name_Of_Song+4*32);Display_Word(V_page_Offset+2,80+H_Offset,Name_Of_Song+5*32); Display_Word(V_page_Offset+2,96+H_Offset,Name_Of_Song+6*32);
6、Play(Music_Girl,0,2,360); break; case 2: delay(200); if (Key_Num=2) /以下显示歌曲名:同一首歌Display_Word(V_page_Offset+2,H_Offset,Name_Of_Song+24*32); Display_Word(V_page_Offset+2,16+H_Offset,Name_Of_Song+7*32);Display_Word(V_page_Offset+2,32+H_Offset,Name_Of_Song+8*32);Display_Word(V_page_Offset+2,48+H_Offset,Name_Of_Song+9*32);Display_Word(V_page_Offset+2,64+H_Offset,Name_Of_Song+10*32);Display_Word(V_page_Offset+2,80+H_Offset,Name_Of_Song+24*32);Display_Word(V_page_Offset+2,96+H_Offset,Name_Of_Song+24*32); Play(Music_Same,2,2,500); /break; case 1: delay(200)