郑州科技学院单片机课程设计题目:基于51单片的声光电子琴设计学生姓名:苏梦强专业班级:电子科学与技术学号:201131074院系:电气工程学院指导教师:饶美丽完成时间:2015年1月9日目录一、设计任务与要求............ 错误!未定义书签。
1.1 设计任务 01.2 设计要求 01.3 设计意义 0二、方案总体设计 (1)2.1 方案对比 (1)2.2总体设计 (3)2.3 总体方案工作原理 (3)三、软件设计 (4)3.1 系统流程 (4)3.2延时源代码 (5)3.3 发音源代码 (5)3.3单个按键源代码 (5)3.4所有程序代码 (6)四、系统仿真与调试........... 错误!未定义书签。
4.1 仿真软件简介 (8)4.2软件调试 (9)4.3 使用说明 (10)五、设计总结 (10)附录1:总体电路原理图 (12)附录2:元器件清单 (14)一、设计任务与要求1.1 设计任务实现电子琴发声控制系统;要求电路实现如下功能:利用蜂鸣器作为发声部件,两个数码管作为显示部件,设置10个按键,实现高音、中音、低音的1、2、3、4、5、6、7的发音。
并在存储一首歌曲的内容,可以实现自动播放。
说明:单片机的工作时钟频率为11.0592MHz。
1.2 设计要求设计一个带有复位电路,晶振时钟,能显示音调字符的8键电子琴。
1.3 设计意义该设计具有以下优点:1)可以方便得知播放的音符和音调;2)比传统电子琴功能更完善;3)制作简单,成本低二、方案总体设计本次课程设计的课题是基于51单片机的电子琴的设计,所要达到的要求如下:1)利用蜂鸣器作为发声部件。
2)一个数码管作为显示部件。
3)设置8个按键,实现高音、中音、低音的1、2、3、4、5、6、7、8的发音。
本次设计主要是要通过软硬件的配合实现电子琴的上述功能,操作人员可以通过按下键盘上任意一个键来发出相应的音符。
2.1 方案对比AT89C51具有高速度、低电压、低功耗、且可靠性和成本都比较低的特点。
因此本次课程设计采用AT89C51单片机作为整个电路核心控制器件。
对于本控制系统使用一片AT89C51系列的单片机,不需要外扩展存储器,就能实现显示、预制状态、动态调节的功能,因而整体结构简单。
设计电路时运用89C51系列单片机的接口来实现各种输入、输出功能。
P2.7待定部分口用作输出口,向发声电路输出信号;P1口和P0口共同实现一个键盘的功能。
方案一:采用单个的逻辑器件组合我们知道计数器8253可以产生任意频率的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率与计数器的频率对应起来就可通过计数器产生音乐了。
根据本实验要求,采用8279将键扫描得到的键值通过查表得到相应的8253的频率值,将从8253得到相对应的按键弹奏信号经过LM386进行放大,再用喇叭输出,就实现了简易电子琴的基本功能,也就完成了实验的要求方案二:用VHDL语言编程来实现利用我们实验室先进的数字电路实验设备,我们可以采用VHDL语言编程来实现。
我们可以通过VDHL语言,对实验原理图的各个部分进行设计,通过编译,可以在计算机上下载此实验原理图,利用电路学习机上的芯片。
我们很快就可以设计出一个简单的电子琴。
并实现其功能。
方案三:采用AT89C51单片机采用AT89C51单片机作为主控芯片,设置键盘、蜂鸣器等外围器件,另外还用到一些简单器件如:一位数码管,和PNP 型三极管等。
利用按键实现音符和音调的输入;一位的数码管进行被操作的按键显示:用PNP型三极管实现低音频功率放大;最后用蜂鸣器发音。
方案比较:方案一采用单个的逻辑器件组合实现。
这样虽然比较直观,逻辑器件分工鲜明,思路也比清晰,一目了然,但是由于元器件种类、个数繁多,而过于复杂的硬件电路也容易引起系统的精度不高、体积过大等不利因素。
例如七个不同的音符是由七个不同的频率来控制发出的,所用仪器之多显而易见。
方案二采用VHDL语言编程来实现电子琴的各项功能。
系统主要由电子琴发声模块、选择控制模块和储存器模块组成。
和方案一相比较,方案二就显得比较笼统,虽然我们可以看到用超高速硬件描述语言VHDL的优势,但本质上它只是把整个系统分为了若干个模块,而不牵涉到具体的硬件电路。
方案三与前两种方案相比,主控芯片采用AT89C51单片机,它是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。
同时具有强大的控制功能和灵活的编程实现特性,由于本设计主要用于人们娱乐方面,因此在设计上尽量使其安全以及简单易操作。
而第三种方案具有经济可行性、技术可行性、实物应用性。
所以我们选择第三种方案。
2.2总体设计设计总体框架图如图1所示图1 单片机总体框架图2.3 总体方案工作原理由AT89C51的P1口8个按键控制DO,RE,MI,FA,SO,LA,XI,DO的各个音符,在由位于P0口的一位数码管显示出来,同时位于P3^7口的蜂鸣器发出声音。
发音原理:若要产生音频脉冲,只要算出某一音频的周期,再将周期除以2,即为半周期的时间。
利用定时器记时半周期时间,每当记时终止后就将P3^7反相,然后记时再反相。
就可在P3^7上得到此频率的脉冲。
利用AT89C51的内部定时器使其工作计数器模式下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。
三、软件设计3.1 系统流程在绘制传统流程图时注意几点:1)熟练绘制传统流程图的基本元素,三种基本结构的流程图标准画法2)将复合条件转为多个单一条件3)循环注意初值、变化和终止4)算法的重点实现一定体现出来程序流程如图12所示:图12 程序流程图3.2延时源代码void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}3.3 发音源代码void Play(uchar y){uchar i;for(i=0;i<100;i++){BEEP=~BEEP;//对蜂鸣器电平求反DelayMS(y);}BEEP=1;//给蜂鸣器一个高电平}3.3单个按键源代码:if(K1==0){DelayMS(10);//按键去抖动if(K1==0){num=1;P0=table[num];Play(1);}while(!K1);3.4所有程序代码#include <reg52.h> //调用单片机头文件#define uchar unsigned char //无符号字符型宏定义变量范围0~255#define uint unsigned int //无符号整型宏定义变量范围0~65535sbit beep = P2^5; //蜂鸣器定义sbit K1=P1^0;//给P1^0定义,控制DO的发音sbit K2=P1^1;//给P1^1定义,控制XI的发音sbit K3=P1^2;//给P1^2定义,控制LA的发音sbit K4=P1^3;//给P1^3定义,控制SO的发音sbit K5=P3^4;//给P3^4定义,控制FA的发音sbit K6=P3^5;//给P3^5定义,控制MI的发音sbit K7=P3^6;//给P3^6定义,控制RE的发音sbit K8=P3^7;//给P3^7定义,控制DO的发音sbit K9=P2^0;//音乐播放按键uchar flag_en = 0; //开始放歌uchar flag_i = 0;//数码管段选定义0 1 2 3 4 56 7 8 9uchar code smg_du[]={0xde,0x90,0xcd,0xd9,0x93,0x5b,0x5f,0xd0,0xdf,0xdb // AB C D E F不显示}; //断码uchar m,n;uchar code T[49][2]={{0,0},{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA, 0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0x FB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},{0xF D,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{ 0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE ,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},{0xFE,0x02},{0x FE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0 x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0 x71},{0xFF,0x79},{0xFF,0x81}};uchar code music1[][2]={{0,4}, //青花瓷{0,4},{24,4},{24,4},{21,4},{19,4},{21,4},{14,8},{19,4},{21,4 },{24,4},{21,4},{19,16},{0,4},{24,4},{24,4},{21,4},{19,4},{21,4}, {12,8},{19,4},{21,4},{24,4},{19,4},{17,16},{0,4},{17,4},{19,4},{2 1,4},{24,4},{26,4},{24,4},{22,4},{24,4},{21,4},{21,4},{19,4},{19,16},{0,4},{17,4},{19,4},{17,4},{17,4},{19,4},{17,4},{19,4},{19,4},{21, 8},{24,4},{21,4},{21,12},{0,4},{24,4},{24,4},{21,4},{19,4},{21,4} ,{14,8},{19,4},{21,4},{24,4},{21,4},{19,16},{0,4},{24,4},{24,4},{ 21,4},{19,4},{21,4},{12,8},{19,4},{21,4},{24,4},{19,4},{17,16},{0, 4},{17,4},{19,4},{21,4},{24,4},{26,4},{24,4},{22,4},{24,4},{21,4} ,{21,4},{19,4},{19,12},{12,4},{21,8},{19,4},{19,8},{17,16}, {0xFF,0xFF}};四、系统仿真与调试4.1 仿真软件简介Proteus是由Labcenter Electronics开发的功能强大的单片机仿真软件,现在最新版本6.9 SP5。