单片机电子琴设计报告
- 格式:doc
- 大小:276.50 KB
- 文档页数:44
河南理工大学《单片机应用与仿真训练》设计报告题目: 模拟电子琴发声控制系统姓名学号:专业班级:指导老师:所在学院:摘要本设计是用 AT89S52 单片机为核心控制元件,设计一个模拟电子琴发声控制系统。
以单片机作为主控核心,与键盘、扬声器、LED 显示器等模块组成核心主控制模块。
在主控模块上设有11个按键,其中7个按键控制7个音符,1个作为功能转换键使用,具有手动随意弹奏和自动播放乐曲的功能,另外3个按键用来实现高、中、低音的音符发音。
下面具体介绍一下单片机各端口的分配功能:单片机的 P2.0-P2.6 为输入端口,用来控制 7个音符的选择弹奏;P2.7 为功能转换键,它能切换手动随意弹奏和自动播放乐曲的功能;P3.0-P3.2 为单片机控制电子琴实现弹奏高、中、低的功能切换键;P0 端口通过上拉电阻接到+5V 上,然后接LED共阴数码管;P1.0 为单片机的输出端口,它通过限流电阻 R 与三极管级基极相接,三极管的发射极又接蜂鸣器。
本设计通过控制单片机定时器的定时时间产生不同频率的音频脉冲,经三极管放大信号后驱动蜂鸣器发出不同音节的声音。
要实现7个音符的各自的高、中、低音,需要建立三个表,分别存储高音、中音和低音的频率值;当三个拨码开关中某一个按下,通过软件选择相应的音频。
按下弹奏键就可弹奏出不同的声音。
另外用软件延时来控制发音时间的长短来控制节拍。
通过把乐谱中的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在存储器中。
由程序查表得到定时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出该音频脉冲的持续时间,这样就可以实现乐曲的演奏。
为了实现按键的准确判断和完善电子琴发声的效果,本设计采用了软件防抖的方法,有效的解决了按键抖动的问题。
另外当按下功能切换键,切换至音乐自动播放功能时,本系统能实现四首歌曲的有选择播放,另附带数码管显示提醒。
这样使得电子琴的功能变的更加强大。
本设计为实物电路板设计开发,报告中详细的阐述了电子琴设计的方法和过程。
电子琴设计报告一、实验目的1.更深刻的了解、学习8051单片机的发声原理,利用定时器可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调。
2.其次,定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平,由于定时参数不同,所以发出不同频率的脉冲。
3.进一步熟悉定时器的编程方法和定时初值的计算,进一步熟悉键盘扫描电路的工作原理和编程方法,了解单片机芯片的接口技术。
二、实验要求1.能够通过键盘演奏音符。
2.能够保存演奏的音乐,并实现回放。
3.有音调调整功能(如:C调,G调)。
4.自由发挥其他功能。
5.要求有单片机硬件系统框图,电路原理图,软件流程图。
三、实验基本原理简易电子琴有主控、蜂鸣器、键盘输入、电源四部分组成。
主控部分以AT89S52 为核心,用C 语言编程,充分运用AT89S52 的8k字节闪烁可编程可擦除只读存储器及其丰富的I/O 口,实现了对键盘数据的采集,和对蜂鸣器声音的控制;键盘输入部分采用4×4的键盘键盘输入,可以实现多个音调;供电部分可对整个电路进行供电。
经测试,整机基本实现预计功能,可以实现键盘演奏音符、调整音调、保存并回放的功能。
四、实验设计分析根据实验所要求实现的功能设计实现该项实验设计的软件电路及硬件电路。
五、实验要求实现A.电路设计1. 整体设计计划利用AT89S52 单片机的功能结合C 语言编程,实现电子琴播放音符等的简单功能,然后结合AT89S52 单片机的控制功能,利用蜂鸣器将输入表达出来,结合程序编制过程中,对各个I/O 的利用设置了键盘的扫描读入,结合电子琴需要多键位的现实,加入了4×4 键盘输入,达到了预期的效果。
2.分块设计1.控制模块AT89S52单片机是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含有8kb的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。
一、实训目的1. 熟悉单片机的基本原理和编程方法。
2. 学习电子琴的原理和结构。
3. 掌握基于单片机的电子琴设计方法。
4. 培养动手实践能力和创新意识。
二、实训内容1. 单片机原理与编程2. 电子琴原理与结构3. 单片机电子琴设计4. 单片机电子琴制作与调试三、实训过程1. 单片机原理与编程在实训初期,我们学习了单片机的基本原理和编程方法。
单片机是一种集成了CPU、存储器、输入/输出接口等功能的微型计算机,具有体积小、功耗低、成本低等特点。
我们学习了51系列单片机的结构、指令系统、程序设计方法等。
2. 电子琴原理与结构电子琴是一种通过电子电路发出不同音阶声音的乐器。
我们学习了电子琴的原理和结构,包括音源模块、键盘模块、音量控制模块等。
3. 单片机电子琴设计在设计阶段,我们根据所学知识,设计了基于单片机的电子琴。
具体如下:(1)硬件设计电子琴的硬件主要由单片机、键盘、蜂鸣器、音量控制模块等组成。
我们选择了STC89C51单片机作为核心控制单元,键盘采用矩阵键盘,蜂鸣器用于发出声音,音量控制模块用于调节音量。
(2)软件设计软件设计主要包括以下几个部分:1)初始化:设置单片机的工作模式、初始化定时器、初始化键盘扫描等。
2)键盘扫描:检测键盘是否被按下,并读取按键值。
3)音阶生成:根据按键值计算对应的频率,通过定时器产生PWM信号,驱动蜂鸣器发出声音。
4)音量控制:根据音量控制模块的输入,调节PWM信号的占空比,实现音量控制。
5)音乐播放:存储一首或多首歌曲,通过键盘控制播放、暂停、停止等操作。
4. 单片机电子琴制作与调试在制作阶段,我们根据设计方案,搭建了电子琴的硬件电路,并编写了相应的程序。
在调试过程中,我们遇到了以下问题:(1)键盘扫描不稳定:经过分析,发现是由于按键抖动引起的。
我们通过软件去抖动的方法解决了这个问题。
(2)音阶不准确:经过分析,发现是由于定时器设置不当引起的。
我们调整了定时器的计数值,使音阶更加准确。
随着科技的飞速发展,单片机技术已成为现代电子技术的重要分支。
为了更好地学习和掌握单片机编程及应用,我们设计并实现了一款基于单片机的简易电子琴。
本实验旨在通过设计一个简易电子琴,让学生深入了解单片机的原理和应用,提高动手实践能力。
二、实验目的1. 掌握单片机的基本原理和编程方法。
2. 学会使用定时器、中断、键盘扫描等技术。
3. 了解电子琴的工作原理和制作方法。
4. 培养学生的创新意识和团队协作能力。
三、实验原理本实验采用STC12C5A32S2单片机作为核心控制单元,通过定时器产生方波信号,驱动蜂鸣器发出不同频率的声音,实现电子琴的演奏功能。
具体原理如下:1. 单片机原理:STC12C5A32S2单片机是一款高性能、低功耗的单片机,具有丰富的片上资源,如定时器、中断、串口等。
2. 定时器:定时器用于产生固定频率的方波信号,驱动蜂鸣器发出不同频率的声音。
通过调整定时器的计数值,可以改变方波信号的频率,从而改变音调。
3. 中断:中断技术用于实现按键扫描功能。
当按键被按下时,单片机响应中断,读取按键状态,并产生相应的音调。
4. 键盘扫描:键盘扫描技术用于检测按键状态。
通过扫描键盘矩阵,可以判断哪个按键被按下,并产生相应的音调。
四、实验内容1. 硬件设计:主要包括单片机、蜂鸣器、键盘、电阻、电容等元器件。
将元器件按照电路图连接,形成电子琴的硬件电路。
2. 软件设计:主要包括主程序、定时器中断服务程序、按键扫描程序等。
通过Keil C编程,实现电子琴的演奏功能。
3. 调试与测试:对电子琴进行调试和测试,确保其能够正常工作。
1. 搭建电路:按照电路图连接元器件,形成电子琴的硬件电路。
2. 编写程序:使用Keil C编写主程序、定时器中断服务程序、按键扫描程序等。
3. 编译程序:将编写好的程序编译成HEX文件。
4. 烧录程序:将编译好的HEX文件烧录到单片机中。
5. 调试与测试:使用万用表测试电路是否正常工作,并对程序进行调试,确保电子琴能够正常演奏。
51单片机简易电子琴设计(总19页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--毕业设计(论文)课题名称:指导教师:系别:专业:班级:姓名:摘要音乐一直都是人类情感表达的一个重要媒介,随着社会的进步与发展,音乐在人类的生活与学习中的作用越发不可忽视。
电子琴也是实现播放音乐的一个途径。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器,它在音乐演奏中已成为不可缺少的一部分。
单片机是一个具有功能强大和编程灵活性的控制器,它已广泛应用于现代人们的生活中,扮演着重要的角色。
本设计主要是使用AT89C51单片机及单片机C语言,用AT89S51单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
在PROTEUS仿真平台上实现功能仿真,同时还增加了音乐播放功能。
本文中给出了该系统设计的硬件电路,软件设计等。
其次,详细阐述了程序的各个模块和实现过程。
本设计具有硬件电路简单、功能完善、控制可靠、运行稳定等特点,具有一定的实用性。
关键词: 单片机;电子琴;PROTEUS;KEIL;C语言1.引言单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。
它的应用必定导致传统的控制技术从根本上发生变革。
因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色。
简易电子琴是电声乐队的中坚力量,常用于独奏主旋律并伴以丰富的和声。
还常作为独奏乐器出现,具有鲜明时代特色。
但电子琴的局限性也是十分明显:旋律与和声缺乏音量变化,过于协和、单一;在模仿各类馆、弦乐器时,音色还不够逼真,模仿提琴类乐器的音色时,失真度更大,还需要不断改进。
基于单片机的电子琴设计一、引言二、总体设计方案(一)设计目标设计一款基于单片机的电子琴,能够实现基本的音符演奏、音色切换、节奏控制等功能,并且具有良好的音质和稳定性。
(二)系统组成本电子琴系统主要由单片机控制模块、键盘输入模块、音频输出模块、显示模块和电源模块等部分组成。
1、单片机控制模块选用 STM32 系列单片机作为控制核心,负责处理键盘输入信号、生成音频信号、控制显示等功能。
2、键盘输入模块采用矩阵键盘,通过扫描键盘获取用户的按键操作,将其转换为对应的音符编码发送给单片机。
3、音频输出模块使用DAC 芯片将单片机生成的数字音频信号转换为模拟音频信号,再通过放大器和扬声器输出声音。
4、显示模块采用液晶显示屏,用于显示当前的演奏状态、音色选择、节奏模式等信息。
5、电源模块为整个系统提供稳定的电源供应,可采用电池供电或外接电源适配器。
三、硬件设计(一)单片机最小系统STM32 单片机的最小系统包括时钟电路、复位电路和电源电路。
时钟电路为单片机提供工作时钟,复位电路用于系统初始化,电源电路为单片机提供稳定的电源。
(二)键盘电路矩阵键盘由行线和列线组成,通过逐行扫描的方式检测按键状态。
将键盘的行线和列线分别连接到单片机的 GPIO 引脚,通过编程实现键盘扫描和按键识别。
(三)音频输出电路选用高性能的 DAC 芯片,如 PCM1794,将单片机输出的数字音频信号转换为模拟音频信号。
为了提高音频输出的质量,还需要添加放大器和滤波电路,以增强信号的功率和去除噪声。
(四)显示电路液晶显示屏通过 SPI 接口或 I2C 接口与单片机连接,单片机通过发送指令和数据来控制显示屏的显示内容。
(五)电源电路根据系统的工作电压和电流需求,选择合适的电源芯片,如LM7805 等,将输入电源转换为所需的电压,并通过滤波电容等元件提高电源的稳定性。
四、软件设计(一)主程序流程主程序首先进行系统初始化,包括单片机初始化、键盘初始化、音频输出初始化、显示初始化等。
单片机课程设计报告电子琴一、选题背景随着数字技术的飞速发展和信息科学的快速推进,单片机作为信息处理的核心器件,正在得到越来越广泛的应用。
随着芯片技术的不断更新和改进,单片机应用领域的拓宽和深化,各行各业对单片机专业人才的需求也愈发迫切。
因此,在单片机课程的教学中,设计一些实用的小项目、小应用,既能提高学生的实践操作能力,又能激发其学习兴趣和学科热情,是非常有必要的。
二、课程目标通过设计电子琴这一实用项目,达到以下三个目标:(1)掌握单片机的基本知识和操作技巧。
在设计项目中,需要使用到很多单片机相关的知识和技术,如单片机的编程语言、端口连接、程序设计、调试样板、原理图设计等。
通过这些操作,学生可以对单片机的工作原理和编程方法有一个更加深入的理解。
(2)培养学生应用知识的能力。
设计电子琴,需要使用到单片机的定时器、PWM输出、按键检测、LED灯控制等相关知识。
学生需要将这些知识应用到实际操作中,才能真正掌握这些知识点,更好地了解单片机的工作原理和性能特点。
(3)激发学生的创造性思维和创新意识。
在设计电子琴的过程中,学生需要从众多课程内容和技能中选择并运用所学知识,遇到问题时需要有创造性解决的思维和意识。
此过程能够帮助学生提高独立思考和创新能力,将所学知识真正运用到实践中。
三、教学方法针对单片机课程设计中的三个目标,教学方法如下:1. 理论和实践相结合学生需要了解单片机的基本知识和操作技巧,包括单片机的性能特点、端口连接、程序设计、原理图设计等。
同时,为了更好地掌握实际操作,需要将理论知识与实践操作相结合,在课程中给予足够的操作机会和实践练习,让学生深刻感受到不同参数的变化对最终设备造成的影响。
2. 开放性思考学习单片机课程时,教师需要引导学生进行开放性思考。
鼓励学生发现问题、提出问题、寻找问题的解决方案,从而提高学生的创造性思维和创新意识。
3. 相互合作学习在课程设计中,可以采用分组方式,让学生互相合作、共同学习、共同探讨解决问题的方法和途径。
单片机电子琴的设计首先是硬件设计部分。
单片机电子琴所需的硬件主要包括按键、音频输出、显示器和电源等模块。
按键模块需要设计合适数量的按键,并使用矩阵键盘的方式将按键连接到单片机的IO口上,以实现按键的检测和输入。
音频输出模块通常采用DAC芯片来实现数字音频信号转换为模拟音频信号的功能,然后经过功放放大后输出到扬声器上。
显示器模块可以选择使用LCD液晶屏或LED数码管来显示琴键、音高等信息。
电源模块需要提供稳定的电源电压和电流,以供单片机和外围电路正常工作。
接下来是软件实现部分。
软件设计主要包括音符识别、声音发生和音效处理三个方面。
音符识别指的是按键被按下时,通过单片机程序判断出对应的音符,并通过输出特定的数字信号给DAC芯片生成对应的模拟音频信号。
声音发生部分需要设计合适的音色合成算法,将数字信号转化为合成的音乐音频信号,并通过DAC芯片输出到扬声器上。
音效处理部分可以实现对音频信号的各种音效处理,如混响、合唱、合成等效果,增强音乐的表现力。
在功能拓展方面,可以考虑添加MIDI接口,实现电子琴与其他音乐器材的连接和交互。
可以使用光敏电阻和温湿度传感器来实现环境音效的调整。
还可以设计一个简单的录音和播放功能,实现对演奏的录音和回放。
另外,还可以通过添加存储器模块,实现曲目的存储和选择功能。
总结起来,单片机电子琴的设计涉及到硬件设计、软件实现以及功能拓展等方面。
通过合理地设计硬件电路,采用适当的音符识别算法和声音合成算法,还可以扩展丰富的音效和功能,实现一个高性能的单片机电子琴。
单片机实验报告电子琴单片机实验报告电子琴引言:电子琴是一种流行的乐器,它通过电子元件产生声音,具有丰富的音色和音效。
在本次实验中,我们使用单片机来设计和制作一个简单的电子琴,通过按键触发不同的音调,实现基本的音乐演奏功能。
本文将介绍电子琴的原理、设计过程和实验结果。
一、原理电子琴的原理是基于音频合成技术,通过控制不同频率的声音波形来产生不同的音调。
而单片机作为电子琴的控制核心,负责接收按键信号,并通过输出引脚控制声音的发声。
具体来说,单片机通过读取按键的状态,判断按键是否按下,并根据按键的不同触发相应的音调发声。
二、设计过程1. 硬件设计在硬件设计方面,我们需要准备以下元件:单片机、按键、蜂鸣器、电阻、电容等。
首先,将按键连接到单片机的输入引脚上,以便检测按键的状态。
然后,将蜂鸣器连接到单片机的输出引脚上,以便通过控制引脚输出高低电平来实现声音的发声。
最后,根据需要添加电阻和电容等元件,以保证电路的稳定性和正确性。
2. 软件设计在软件设计方面,我们需要使用单片机的编程语言来实现电子琴的功能。
首先,我们需要设置单片机的输入引脚和输出引脚,并定义按键的状态和蜂鸣器的控制信号。
然后,我们需要编写程序来实现按键的检测和音调的控制。
具体来说,当按键按下时,单片机会读取按键的状态,并根据不同的按键触发不同的音调,同时控制蜂鸣器的输出信号,以实现声音的发声。
三、实验结果在实验过程中,我们成功地设计和制作了一个简单的电子琴。
通过按下不同的按键,我们可以听到不同的音调发声,从而演奏出简单的音乐。
实验结果表明,我们设计的电子琴具有良好的音效和音色,能够满足基本的音乐演奏需求。
结论:通过本次实验,我们深入了解了电子琴的原理和设计过程,并成功地制作了一个简单的电子琴。
通过单片机的控制,我们可以实现按键触发不同音调的发声,从而演奏出简单的音乐。
电子琴作为一种流行的乐器,具有广泛的应用和发展前景。
通过不断的学习和实践,我们相信可以设计出更加复杂和高级的电子琴,为音乐爱好者提供更多的乐器选择和音乐表达方式。
基于单片机的电子琴设计电子琴是一种常见的乐器,通过电子元件和技术实现各种声音效果和音调的变化。
基于单片机的电子琴设计,使用单片机作为核心控制芯片,可以实现各种音色的生成、乐曲演奏和音调调整等功能。
一、基本原理1.音源生成:通过单片机的计算和控制,生成各种音色的数字波形信号。
可以使用PWM波形发生器,通过控制占空比实现不同音调的发声。
2.按键输入:通过按键进行音符的选择和演奏,按键可以通过矩阵键盘或编码器等方式实现,通过单片机的GPIO口读取按键输入信号。
3.音量控制:通过调节音量电阻或数字控制器,调整输出音量大小。
4.音色调整:通过改变生成波形的参数和算法,实现不同音色效果的切换和调整。
二、硬件设计1.单片机:选择合适的单片机,如STC89C52或ATmega328P等,作为控制核心。
2.键盘:选择合适的键盘结构和按键数量,如矩阵键盘或编码器。
3.音源:可以选择合适的音源模块或芯片,如AD9833,用于生成各种音色的波形信号。
4.音量控制:将数字音频信号通过运放进行放大,通过音量电位器或数字控制器调节输出音量大小。
5.音箱:选择合适的音箱,用于放大和放出音频信号。
三、软件设计1.按键扫描:通过单片机的GPIO口读取按键输入信号,实现按键的扫描和检测。
2.音符和音调处理:将按键输入映射为相应的音符号,通过生成不同的波形并控制频率实现不同音调的发声。
3.音量控制:通过改变音源模块的输出幅度或控制运放的增益,实现音量的调节。
4.音色调整:通过改变生成音色的参数和算法,实现不同音色效果的切换和调整。
5.乐曲演奏:通过编写相应的乐曲和音符的编码和播放算法,实现各种乐曲的演奏功能。
6.界面显示:可以通过液晶显示屏或LED显示器,实现界面的显示和操作。
四、功能扩展1.录音和播放:在单片机上添加存储模块(如SD卡或FLASH芯片),实现录音和播放功能,可以录制和回放演奏的音乐。
2.MIDI接口:添加MIDI接口,通过MIDI合成音源模块,实现与其他乐器和设备的互联。
1课程设计的意义单片机自20世纪70年代问世以来,已对人类社会产生了巨大的影响。
尤其是美国Intel公司生产的MCS-51系列单片机,由于其具有集成度高、处理功能强、可靠性高、系统结构简单、价格低廉、易于使用等优点,在工业控制、智能仪器仪表、办公室自动化、家用电器等诸多领域得到广泛的应用。
20世纪80年代中期以后,Intel公司已把精力集中在CPU芯片的开发、研制上,并逐渐放弃了单片机芯片的生产,但是以MCS-51内核技术为主导的单片机已经成为许多厂家及公司竞相选用的对象。
因此,Intel公司以专利转让或技术交换的形式把MCS-51的内核技术转让给了许多国际上著名的半导体芯片生产厂家,如ATMEL、PHILIPS、Cygnal等公司。
这些厂家生产的与MCS-51系列单片机兼容的各种增强型、扩展型单片机,已成为世界上8位单片机市场的主流产品。
估计在今后若干年内,它们仍是我国8位单片机应用领域的主流机型。
音乐已经成为现代人们生活所不可缺少的艺术,美妙的音乐可以让人放松,使人愉悦,电子琴作为一种乐器已经得到很多音乐人的重视和应用,一个质量好的电子琴可以做出让人欣赏的美好音乐,所以作为从事电子技术领域的我们来说,能做出质量优越的电子琴是我们的义务和责任,虽然今天我们做的是简易电子琴,但其已经具有电子琴的基本功能,为以后的进一步开发研究奠定一个良好的基础。
本课程设计的目的是为了深入了解MCS-51系列单片机的功能以及应用,学会制作简单的电子琴。
会使用LCD显示屏,对其有进一步的了解。
2方案论证2.1设计的任务本课程设计的任务是应用单片机制作一个简易的电子琴,能够准确发出基本的音符,并且同时能将音符在显示屏上现实出来。
2.2设计的要求利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,并且要求按下键发声,松开延时一段时间停止,中间再按别的键则发另外一音调的声音。
当系统扫描到有按键被按下,则快速检测出是哪一个键被按下,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就回发出相应的音调。
单片机原理课程设计报告--电子琴北京工商大学计算机与信息工程学院单片机原理课程设计报告题目:用PROTEUS实现:硬件实验二十五电子琴专业:电气工程及其自动化班级:学号:姓名:同组姓名:指导教师:单片机原理课程设计报告一.题目:用protues实现硬件实验25 电子琴二.要求:2.1设计任务a.设计一个4X6的24个按键矩阵,并且1---7键每个键对应一个音。
b.用AT80C51将键盘连接设计成为电子琴。
c.编写电子琴的程序,要达到可以随意弹奏想要表达的音乐的目的。
d.程序的分析与调试。
2.2设计要求a.用汇编语言编程实现程序设计。
b.利用查表,中断等方式实现目的。
c.系统的各个功能模块要清楚,有序。
2.3设计说明a、利用定时器,可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调.b、定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平.由于定时参数不同,就发出了不同频率的脉冲. 本实验中按键一次,会发50个脉冲.发完后继续检测键盘,如果键还按下,继续发音。
各音阶标称频率值:音阶 1 2 3 4 5 6 7频率444.0 493.8 554.3 587.3 659.2 739.9 830.6 (HZ)2.4课设目的a. 了解计算机发声原理。
b. 进一步熟悉定时器编程方法.c. 进一步熟悉键盘扫描电路工作原理及编程方法三.总体说明:本系统采用单片机AT80C51为电子琴的控制核心,系统主要包括播放模块、按键控制模块。
下面对各模块的设计逐一进行论证比较。
3.1 播放模块播放模块是喇叭构成。
它几乎不存在噪声,音响效果较好。
而且由于所需驱动功率较小,且价格低廉,所以,被广泛应用。
3.2按键控制显示模块电子琴设有24个按键,其中7个作为音符输入。
7个按键分别代表7个音符,包括中音段的全部音符。
当按下剩余的17个按键时,实现数码管显示全为8.8.8.8.8.8.3.3总体硬件组成框图三.硬件设计:中心控制模块按键控播放按键电子琴全图4.1键盘显示电路数码显示电路键盘按键电路键盘采用编程扫描方式,显示译码管采用动态显示方式,左端74LS374和74LS245的输入端接分别接地址锁存器74LS373的输入端。
专业方向课程设计报告基于单片机的电子琴设计班级:组员:组号:基于单片机的电子琴设计1.设计要求4*4按键组成16个按键矩阵, 设计成16个音。
然后再用一个音频放大模块来使音乐播出的声音变大。
用户可通过这16个键的随意组合来随意弹奏想要表达的音乐。
且按键松开延时一段时间停止, 中间再按别的键则发另一音调的声音。
2.方案比较与确定方案一: 使用单片机内部定时器, 通过编程实现发出不同频率方波, 产生音阶。
方案二: 使用8253作为外部定时器, 通过编程实现产生所需频率的方波。
通过对方案一和方案二的比较可以知道, 方案一是通过使用单片机内部定时器, 以编程实现方波输出, 优点在于外部电路简单, 程序结构简单, 缺点在于消耗单片机资源过多, 不利于优化升级;方案二是利用8253来产生方波, 相对来说这种方案外部电路较为复杂, 程序结构也更为复杂, 优点在于占用单片机资源少, 输出稳定, 利于扩展;为简化结构我们选择方案。
2.1 方案一设计2.1.1 方案: 利用单片机产生不同频率来获得我们要求的音阶, 最终可随意弹奏想要表达的音乐。
并且分别从原理图, 主要芯片, 各模块原理及各模块的程序的调试来详细阐述。
按下键盘矩阵中的按键会使扬声器播放器对应的音符。
其原理框图如下:图1 电路方框图2.1.2. 1 硬件设计规划: 根据系统设计要求, 系统设计采用自顶向下的设计方法, 它由复位模块、音调发生模块和矩阵键盘模块三部分组成。
电子琴系统原理框图如下:图2 电子琴系统原理框图2.1.2.2 AT89C52芯片介绍其中AT89C52为8位低功耗单片机, 采用工业标准的C51内核, 在内部功能及管脚排布上与通用的8xc52 相同, 其主要用于会聚调整时的功能控制。
功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化, 会聚调整控制, 会聚测试图控制, 红外遥控信号IR的接收解码及与主板CPU通信等。
基于51单片机的电子琴设计随着科技的不断发展,单片机技术已经成为了现代电子设备中的重要组成部分。
51单片机作为一种广泛应用的单片机系列,具有高性能、低功耗、高集成度等特点,被广泛应用于各种嵌入式系统开发中。
本文将介绍一种基于51单片机的电子琴设计。
一、系统硬件设计1、单片机选择本设计选用AT89C51单片机作为主控制器,AT89C51是一种低功耗、高性能的8位单片机,具有4K字节的可编程存储器和128字节的RAM,同时具有丰富的外设接口,如UART、SPI、I2C等。
2、电子琴设计电子琴采用8×8 LED点阵作为输出设备,通过单片机控制点阵的亮灭状态来展示音乐波形。
具体实现方式是将音频信号通过一个运放放大器放大,然后将其输入到LED点阵中,通过控制点阵的亮灭状态来展示音乐的波形。
3、存储模块设计为了实现电子琴曲目的存储和播放,本设计选用了一块AT24C02 EEPROM芯片作为存储设备。
AT24C02是一种串行E2PROM存储器,容量为256字节,可以通过I2C总线与单片机进行通信。
将曲目信息存储在AT24C02中,可以实现曲目的存储和播放功能。
4、按键模块设计本设计采用4×4矩阵键盘作为输入设备,通过扫描按键状态来实现音符的选择和节奏控制。
矩阵键盘的行线连接到单片机的P1口,列线连接到P2口,通过检测行列组合的变化来确定按下的键位。
二、系统软件设计1、音符解码本设计采用MIDI音符编码方式来存储和播放曲目信息。
在解码过程中,根据音符的频率和持续时间计算出对应的音高和节奏信息,然后将其用于驱动电子琴的输出设备展示音乐的波形。
2、演奏控制为了实现节奏控制,本设计采用了一种基于时间间隔的演奏方式。
在演奏过程中,单片机根据设定的节奏间隔时间来触发音符输出,从而实现对节奏的控制。
同时,为了实现曲目的停止和播放功能,我们需要在软件中加入相应的控制逻辑。
3、存储和播放在软件设计中,我们需要实现将曲目信息存储到AT24C02中以及从AT24C02中读取曲目信息的功能。
基于单片机的电子琴设计资料电子琴是一种电子乐器,通过电子回路和单片机控制,可以模拟出多种乐器的声音。
下面是一个基于单片机的电子琴设计资料,包括硬件设计和软件编程。
硬件设计:1.材料准备:选择一个适当大小的键盘,通常有8个到16个键位,每个键位可以连接到一个按钮开关。
2.连接按钮开关:将按钮开关连接到单片机的GPIO引脚上,通过读取引脚状态来检测按键的按下与释放。
3.音频输出:将单片机的数字音频输出连接到扬声器上,以发出相应的声音。
4.电源供应:提供适当的电源电压和电流给单片机和其他电子元件使用。
软件编程:1.初始化:在程序开始时,初始化单片机的GPIO引脚以及其他必要的外设,设置合适的时钟频率和中断设置。
2.按键扫描:通过循环遍历GPIO引脚,检测按钮开关的状态。
当检测到按键按下时,记录下按键对应的音符。
3.声音发生器:根据按键记录的音符,生成相应的音频信号。
可以使用一组预设的音符频率和振幅值,或者使用数学公式生成声音波形。
4.声音输出:将生成的音频信号发送到数字音频输出引脚,输出到扬声器上。
5.多音同步:为了更好的音乐体验,可以通过增加多音同步功能,使得按下多个按键时可以同时发出多个音符。
设计注意事项:1.硬件连接:确保正确连接按钮开关、声音输出和电源供应等元件,避免短路或其他电路问题。
2.音频信号处理:可以通过数字信号处理(DSP)算法对音频信号进行增强、滤波等处理,提高音质和音效。
3.功耗优化:在编程时,可以考虑使用低功耗模式以延长电子琴的电池寿命。
4.隔音材质:适当在琴身上加入隔音材质,减少按键和扬声器震动传递到外部的噪音。
总结:基于单片机的电子琴设计包括硬件连接和软件编程两个方面,硬件连接主要涉及键盘、按钮开关、扬声器和电源供应等元件的连接,软件编程则负责按键扫描、音频发生和音频输出等功能。
在设计过程中需注意硬件连接的正确性和优化声音效果,使得电子琴能够发出优美的音乐。
设计题目单片机电子琴摘要随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。
我们都会抽空欣赏世界名曲,作为对精神的洗礼。
本论文设计一个基于单片机的简易电子琴。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本系统是以51系列单片机AT89C51为主控制器,附有矩阵键盘、LED显示管、扬声器组成。
系统完成显示输入信息、播放相应音符等基本功能。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
关键词:AT89C51,矩阵键盘,LED显示管,蜂鸣器,1602液晶显示,1307时钟芯片。
目录第1章概述----------------------------------------------------------------------------------4第2章课程设计任务及要求-----------------------------------------------------------42.1 设计任务-------------------------------------------------------------------------------42.2 设计要求-------------------------------------------------------------------------------4第3章系统设计-----------------------------------------------------------------------------53.1设计方案-------------------------------------------------------------------------------53.2 系统设计--------------------------------------------------------------------------------53.2.2系统流程图-----------------------------------------------------------------------53.2.2 系统原理图 ------------------------------------------------------------------------73.3 文件程序代码---------------------------------------------------------------------------7第4章心得体会-----------------------------------------------------------------------------42第1章概述单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。
它的应用必定导致传统的控制技术从根本上发生变革。
因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要容是用单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。
本系统是简易电子琴的设计,按下键盘矩阵中的按键会使数码管显示当前按键,扬声器播放器对应的音符。
通过设计本系统可了解单片机的基本功能。
对单片机的了解有一个小的飞跃。
第2章课程设计任务及要求2.1 设计任务1、任务设计一简易电子琴,要求能够发出1,2,3,4,5,6,7等7个音符,具有一般演奏功能。
2.2 设计要求1)具有一般演奏功能,利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一个音调的声音2)具有自动播放已存曲目功能3)显示当前正在播放的歌曲的名称和歌词4)显示时间第3章系统设计3.1设计方案该电路由时钟模块,液晶模块,键盘扫描模块组成。
时钟模块:由时钟模块1307实现,能够正确显示时间,以及扩展显示星期等等。
液晶模块:将时钟模块的信息正确的显示到液晶显示屏上,使用1602的液晶。
键盘扫描模块:对十六个按键进行逐次扫描,扫描到前八个按键时,蜂鸣器依次发出1,2,3,4,5,6,7,8的音调声,岸其余按键时,可以跳转到不同的曲目以及液晶模块显示,保留几个按键做以后的扩展用。
3.2 系统设计3.2.1 系统流程图分析各项设计要求后,可绘制如下程序流程图3.2.2 系统原理图3.3文件程序代码(1).液晶模块头文件sbit LCD_RS = P3^6; sbit LCD_RW = P3^5; sbit LCD_EN = P3^3; sfr LCDData=0x80;void LCDWrite(bit cd,unsigned char input);void LCDWait(unsigned char CiShu);void LCDDelay();void LCDInitialize();void LCDPrintString(unsigned char x,unsigned char y,unsigned char *st ring);void LCDPrintNumber(unsigned char x,unsigned char y,unsigned char bit s,unsigned int number);unsigned char ReadState();void LCDInitialize(){LCDDelay();LCDWrite(0,0x38);LCDDelay();LCDWrite(0,0x38);LCDDelay();LCDWrite(0,0x38);LCDDelay();LCDWrite(0,0x38);LCDDelay();LCDWrite(0,0x08);LCDDelay();LCDWrite(0,0x01);LCDDelay();LCDWrite(0,0x06);LCDDelay();LCDWrite(0,0x0c);}void LCDWrite(bit cd,unsigned char DATA){LCDWait(20);LCD_RS=cd;LCD_RW=0;LCD_EN=0;LCDData=DATA;LCD_EN=1;LCD_EN=0;}void LCDPrintString(unsigned char x,unsigned char y,unsigned char *st ring){unsigned char address;address=x+(1-y)*0x40+0x80;LCDWrite(0,address);while(*string!='\0')LCDWrite(1,*string);string++;}}void LCDPrintNumber(unsigned char x,unsigned char y,unsigned char Wei Shu,unsigned int number){unsigned char address;unsigned char j,temp[5];address=x+(1-y)*0x40+0x80;LCDWrite(0,address);//if(number>0){temp[0]=(number%100000)/10000+48;temp[1]=(number%10000)/1000+48;temp[2]=(number%1000)/100+48;temp[3]=(number%100)/10+48;temp[4]=number%10+48;for(j=5-WeiShu;j<5;j++){LCDWrite(1,temp[j]);}}void LCDWait(unsigned char CiShu) {unsigned char i;for(i=0;i<CiShu;i++){if(ReadState()&0x80)continue; else break;}}unsigned char ReadState(){unsigned char temp;P0=0xff;LCD_EN=0;LCD_RS=0;LCD_RW=1;LCD_EN=1;temp=LCDData;LCD_EN=0;return temp;}void LCDDelay(){unsigned int a;for(a=0;a<1000;a++);}(2).时钟芯片模块头文件void iicdelay(unsigned int times); void iicstart(){MDE=1;MDO=1;iicdelay(2);MCO=1;iicdelay(2);MDO=0;iicdelay(2);}void iicstop(){MDE=1;MDO=0;iicdelay(2);iicdelay(2); MDO=1;}void iicack() {MDE=1;MCO=0;MDO=0;iicdelay(2); MCO=1;iicdelay(2); MCO=0;iicdelay(1); MDO=1;}void iicnack() {MDE=1;//MCO=0;MDO=1;iicdelay(2); MCO=1;iicdelay(2);}bit iicreadack(){bit ack;MCO = 0;iicdelay(2);MDE=1;MDO=1;MCO=1;iicdelay(2);MDE=0;ack=MDI;MCO=0;return ack;}void iicwriteda(unsigned char da) {unsigned char i;MDE=1;for(i=0;i<8;i++){MCO=0;iicdelay(0);if((da<<i)&0x80)MDO=1;elseMDO=0;iicdelay(2);MCO=1;iicdelay(3);}MCO=0;}unsigned char iicreadda() {unsigned char da;int i;da=0;MDE=1;MDO=1;MDE=0;for(i=0;i<8;i++){MCO=0;iicdelay(3);MCO=1;iicdelay(1);if(MDI==1){da=da<<1;da++;}elseda=da<<1;}MCO=0;return da;}void iicdelay(unsigned int t){unsigned int i,j;for(i=0;i<t;i++)for(j=5;j>0;j--);}void ReadTime(unsigned char TIME[7]) {bit EATemp;unsigned char temp;EATemp=EA;iicstart();iicwriteda(0xd0);iicreadack();iicwriteda(0x00);iicreadack();iicstop();iicdelay(1);iicstart();iicwriteda(0xd1);iicreadack();TIME[0]=iicreadda(); iicack();TIME[1]=iicreadda(); iicack();TIME[2]=iicreadda(); iicack();TIME[3]=iicreadda(); iicack();TIME[4]=iicreadda(); iicack();TIME[5]=iicreadda();iicack();TIME[6]=iicreadda();iicnack();iicstop();iicdelay(1);TIME[0]=((TIME[0]&0x7f)>>4)*10+(TIME[0]&0x0f); //secondTIME[1]=((TIME[1]&0x7f)>>4)*10+(TIME[1]&0x0f); //minuteif(TIME[2]&0x40){if(TIME[2]&0x20)temp=0x80;else temp=0x40;TIME[2]=((TIME[2]&0x1f)>>4)*10+(TIME[2]&0x0f); //hour TIME[2]|=temp;}else{TIME[2]=((TIME[2]&0x3f)>>4)*10+(TIME[2]&0x0f);}TIME[3]=TIME[3]&0x07; //weekTIME[4]=((TIME[4]&0x3f)>>4)*10+(TIME[4]&0x0f); //dateTIME[5]=((TIME[5]&0x1f)>>4)*10+(TIME[5]&0x0f); //monthTIME[6]=(TIME[6]>>4)*10+(TIME[6]&0x0f); //yearEA=EATemp;}void SetTime(unsigned char TIME[7]){bit EATemp;unsigned char temp=0;unsigned char TimeTemp[7];EATemp=EA;for(temp=0;temp<7;temp++)TimeTemp[temp]=TIME[temp];temp=0;TimeTemp[6]=((TimeTemp[6]/10)<<4)+(TimeTemp[6]%10);TimeTemp[5]=((TimeTemp[5]/10)<<4)+(TimeTemp[5]%10);TimeTemp[4]=((TimeTemp[4]/10)<<4)+(TimeTemp[4]%10);TimeTemp[3]=((TimeTemp[3]/10)<<4)+(TimeTemp[3]%10);if((TimeTemp[2]&0xc0)==0x00){TimeTemp[2]=((TimeTemp[2]/10)<<4)+(TimeTemp[2]%10); }else{if((TimeTemp[2]&0xc0)==0x01)temp=0x40;else temp=0x60; TimeTemp[2]&=0x3f;TimeTemp[2]=((TimeTemp[2]/10)<<4)+(TimeTemp[2]%10); TimeTemp[2]|=temp;}TimeTemp[1]=((TimeTemp[1]/10)<<4)+(TimeTemp[1]%10); TimeTemp[0]=((TimeTemp[0]/10)<<4)+(TimeTemp[0]%10);TimeTemp[0]&=0x7f;iicstart();iicwriteda(0xd0);iicreadack();iicwriteda(0x00);iicreadack();iicwriteda(TimeTemp[0]);iicreadack();iicwriteda(TimeTemp[1]);iicreadack();iicwriteda(TimeTemp[2]);iicreadack();iicwriteda(TimeTemp[3]);iicreadack();iicwriteda(TimeTemp[4]);iicwriteda(TimeTemp[5]);iicreadack();iicwriteda(TimeTemp[6]);iicreadack();iicstop();iicdelay(1);EA=EATemp;}void SwitchRTC(unsigned char SWITCH) {unsigned char temp;bit EATemp;EATemp=EA;iicstart();iicwriteda(0xd0);iicreadack();iicwriteda(0x00);iicreadack();iicstop();iicstart();iicwriteda(0xd1);iicreadack();temp=iicreadda();iicnack();iicstop();//iicdelay(1);if(SWITCH)temp&=0x7f; else temp|=0x80;iicstart();iicwriteda(0xd0);iicreadack();iicwriteda(0x00);iicreadack();iicwriteda(temp);iicreadack();iicstop();//iicdelay(1);EA=EATemp;(3)主体程序#include<aduc848.h>#include <INTRINS.H>#include<LCD1602.h>#include<rtc.h>sbit lie0=P2^3;sbit lie1=P2^2;sbit lie2=P2^1;sbit lie3=P2^0;sbit PWM1=P2^6;unsigned char temp;unsigned char key;unsigned char STH0,STL0;unsigned char jishi=0;unsigned char n=0; //n为节拍常数变量unsigned char a[7]={00,59,19,3,4,8,10}; unsigned char b[7];void delay1s(void){unsigned char i,k;for(k=100;k>0;k--)for(i=100;i>0;i--);}/*定时器0中断*/void TIMER0(void) interrupt 1{TH0=STH0;TL0=STL0;PWM1=~PWM1;}/*定时器1中断*/void int0() interrupt 3 //采用中断3 控制节拍节拍延时{ TH1=0xd8;TL1=0xef;n--;}/*定时器2中断*/void int1() interrupt 5 //采用中断3 控制节拍节拍延时{ TH2=0xd8;TL2=0xef;n--;}void delay (unsigned char m) //控制频率延时{unsigned i=3*m;while(--i);}void delayms(unsigned char a) //豪秒延时子程序{while(--a); //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!}unsigned int codetab[]={0xfc43,0xfd08,0,0,0xfd08,0xfd32,0,0,0xfd81,0xfdc7,0,0,0xfe05,0 xfe21,0,0,};/*unsigned char code table[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x11,0xc1,0x63,0x85,0x61,0x71,0xff}; */unsigned char code music_tab_1[]={/*1*/0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20,0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10,0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10,0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20,0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10,0x2b,0x60,/*2*/0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20,0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10,0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10, 0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20,0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10, 0x2b,0x60,//550x30,0x40,0x18,0x20,0x19,0x20,0x1c,0x20,0x19,0x10, 0x18,0x10,0x18,0x20,0x2b,0x20,0x13,0x20,0x19,0x20, 0x19,0x20,0x20,0x10,0x20,0x10,//632211170x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20, 0x18,0x40,0x18,0x20,0x19,0x20,//67112377550x1c,0x20,0x19,0x10,0x18,0x10,0x18,0x20,0x15,0x20, 0x13,0x20,0x19,0x20,0x19,0x20,0x20,0x10,0x20,0x10,//6322110x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20,0x18,0x60,//000000x01,0x40,0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x60,//1155555 5777550x18,0x10,0x18,0x10,0x10,0x20,0x10,0x10,0x10,0x10, 0x10,0x20,0x10,0x20,0x10,0x20,0x19,0x10,0x19,0x10, 0x19,0x20,0x20,0x10,0x20,0x10,//0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20, 0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10, 0x15,0x10,//32443324430x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20, 0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,//324430x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,//55110x10,0x40,0x10,0x20,0x18,0x10,0x18,0x10,//0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x20, 0x10,0x20,0x19,0x10,0x19,0x10,0x19,0x20,0x20,0x10, 0x20,0x10,//0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20, 0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10, 0x15,0x10,//32443321710x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20, 0x13,0x20,0x15,0x10,0x18,0x10,0x18,0x20,0x19,0x10, 0x18,0x60,0x01,0x40,0x01,0x40,//第二次/*3*/0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20, 0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20,0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10,0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10, 0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20,0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10, 0x2b,0x60,/*4*/0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20, 0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20,0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10,0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10, 0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20,0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10, 0x2b,0x60,//550x30,0x40,0x18,0x20,0x19,0x20,0x1c,0x20,0x19,0x10, 0x18,0x10,0x18,0x20,0x2b,0x20,0x13,0x20,0x19,0x20, 0x19,0x20,0x20,0x10,0x20,0x10,//632211170x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20,0x18,0x40,0x18,0x20,0x19,0x20,//67112377550x1c,0x20,0x19,0x10,0x18,0x10,0x18,0x20,0x15,0x20, 0x13,0x20,0x19,0x20,0x19,0x20,0x20,0x10,0x20,0x10,//6322110x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20, 0x18,0x60,//335350x01,0x40,0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x60,//1155555 5777550x18,0x10,0x18,0x10,0x10,0x20,0x10,0x10,0x10,0x10, 0x10,0x20,0x10,0x20,0x10,0x20,0x19,0x10,0x19,0x10, 0x19,0x20,0x20,0x10,0x20,0x10,//0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20, 0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10, 0x15,0x10,//32443324430x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20, 0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,//324430x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,//55110x10,0x40,0x10,0x20,0x18,0x10,0x18,0x10,//0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x20, 0x10,0x20,0x19,0x10,0x19,0x10,0x19,0x20,0x20,0x10, 0x20,0x10,//0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20, 0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10, 0x15,0x10,//32443321710x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,0x13,0x20,0x15,0x10,0x18,0x10,0x18,0x20,0x19,0x10,0x18,0x60,0x01,0x40,0x01,0x40,//结尾//33420x13,0x20,0x15,0x20,0x18,0x30,0x19,0x10,0x18,0x10,0x15,0x10,0x18,0x40,0x13,0x40,0x13,0x40,0x12,0x40,0x15,0x40,0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x60,0x00};unsigned char code music_tab_2[]={ 0x10,0x03, 0x11,0x03, 0x15,0x66, 0x11,0x03, 0x15,0x02,0x17,0x02, 0x11,0x01, 0x0D,0x02, 0x0D,0x02, 0x10,0x66,0x0F,0x03, 0x10,0x02, 0x15,0x02, 0x0F,0x15, 0x0D,0x03,0x0D,0x03, 0x0E,0x66, 0x0D,0x03, 0x0E,0x03, 0x15,0x66,0x0D,0x01, 0x15,0x02, 0x15,0x02, 0x15,0x02, 0x11,0x66,0x0E,0x03, 0x0E,0x02, 0x11,0x02, 0x11,0x15, 0x10,0x03,0x11,0x03, 0x15,0x66, 0x11,0x03, 0x15,0x02, 0x17,0x02,0x11,0x15, 0x0D,0x03, 0x0D,0x03, 0x10,0x66, 0x0F,0x03,0x10,0x02, 0x15,0x02, 0x0F,0x01, 0x0D,0x03, 0x0E,0x02,0x15,0x03, 0x11,0x03, 0x11,0x02, 0x15,0x02, 0x16,0x03,0x16,0x03, 0x17,0x03, 0x15,0x16, 0x15,0x02, 0x11,0x03,0x10,0x03, 0x10,0x03, 0x11,0x02, 0x0F,0x02, 0x10,0x15,0x15,0x03, 0x16,0x03, 0x17,0x66, 0x16,0x03, 0x17,0x02,0x19,0x02, 0x16,0x15, 0x0F,0x03, 0x0F,0x03, 0x15,0x03,0x11,0x03, 0x15,0x02, 0x17,0x02, 0x17,0x15, 0x10,0x03, 0x11,0x03, 0x15,0x02, 0x11,0x02, 0x16,0x03, 0x16,0x03, 0x15,0x66, 0x0F,0x03, 0x0F,0x16, 0x18,0x02, 0x17,0x02, 0x16,0x02, 0x15,0x02, 0x17,0x00, 0x17,0x02, 0x1A,0x01, 0x19,0x02, 0x19,0x02, 0x17,0x03, 0x16,0x03, 0x15,0x02, 0x15,0x02, 0x16,0x02, 0x15,0x03, 0x16,0x03, 0x16,0x03, 0x19,0x02, 0x17,0x15, 0x17,0x02, 0x1A,0x01, 0x19,0x01, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03, 0x16,0x03, 0x11,0x02, 0x10,0x01, 0x00,0x00};void main(void){unsigned char p,m; //m为频率常数变量unsigned char i=0;TMOD=0x11;IE=0xaa;TH1=0xd8;TL1=0xef;TH2=0xd8;TL2=0xef;P2=0xe0;P3=0x0f;I2CCON=0xE8;SetTime(a);SwitchRTC(1);LCDInitialize();while(1){P1=0xf0;P2=0xff;lie0=0;temp=P1;temp=temp & 0x0f;if (temp!=0x0f){delay1s();temp=P1;temp=temp & 0x0f;if (temp!=0x0f){temp=P1;temp=temp & 0x0f; switch(temp){case 0x0e:key=0;break;case 0x0d:key=4;break;case 0x0b:key=8;break;case 0x07:key=12;break;}P0=tab[key];STH0=tab[key]/256;STL0=tab[key]%256;TR0=1;temp=temp&0x0f;while(temp!=0x0f){temp=P1;temp=temp&0x0f;}TR0=0;} }P1=0xf0;P2=0xff;lie1=0;temp=P1;temp=temp & 0x0f;if (temp!=0x0f){delay1s();temp=P1;temp=temp & 0x0f;if (temp!=0x0f){temp=P1;temp=temp & 0x0f; switch(temp){case 0x0e:key=1;break;case 0x0d:key=5;break;case 0x0b:key=9;break;case 0x07:key=13;break;}P0=tab[key];STH0=tab[key]/256; STL0=tab[key]%256;TR0=1;temp=temp&0x0f;while(temp!=0x0f){temp=P1;temp=temp&0x0f;}TR0=0;}}P1=0xf0;P2=0xff;lie2=0;temp=P1;temp=temp & 0x0f;if (temp!=0x0f){delay1s();temp=P1;temp=temp & 0x0f;if (temp!=0x0f){temp=P1;temp=temp & 0x0f; switch(temp){case 0x0e:key=2;break;case 0x0d:key=6;break;case 0x0b:key=10;break;case 0x07:key=14;break;}P0=tab[key];}}P1=0xf0;P2=0xff;lie3=0;temp=P1;temp=temp & 0x0f;if (temp!=0x0f){delay1s();temp=P1;temp=temp & 0x0f;if (temp!=0x0f){temp=P1;temp=temp & 0x0f; switch(temp){case 0x0e:key=3;break;case 0x0d:key=7;break;case 0x0b:key=11;break;case 0x07:key=15;break;}P0=tab[key];}}switch(key){case 0,4,8,12,1,5,9,13,8,12,7,11,15:break;case 2:{play_1:{a_1: p=music_tab_1[i];if(p==0x00){ i=0, delayms(1000); goto play_1;} //如果碰到结束符,延时1秒,回到头再来一遍else if(p==0xff) { i=i+1;delayms(100),TR1=0; goto a_1;} //若碰到休止符,延时100ms,继续取下一音符else{m=music_tab_1[i++], n=music_tab_1[i++];} //取频率常数和节拍常数TR1=1; //开定时器1while(n!=0) PWM1=~PWM1,delay(m); //等待节拍完成, 通过P1口输出音频TR1=0; //关定时器1}break;}case 6:{play_2:{a_2: p=music_tab_2[i];if(p==0x00) { i=0, delayms(1000); goto play_2;} //如果碰到结束符,延时1秒,回到开始再来一遍else if(p==0xff){ i=i+1;delayms(100),TR2=0; goto a_2;} //碰到休止符,延时100ms,取下一音符else{m=music_tab_2[i++], n=music_tab_2[i++];} //取频率常数和节拍常数TR2=1; //开定时器2while(n!=0) PWM1=~PWM1,delay(m);//等待节拍完成, 通过P1口输出音频(TR2=0; //关定时器2} break;}case 3:{jishi=1; break;}default:break;}if(jishi==1){ReadTime(b);LCDPrintNumber(0,1,2,b[0]);//LCDPrintString(3,1,1,"-");LCDPrintNumber(4,1,2,b[1]);//LCDPrintString(6,1,1,":");LCDPrintNumber(7,1,2,b[2]);//LCDPrintString(9,1,1," ");LCDPrintNumber(10,1,2,b[4]);//LCDPrintString(12,1,,1," ");LCDPrintNumber(13,1,2,b[5]);//LCDPrintString(15,1," ");LCDPrintString(0,0,"HuNan University!");}}}第6章心得体会这次实验总共经历了两周的时间,从功能需求分析到功能分析,从程序的设计到程序的调试,下载,最后终于完成了这次具有实际使用价值的实验。