




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习情境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 蜂鸣器播放电路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 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)unsigned 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); Display_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);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); if (Key_Num=1) /以下显示歌曲名:两只蝴蝶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+11*32);Display_Word(V_page_Offset+2,32+H_Offset,Name_Of_Song+12*32);Display_Word(V_page_Offset+2,48+H_Offset,Name_Of_Song+13*32);Display_Word(V_page_Offset+2,64+H_Offset,Name_Of_Song+14*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_Two,0,2,360); / break; case 5: delay(200); if (Key_Num=5) /以下显示歌曲名:死了都要爱 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+25*32);Display_Word(V_page_Offset+2,32+H_Offset,Name_Of_Song+26*32);Display_Word(V_page_Offset+2,48+H_Offset,Name_Of_Song+27*32);Display_Word(V_page_Offset+2,64+H_Offset,Name_Of_Song+28*32);Display_Word(V_page_Offset+2,80+H_Offset,Name_Of_Song+29*32);Display_Word(V_page_Offset+2,96+H_Offset,Name_Of_Song+24*32);Play(Music_Three,10,1,300); break; /* case 5: delay(200); if (Key_Num=5) Play(Music_Three,0,2,360); break; */ void waibuzhongduan_INT0()interrupt 0 uchar i; EA=0; for(i=0;i8;i+) Display_Word(V_page_Offset+2,i*16+H_Offset,Name_Of_Song+24*32); (2)Keypad.c#include #define uchar unsigned char#define uint unsigned int/扫描键盘时发送到0-3列上的扫描码uchar KeyboardScanCode4=0xef,0xdf,0xbf,0x7f;uchar Key_Num=16;/-/扫描键盘并返回按键在键盘上的位置系列号/-uchar KeyScan() uchar Row=0,Col=0,Temp; for(Col=0;Col4;Col+) P1=KeyboardScanCodeCol;Temp=P1&0x0f;if(Temp!=0x0f) switch(Temp) case 0x0e:Row=0;break; case 0x0d:Row=1;break; case 0x0b:Row=2;break; case 0x07:Row=3;break; break; P1=0x0f; return Key_Num=Row*4+Col;/返回按键位置序号0-15(3) 12864显示驱动程序.C/-LCD_12864.c-/名称 :12864LCD显示驱动程序(不带字库)/-#include #include #define uchar unsigned char#define uint unsigned int#define LCD_DB_PORT P0 / 液晶数据线端口DB0-DB7#define LCD_START_ROW 0xc0 /起始行命令#define LCD_PAGE 0xB8 / 页指令#define LCD_COL 0x40 / 列指令bit Reverse_Display=0;/是否反相显示(白底黑字/黑底白字)/液晶引脚定义sbit DI=P20;sbit RW=P21;sbit E=P22;sbit CS1=P23;sbit CS2=P24;sbit RST=P25;/-/检查LCD是否忙/-bit LCD_IS_BUSY() LCD_DB_PORT=0xFF;RW=1;_nop_();DI=0;E=1;_nop_();E=0;return (bit)(P0&0x80);/-/向LCD写入一个字节(一般用于发送命令)/-void Write_Byte_To_LCD(uchar comand) while(LCD_IS_BUSY(); LCD_DB_PORT=0xFF; RW=0; _nop_(); DI=0; LCD_DB_PORT=comand; E=1; _nop_(); E=0;/-/向LCD写入数据/- void Write_Data_To_LCD(uchar dat) while(LCD_IS_BUSY(); LCD_DB_PORT=0xFF; RW=0; _nop_(); DI=1; if(!Reverse_Display) /根据Reverse_Display决定是否反相显示 LCD_DB_PORT=dat; else LCD_DB_PORT=dat; E=1; _nop_(); E=0;/-/初始化LCD/-void LCD12864_Initialization() CS1=1; CS2=1; Write_Byte_To_LCD(0x38); Write_Byte_To_LCD(0x3F); Write_Byte_To_LCD(0x01); Write_Byte_To_LCD(0x06); Write_Byte_To_LCD(LCD_START_ROW);/-/通用显示函数 从第P页第L列显示W个字节数据,具体显示的数据在r所指的数组中/- void LCD_Show(uchar P,uchar L,uchar W,uchar *r) reentrant uchar i;if(L64) CS1=1; CS2=0;Write_Byte_To_LCD(LCD_PAGE+P);Write_Byte_To_LCD(LCD_COL+L);if(L+W
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 62552-2:2015+AMD1:2020+AMD2:2025 CSV EN Household refrigerating appliances - Characteristics and test methods - Part 2: Performance requirements
- 新解读《GB-T 30713-2014砚石 显微鉴定方法》
- 人教版八年级英语上册UNIT8单元过关卷(含答案)
- 人教版八年级上册Unit7-Unit8基础知识过关演练-2024中考英语一轮复习课课练(学生版)
- 老年人肾衰竭相关课件
- 老年人知识培训理论背景课件
- 金字塔原理-最重要的五个关键词vera5x
- 《英语模仿秀》课程介绍与教学大纲
- 儿科疱疹性咽峡炎整体护理查房规范与实操指南
- 醉花阴李清照课件教学
- 机器学习辅助线段相交判定
- DL-T692-2018电力行业紧急救护技术规范
- 资产管理业务综合项目尽职调查底稿资料清单
- 大二学年规划
- JBT 11699-2013 高处作业吊篮安装、拆卸、使用技术规程
- 医院医学伦理培训课件
- 物业保盘行动策划方案
- 烹饪实训课安全教育
- 2023-2024学年江苏省南通市如皋市重点中学八年级(上)第二次月考数学试卷(含解析)
- 矿山安全供电讲义
- 最全婚礼筹备清单:婚礼流程婚礼采购必备清单
评论
0/150
提交评论