课程设计题目:基于单片机音乐演奏曲Title: instrumental music based on single chip姓名:学号:系别:专业:年级:指导教师:2012年5 月25 日摘要单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本设计以At89c2051为核心,主要由电源电路、复位电路、音频放大电路、时钟电路和数码管电路和蜂鸣器电路构成单片机奏乐附加时钟的一个小系统。
电路中I/O口采用分时复用的借口技术,使AT89c2051单片机的引脚资源得以充分利用,本系统的电路简单,实现的功能强大,所用芯片比较便宜,性价比较高。
关键词:At89c2051,数码管,单片机奏乐,分时复用目录摘要 ........................................................... - 1 -1.引言 (3)2.系统整体结构 (4)2.1系统总设计 (4)2.2实现的功能 (4)2.3主要芯片介绍 (4)2.3.1 AT89c2051芯片介绍 (4)3.系统硬件设计 (5)3.1键盘输入模块 (5)3.2时钟模块 (5)3.3显示模块 (6)3.4复位电路 (6)3.5蜂鸣器电路设计 (7)4.系统软件设计 (7)4.1系统主程序流程图系 (7)4.2 部分子程序流程图 (8)结束语 (10)参考文献 (10)致谢 (11)附录 (11)1.引言随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的自动控制系统开始进入了人们的生活,以单片机为核心的各种系统也越来越多。
同时也标志了自动控制领域成为了数字化时代的一员。
它实用性强,功能齐全,技术先进,使人们相信这是科技进步的成果。
它更让人类懂得,数字时代的发展将改变人类的生活,将加快科学技术的发展。
本次设计为单片机奏乐器,硬件部分它以单片机AT89C2051为核心,由功放电路、数码管等组成。
当接上电源按下开关时,就能听到优美的旋律。
当然这些音乐都是通过软件编程实现的,把它存储在存储器里,根据存储容量大小决定存储音乐的数目。
[2]2.系统整体结构2.1系统总设计本设计主要由单片机AT89c2051、独立键盘、复位电路、数码管显示电路和时钟电路组成,用于实现单片机奏乐功能。
系统设计总框图如图1所示:系统设计总框图12.2实现的功能设有四个按键,其中两个能实现多首音乐的选择,另一个能实现播放功能和暂停的功能,最后一个能实现复位和关闭歌曲的功能。
设有一位数码管,每选择一首曲子能在数码管上显示当前的曲目(只是数字)。
2.3主要芯片介绍2.3.1 AT89C2051芯片介绍AT89C2051芯片的引脚图2:At89c2051的20 个引脚的功能为: VCC\GND :电源电压,接地引脚XTAL1、XTAL2:反向震荡放大器内部时钟工作电路的输入、反向震荡放大器内部时钟工作电路的输出引脚。
RST :复位信号输入引脚。
当RST 编为高电平并保持2个机器周期,所有I/O 引脚复位至“1”电平。
P1.0—P1.7:P1口的8位双向I/O 引脚。
P3.0—P3.5与P3.7:为7个带内部上拉的双向I/O 口3.系统硬件设计3.1键盘输入模块设计所用到的按键数量较少,所以可以采用独立按键式键盘。
独立式按键盘每一个按键与一个I/O 口相连。
共有3个按键,SW2用于播放和暂停,SW1用于上一曲,SW3用于下一曲。
如图所示:3.2时钟模块单片机工作的时间基准是由时钟电路提供的。
在单片机的XTAL1与XTAL2两个引脚间,接一只晶振及两只电容就构成了单片机的时钟电路,如下图所示。
89C2051电容器C5和C6对振荡频率有微调的作用,通常的取值是30pF;石英晶体选12MHz。
3.3显示模块显示部分是使用一位数码管,采用共阳接法,a-g分别接P1.0-P1.6口。
3.4复位电路单片机的RST引脚为主机提供一个外部信号输入端口。
信号时高电平有效,高电平有效的持续时间应为2个机器周期以上。
复位以后,单片机内各个部件恢复到初始状态,单片机从ROM的0000H开始执行程序。
单片机的复位方式有上电复位和手工复位两种,在这边我采用的按键复位方式,只要VCC上升时间不超过1ms,它们都能很好的工作。
该单元的电路图:3.5蜂鸣器电路设计设计要求定时时间到的时候来回置低电平,来驱动蜂鸣器发出声音。
4.系统软件设计4.14.2 部分子程序流程图独立按键扫描音乐播放模块基于单片机音乐演奏曲结束语本次设计总体上达到了预期的要求,运用我们所学的单片机知识完成了以单片机AT89C2051为核心的单片机奏乐器,经过这段时间有关于单片机奏乐器的课程设计,使我对单片机的应用有了更深的了解。
在设计过程中,碰到了许多问题。
当然也收获了很多,动手能力得到了很大的提高,学会了查阅资料和对各种资料的融会变通。
参考文献[1] 赵建领著.51单片机开发与应用技术详解.电子工业出版社,2009.01.[2] 倪云峰主编.单片机原理与应用.西安电子科技大学出版社,2009.06.附录1附录一源程序#include <reg51.h>sbit fmq=P3^7;sbit SW0=P3^4;sbit SW1=P3^3;sbit SW2=P3^5;unsigned char flag=0;unsigned char data l;unsigned int sta=1;unsigned int data j;unsigned char data i;unsigned char data k;unsigned char count;void delay(unsigned int t); //延时函数声明void play();void xuanz();void keyscan(); //按键扫描unsigned char *pMmusic;unsigned char codeled[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x8 2,0xF8,0x80,0x90};unsigned char code music[30]={0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x4 4,0xFC,0xAC,0xFD,0x09,0xFD,0x34,0xFD,0x82,0xFD,0xC 8,0xFE,0x06,0xFE,0x22,0xFA,0X15,0XFB,0x04,0xFA,0x6 7,0xFE,0x85};//音调数组unsigned char code Mmusic[]={0x35,0x31,0x34,0x34,0x24,0x35,0x32,0x32, 0x24,0x38,0x44,0x58,0x48,0x34,0x31,0x34,0x34,0x24,0 x38,0x34, 0x7F,0x32,0x34,0x32,0x34,0x24,0x38,0x34,0 x24,0x38,0x43,0x58,0x48,0x34,0x32,0x34,0x38,0x24,0 x38,0x34,0x7F,0x16,0x4C,0x74,0x78,0x64,0x54,0x48,0 x54,0x64,0x58,0x44,0x34,0x24,0x38,0x24,0x14,0x12,0 x21,0x14,0x78,0x68,0x3F,0x4C,0x74,0x78,0x64,0x52,0 x42,0x48,0x53,0x64,0x58,0x44,0x34,0x24,0x38,0x24,0 x24,0x38,0x44,0x58,0x48,0x3C,0xFF};unsigned char code Mmusic1[]={0xC2,0xB2,0x36,0x52,0x42,0x32,0x11,0xC1 ,0xB2,0xC6,0x22,0xC4,0x12,0xC2,0x76,0xA2,0x84,0x72, 0x51,0x41,0x32,0x4C,0x41,0x36,0x74,0x82,0x74,0x82,0 x72,0x52,0x41,0x38,0x32,0x42,0x14,0xC2,0x72,0x52,0 x42,0x42,0x3C,0xC2,0xB2,0x36,0x52,0x42,0x32,0x11, 0xC1,0xB2,0xC6,0x12,0xC4,0x12,0xC2,0x76,0xA2,0x82, 0x72,0x51,0x41,0x32,0x4C,0x42,0x32,0x76,0x82,0x74,0 x82,0x72,0x53,0x41,0x38,0x32,0x42,0x16,0xC2,0x72,0 x52,0x41,0x53,0x12,0xCC,0xC2,0xB2,0x16,0xC2,0x72 ,0x52,0x42,0x41,0x3C,0x32,0x32,0x26,0x22,0x24,0x42,0 x32,0x22,0xFF};unsigned char code Mmusic2[]={0x34,0x31,0x31,0x34,0x44,0x52,0x62,0x52, 0x42,0x32,0x34,0x04,0x74,0x74,0x62,0x62,0x64,0x3C,0 x04,0x64,0x62,0x52,0x42,0x32,0x34,0x33,0x31,0x32,0 x72,0x76,0x72,0x83,0x81,0x82,0x82,0x82,0x74,0x72,0 x7C,0x04,0x63,0x61,0x64,0x64,0x64,0x72,0x82,0x72,0 x74,0x72,0x62,0x52,0x42,0x32,0x42,0x44,0x42,0x42,0 x52,0x62,0x52,0x5C,0x04,0x64,0x62,0x62,0x64,0x72,0 x82,0x72,0x74,0x72,0x62,0x52,0x42,0x32,0x42,0x46,0 x53,0x41,0x42,0x32,0x3C,0x04,0x44,0x48,0x02,0x32,0 x3F,0x44,0x48,0x01,0x34,0x3F,0x44,0x0C,0XFF}; //主程序void main(){TMOD=0x11;//初始化IE=0x8A;TH1=(65536-5000)/256;TL1=(65536-5000)%256;TR1=1;TR0=0;while(1){P1=led[sta];if(TR0==1){flag=0;xuanz();play();} }}void xuanz(){ if(sta==1)pMmusic=Mmusic;else if(sta==2)pMmusic=Mmusic1;else if(sta==3)pMmusic=Mmusic2;/*else if(sta==4)pMmusic=Mmusic3;else if(sta==5)pMmusic=Mmusic4;else if(sta==6)pMmusic=Mmusic5;else if(sta==7)pMmusic=Mmusic6;else if(sta==8)pMmusic=Mmusic7;*/else pMmusic=Mmusic1;}void play(){if(*(pMmusic+j)!=0xFF){k=*(pMmusic+j)&0x0F;l=*(pMmusic+j)>>4;TH0=music[2*l];TL0=music[2*l+1];if(flag==1){goto Next;}if((music[2*l]==0xff)&&(music[2*l+1]==0xff) ){TR0=0;}for(i=k;i>0;--i){delay(23350);}j++;}else{Next:j=0;TR0=0;}}void timer0(void) interrupt 1{TH0=music[2*l];TL0=music[2*l+1];fmq=!fmq;}void timer1(void) interrupt 3{TH1=(65536-5000)/256;TL1=(65536-5000)%256;keyscan();}void keyscan() //独立按键扫描{if(SW0==0){count++;if(count==40){count=0;if(SW0==0){ TR0=~TR0;fmq=1;}} }if(SW1==0){count++;if(count==40){count=0;if(SW1==0){if(sta>0){sta--;flag=1;}}} }if(SW2==0){count++;if(count==40){count=0;if(SW2==0){if(sta<9){sta++;flag=1;}}}} }/*延时*/void delay(unsigned int t) {while(--t);}附录2原理图PCB 图附录3正面反面附录4:元件清单。