




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 届电子设计大赛论文单片机音乐发生器组长: 组员: - 25 -目 录1、系统方案- 2 -1.1、方案比较与选择- 2 -1.1.1、单片机选择与论证- 2 -1.1.2、功放选择与论证- 2 -1.1.3、显示器件选择与论证- 2 -1.1.4、键盘形式选择与论证- 3 -1.1.5、材料选择与论证- 3 -2、理论分析与计算- 3 -2.1、声音播放的原理- 3 -2.1.1、普通声音产生原理. - 3 -2.1.2、音乐产生原理.- 4 -2.2、音符节拍处理- 5 -3、电路与程序设计- 6 -3.1、电路的设计- 6 -3.1.1、总体框图设计- 6 -3.1.2、时钟电路设计- 6 -3.1.3、复位电路设计- 7 -3.1.4、按键电路设计- 7 -3.1.5、显示电路设计- 8 -3.1.6、扬声器电路设计- 9 -3.2、程序设计.- 10 -3.2.1、系统整体流程图- 10 -3.2.2、键盘子程序流程图- 10 -3.2.3、液晶显示子程序流程图- 11 -4、测试方案与测试结果- 12 -4.1、测试方案- 12 -4.2、测试结果- 12 -4.3、测试分析- 13 -附录- 13 -附录1:电路原理图- 13 -附录2:部分源程序- 14 -1、系统方案1.1、方案比较与选择1.1.1、单片机选择与论证方案一:8051单片机。8051内部包含一个8位CPU,128BRAM,4KBROM,21个特殊功能寄存器,4个8位并行I/O口,一个全双工串行口,2个16位定时器、计数器,5个中断源。方案二:SST单片机。SST单片机省去了开发用的编程器和仿真器。省去了外部EEPROM、电压监控芯片、上电复位电路和5个UART的扩展芯片。它自带在线下载和在线仿真功能,带有5路PCA模块(主成分分析),PCA功能比普通单片机有更强的计时性。利用PCA的脉冲宽度调制(PWM)模式可产生一个8位PWM。方案三:AT89C52单片机。AT89C52是美国ATMEL公司生产的低电压,高性能CMOS位单片机,片内含4k字节的可反复擦写1000次的只读程序存储器(PEROM)和128字节的随机存取数据存储器(RAM),片内置通用8位中央处理器(CPU)和Flash存储单元。基于对功能齐全性的考虑,我们采用方案三。1.1.2、功放选择与论证方案一:LM386。LM386是一种音频集成功放,具有自身功耗低、更新内链增益可调整、电源电压范围大和总谐波失真小等优点的功率放大器。方案二:NPN型三极管。集电极电流受基极电流的控制,并且基极电流很小的变化,会引起集电极电流很大的变化,且变化满足一定的比例关系。出于对市场供应情况和价格方面的考虑,我们采用方案一。1.1.3、显示器件选择与论证方案一:数码管。数码管显示能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容。发光响应时间极短(30秒。发挥部分(1):能播放指定曲目。发挥部分(2):具有键盘,可现场编曲并播放。发挥部分(3):具有液晶显示功能,可显示简谱。发挥部分(4):可将简谱转换成显示五线谱。4.2、测试结果4.2.1、仿真测试通过Keil和Proteus仿真,在播放Do,Re,Mi,Fa,So,La,Xi,Do等待两秒后,可以听到自选歌曲和指定曲目,LCD显示歌曲信息。按下控制键后,进入编曲模式,7个独立键盘分别代表七个音符,可现场编曲。同时,数码管显示每个按键代表的数字。如图13所示,为数码管仿真结果。 图134.2.2、成品测试 通过对成品进行调试实验,所得到的结果与仿真结果相同。4.3、测试分析由测试结果可以看出,成品满足基本要求和发挥部分的部分要求。附录附录1:电路原理图附录2:部分源程序#include#include #defineuchar unsigned char#define uint unsigned int #define LCDPORT P0#define E P31#define RW P33#define DI P34#define CS1 P36#define CS2 P35#define BUSYSTATUS P07#define LCDSTARTROW 0xc0#define LCDPAGE 0xB8#define LCDLINE 0x40void Run(void);/主程序void KeyScan(void);/ 按键void PlayKey(void); /按键程序void delay_1ms(uchar i);/延时1msvoid PlayMusic1(void); / 播放12345671void PlayMusic(void); /播放同一首歌void PlayMusic2(void); /播放规定曲目1void DisPlay(void);/ 数码管/void lcd_init(void); /lcd初始化void init_com(void);void sound_delay(uchar n);void timer0(void);uchar code hz1;/*一系列变量*/sbit Beep=P27;/sbit busy=P01;ucharTh0,Tl0;ucharflag=0;/模式,0表示音乐,1表示按键ucharkey=0;/按键代号uchara;uchargaodi=0;/uchar data count=0;/uint counter=0;/12345671的频率uchar code SONG_TONE=115,102,91,86,77,68,61,0;/12345671的节拍uchar code SONG_LONG=17,18,20,21,23,25,28,0; /*比赛规定曲目*/魂斗罗 赤色要塞uchar code SONG_TONE2=34,38,45,51,45,51,57,61, 57,61,68,77,68,102,91,77, 68,68,45,51,45,43,38, 68,68,45,51,45,43,57, 68,68,45,51,45,43,38, 68,68,45,51,45,43,57,0;/魂斗罗的节拍uchar code SONG_LONG2=13,12,10,9,10,9,8,28, 8,7,6,6,6,5,5,6, 35,13,10,9,19,11,85, 35,13,10,9,19,11,68, 35,13,10,9,19,11,85, 35,13,10,9,19,11,68,0; /*同一首歌的源代码*/uchar codeMusic=0Xef,0Xef, 0X88,0X14,0X24,0X36,0X42,0X34,0X14,0X28,0X14,0X94,0X1f,0X88,0X14,0X24,0X34,0X32,0X42,0X54,0X14,0X46,0X32,0X54,0X22,0X32,0X32,0X22,0X2C,0X38,0X54,0X74,0X76,0X62,0X68,0X54,0X52,0X62,0X74,0X62,0X52,0X3f,0X46,0X42,0X54,0X64,0X54,0X42,0X32,0X28,0X0a4,0Xa2,0X92,0X84,0X94,0X1f,0Xb8,0X68,0X46,0X52,0X68,0X74,0X72,0X72,0X74,0X62,0X52,0X3f,0Xb8,0X68,0X46,0X52,0X68,0X64,0X62,0X62,0X64,0X42,0X32,0X2f,0X58,0X14,0X24,0X36,0X42,0X34,0X12,0X12,0X26,0X22,0X24,0X22,0X12,0X94,0X9c,0Xa8,0Xa6,0X92,0X84,0X64,0X54,0X22,0X22,0X46,0X42,0X44,0X32,0X22,0X5f,0Xef,0Xef,0xFF,/按键音符ucharcodeKeyCode =0XFF,0XFF,0xF8,0x8B,0xF9,0x5B,0xFA,0x14,0xFA,0x66,0xFB,0x03,0xFB,0x8F,0xFC,0x0B,/低音0xFC,0x43,0xFC,0xAB,0xFD,0x08,0xFD,0x33,0xFD,0x81,0xFD,0xC7,0xFE,0x05,/中音0xFE,0x21,0xFE,0x55,0xFE,0x84,0xFE,0X99,0XFE,0xC0,0xFE,0xE3,0xFF,0x02,/高音;/功能程序void Run(void)if(flag=0)PlayMusic1(); /12345671PlayMusic(); /同一首歌PlayMusic2();/魂斗罗elsePlayKey();void KeyScan(void)/按按键1-7,数码管的显示if(P1=0X7f)/如果P1.7=0delay_1ms(5);if(P1=0X7f)gaodi+;if(gaodi2)gaodi=0;a=gaodi;else if(P1=0XFE)delay_1ms(12);if(P1=0XFE)key=1;a=key;else if(P1=0XFD)delay_1ms(12);if(P1=0XFD)key=2;a=key;else if(P1=0XFB)delay_1ms(12);if(P1=0XFB)key=3;a=key;else if(P1=0XF7)delay_1ms(12);if(P1=0XF7)key=4;a=key;else if(P1=0XEF)delay_1ms(12);if(P1=0XEF)key=5;a=key; else if(P1=0XDF)delay_1ms(12);if(P1=0XDF)key=6;a=key;else if(P1=0XBF)delay_1ms(12);if(P1=0XBF)key=7;a=key;elsereturn;void PlayKey(void)if(key=0)return;elseTh0=KeyCodegaodi*14+key*2;Tl0=KeyCodegaodi*14+key*2+1;TR0=1;delay_1ms(187);TR0=0;key=0;time0() interrupt 1 /定时器0中断TH0=Th0;TL0=Tl0;Beep=Beep;void interrupt0() interrupt 0 /外部终端0flag=flag;if(flag=0)a=8;P2=0;/延时1msvoid delay_1ms(uchar i)uchar j,k;for(j=0;ji;j+)for(k=0;k148;k+); /*播放音乐主程序*/12345671void PlayMusic1(void) uint i=0; uint j,k; while(SONG_LONGi!=0|SONG_TONEi!=0) /播放各个音符,SONG_LONG 为拍子长度 for(j=0;jSONG_LONGi*30;j+) Beep=Beep; /SONG_TONE 延时表决定了每个音符的频率 for(k=0;k4);jiepai=(Musici&0X0F);if(yinfu=0)continue;Th0=MusicCode(yinfu-1)*2;Tl0=MusicCode(yinfu-1)*2+1;TR0=1;for(j=jiepai;j0;-j)delay_1ms(150);/调歌曲快慢:187(越大越慢) TR0=0;if(flag!=0)break;void PlayMusic2(void) uint i=0; uint j,k; while(SONG_LONG2i!=0|SONG_TONE2i!=0) /播放各个音符,SONG_LONG 为拍子长度 for(j=0;jSONG_LONG2i*30;j+) Beep=Beep; /SONG_TONE 延时表决定了每个音符的频率 for(k=0;k0 ;n-)for ( i=500; i0 ; i-);bit bCheckBusy () LCDPORT=0xff; RW = 1; DI=0; E=1; E=0; return BUSYSTATUS ;void vWriteData (unsigned char ucData) while(bCheckBusy() ; LCDPORT=0xff; RW=0; DI=1; LCDPORT=ucData; E=1; E=0;void vWriteCMD(unsigned char ucCMD) while ( bCheckBusy() ); LCDPORT=0xff; RW=0; DI=0; LCDPORT=ucCMD; E=1; E=0; void vLCDInitialize()CS1=1;CS2=1;vWriteCMD (0x38) ;vWriteCMD (0x0f) ;vWriteCMD (0x01) ;vWriteCMD (0x06) ;vWriteCMD (LCDSTARTROW); Void vShowCustomRow ( unsigned char ucPage ,unsigned char ucLine ,unsigned char ucWidth ,unsigned char *ucaRow) unsigned char ucCount ; if(ucLine64) CS1=1; CS2=0; vWriteCMD(LCDPAGE+ucPage) ; vWriteCMD(LCDLINE+ucLine) ; if (ucLine + ucWidth)64) for (ucCount =0 ; ucCountucWidth ;ucCount +) vWriteData (*(ucaRow+ucCount) ; for(ucCount=0;ucCount64-ucline;ucCount+) vWriteData(*(ucaRow+ucCount) ;CS1=0;CS2=1;vWriteCMD(LCDPAGE+ucPage);vWriteCMD(LCDLINE);for (ucCount=64-ucLine;ucCountucWidth;ucCount+) vWriteData(*(ucaRow+ucCount) ; else CS1=0;CS2=1; vWriteCMD(LCDPAGE+ucPage);vWriteCMD(LCDLINE);for(uccount=0;uccountucwidth;uccount+)vwritedata(*(ucarow+uccount); void vShowOneChin(unsigned char ucPage,unsigned char
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业互联网平台入侵检测系统实时监控与优化在智能制造中的应用报告
- 2025年基层医疗卫生机构信息化建设中的医疗信息化产业链协同发展策略报告
- 2025年新能源汽车充电基础设施投资策略:充电站投资效益与可持续发展报告001
- 教师招聘之《小学教师招聘》考前冲刺练习题带答案详解(达标题)
- 教师招聘之《小学教师招聘》高分题库及完整答案详解(名师系列)
- 教师招聘之《幼儿教师招聘》综合检测提分附参考答案详解【完整版】
- 教师招聘之《小学教师招聘》考前冲刺测试卷附参考答案详解【黄金题型】
- 2025年教师招聘之《小学教师招聘》试题标准卷附答案详解
- 教师招聘之《幼儿教师招聘》考前冲刺模拟题库提供答案解析附答案详解(精练)
- 教师招聘之《幼儿教师招聘》模拟题库附参考答案详解【夺分金卷】
- 红酒市场调研报告
- (正式版)JBT 7248-2024 阀门用低温钢铸件技术规范
- 2023年4月自考02207电气传动与可编程控制器PLC试题及答案含解析
- DL-T 2563-2022 分布式能源自动发电控制与自动电压控制系统测试技术规范
- 大学英语四级考试高频词汇1500
- (高清版)TDT 1056-2019 县级国土资源调查生产成本定额
- 稀土元素-稀土的应用
- 《WLAN基础知识》课件
- 全球价值链与产业升级概述
- 《区块链技术及应用》以太坊与智能合约技术解析
- 煤矿法律法规
评论
0/150
提交评论