单片机课程设计可存储式电子琴姓名:班级:学号:指导老师:组长:小组成员:摘要电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
我们设计的这个简易电子琴以单片机作为主控核心,与键盘、蜂鸣器等模块组成核心主控制模块,在主控模块上设有4*4的矩阵键盘设计成16个音。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
根据使用者的操作随意弹奏想要表达的音乐。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号。
此外,本系统还实现了实时存储,能将演奏的音律存储起来并一块演奏出来。
关键词:单片机;按键;蜂鸣器;音阶;电子琴;可存储目录1 概述 (1)1.1电子琴设计目的及意义 (1)1.2设计任务 (1)1.3设计项目与功能简介 (1)1.31 设计项目简介 (1)1.32 系统功能简介 (2)2 硬件设计及说明 (3)2.1 硬件系统设计 (3)2.2 元件简介 (3)2.21 STC89C52 (3)2.22 蜂鸣器 (4)2.23 矩阵键盘 (5)2.24 LCD1602 (6)3 软件程序设计 (7)3.1 软件系统设计 (7)3.2音乐相关知识 (9)3.3 产生音频脉冲 (9)3.4 识别矩阵键盘 (10)3.5 LCD实时显示 (11)3.6实时存储音律信息 (13)4 系统调试 (13)4.1 硬件调试 (13)4.2软件调试 (13)5 课程设计个人分工及心得体会 (15)5.1个人分工 (15)5.2心得体会 (15)致谢 (15)参考文献 (16)附录 (17)1 概述1.1电子琴设计目的及意义随着当代科学技术的发展,电子产品在人们的日常生活中占据着越来越重要的地位。
电子琴作为其中的一个典型代表,引领着许多孩子进入音乐的殿堂。
因此电子琴的设计不仅能够提高我的实践动手能力,还与实际生活有着紧密地联系。
单片机是一门实践性很强的课程,而此次课程设计依据的理论基础是单片机的相关知识。
其主要目的是通过本课程的培养,启发学生的创造性思维,进一步理解数字系统的概念,掌握小型数字系统的设计方法,掌握小型数字系统的组装和调试技术,掌握查阅有关资料的技能。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
1.2设计任务本设计要求利用8051单片机的控制程序结合LCD,设计一台数字式可存储式电子琴。
其基本要求为:(1)使用LCD显示器来显示音阶输入的相关信息;(2)当按下键盘组相对按键,压电喇叭会发出相对音阶单音,共有2个8度音阶;(3)所有单音会存入8051内而保存起来;(4)至多可以输入64个单音,可以一起演奏出来;(5)演奏时可以按键中断;(6)可以实时显示目前正演奏的单音码。
1.3设计项目与功能简介1.31 设计项目简介本项目设计是采用 STC89C52 单片机作为核心,利用单片机技术、无源蜂鸣器、4x4 键盘、SPEAKER、以及LCD显示屏实现原理图设计到电路板设计开发,并用 C51 高级语言进行键盘识别程序设计和音频脉冲输出程序与音频存储程序的设计。
最终能够实现乐曲演奏和音律存储以及自动播放,并且可以通过LCD显示屏显示音符。
1.32 系统功能简介(1)能实现基本的琴键功能。
即按下每一个琴键,单片机能够检测到键盘的按键,并通过键盘的位置,通过程序来控制,使蜂鸣器发出不同频率的声音。
(2)能够实现LCD显示按键。
每按下一个按键时,单片机能够检测到所按下的按键,然后通过按键的位置通过程序控制来实现在LCD中显示相应按键。
(3)能够实现实时存储。
每按下一个按键时,发出一个单音并能将其存储起来。
然后,通过一个播放键将所存储的音乐播放出来。
(4)能够实现按键中断。
在播放音乐时可以按下中断键使音乐暂停与播放。
2 硬件设计及说明2.1 硬件系统设计硬件设计的任务是根据总体设计要求,在选择的机型的基础上,具体确定系统中所要使用的元器件,设计出系统的结构图。
该设计要实现一种由单片机控制可存储式电子琴,因为这是一个比较简单的系统,而STC89C52单片机经济实惠,也有很多优点,其性能完全可以满足设计的需求,所以我们选择STC89C52来作为此设计项目的核心。
电子琴首先必须要有按键,又要求输出16个音阶,所以我们采用了4X4矩阵键盘。
另外LCD显示器件具有工作电流小、重量轻、功耗低、寿命长、字迹清晰美观等优点,在便携式仪表、低功耗应用的仪器仪表中得到了广泛应用,所以我们选用了LCD1602来实现显示相应音符,其总体框图设计如下:图2.1 系统结构图2.2 元件简介2.21 STC89C52STC89C52是一种带 8K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS8 位微处理器,俗称单片机。
该器件采用高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。
由于将多功能 8位CPU 和闪烁存储器组合在单个芯片中,STC89C52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
STC89C52的主要特征:·8K字节可编程闪烁存储器寿命:1000写/擦循环数据保留时间:10年·全静态工作:0Hz-24Hz·三级程序存储器锁定·128*8位内部RAM·32可编程 I/O线·两个16位定时器/计数器·6个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路STC89C52的芯片图:图2.2 STC89C52芯片图2.22 蜂鸣器蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型1.压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。
有的压电式蜂鸣器外壳上还装有发光二极管。
多谐振荡器由晶体管或集成电路构成。
当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。
在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。
2.电磁式蜂鸣器电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
2.23 矩阵键盘单片机系统中,若使用按键的数量比较多时,通常选用用矩阵式键盘。
矩阵式键由行线和列线构成,按键位于行、列线的交叉点上, 键盘矩阵是由四行四列构成,矩阵的四列和 P1 口的低四位相连,四行与 P1 口的高四位相连。
其键盘识别方法如下:(1)判断键盘中有无键按下将全部行线置低电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
(2)判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
图2.3矩阵式键盘结构2.24 LCD1602LCD1602是以点阵字符型为显示方式的液晶显示器,每行可以显示16个字符,一共可以显示2行。
它由LCD显示屏、扩展驱动器HD44100和控制器HD44780组成,其主要参数如下:3 软件程序设计3.1 软件系统设计软件设计实际上就是程序编程,根据项目设计要求,我们把软件,设计部分大体分为了四个模块:音频脉冲产生程序设计、键盘扫描识别程序、实时存储程序与LCD显示程序。
其设计图如下:图3.1 软件系统设计图其总体流程图如下:图3.2 总体流程图3.2音乐相关知识乐音听起来有的高,有的低,这就叫音高,音高是由发音物体振动频率的高低决定的,频率高声音就高,频率低声音就低,不同音乐的乐音是用C、D、E、F、G、A、B表示的,这7个字母就是乐音的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,这是唱曲时乐音的发音,所以叫唱名。
音持续时间的长短即时值,一般用拍数表示,休止符表示暂停发音。
一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同频率的组合,加以与拍数对应的延时,构成音乐。
3.3 产生音频脉冲在本实验中,单片机工作于12MHZ时钟频率,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号,在此情况下,C调的各音符频率与计数值T的对照如下表:T的值决定了TH0和TL0的值,其关系为:TH0=T/256,TL0=T%256。
3.4 识别矩阵键盘在单片机应用系统中,键盘的工作方式主要有两种,即编程扫描与定时扫描。
编程扫描即行扫描法。
行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,介绍过程如下:(1)检测当前是否有键被按下。
(2)去除键抖动。
(3)若有键被按下,应识别出是哪一个键闭合。
方法是对键盘的行线进行逐行扫描。
(4)为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。
定时扫描是利用单片机内部的定时器产生一定时间的定时间隔,当定时时间到就产生定时器溢出中断,CPU响应中断时对键盘进行行扫描取键值,以响应键输入请求。
因为编程扫描CPU需不停地扫描键盘,影响其他功能的执行,工作效率低,所以我们采用了第二种键盘扫描识别方法。
其程序如下:void timer1()interrupt 3{TL1 =0x18 ;TH1 =0xfc ;KeyScan();}此语句实现了每1ms进行一次键盘扫描工作。
函数名称:键盘扫描子程序函数功能:按键状态的采集,定时1ms和消抖掩码实现每个按键20ms的消抖延时void KeyScan(){uint8 i;static uint8 iKeyOut=0;static uint8 KeyScanBuff[4][4];KeyScanBuff[iKeyOut][0] = ((KeyScanBuff[iKeyOut][0]<<1) | KEY_IN_1) & DEBOUNCE_MASK;KeyScanBuff[iKeyOut][1] = ((KeyScanBuff[iKeyOut][1]<<1) | KEY_IN_2) & DEBOUNCE_MASK;KeyScanBuff[iKeyOut][2] = ((KeyScanBuff[iKeyOut][2]<<1) | KEY_IN_3) & DEBOUNCE_MASK;KeyScanBuff[iKeyOut][3] = ((KeyScanBuff[iKeyOut][3]<<1) | KEY_IN_4) & DEBOUNCE_MASK;for (i=0; i<4; i++){if (KeyScanBuff[iKeyOut][i] == DEBOUNCE_MASK){KeySta[iKeyOut][i] = KEY_UP;}else if (KeyScanBuff[iKeyOut][i] == 0){KeySta[iKeyOut][i] = KEY_DOWN;}}iKeyOut = (iKeyOut+1) & 0x3;switch (iKeyOut){case 0:KEY_OUT_4 = 1;KEY_OUT_1 = 0;break;case 1:KEY_OUT_1 = 1;KEY_OUT_2 = 0;break;case 2:KEY_OUT_2 = 1;KEY_OUT_3 = 0;break;case 3:KEY_OUT_3 = 1;KEY_OUT_4 = 0;break;default:break;}}3.5 LCD实时显示LCD1602的控制器HD44780的主要功能部件有:DDRAM—显示数据RAM、CGROM —字符产生器ROM、CGRAM—字形产生器RAM、IR—指令寄存器、DR—数据寄存器、BF—忙碌标志信号和AC—地址计数器,七大部分组成。