南京工程学院单片机课程设计——电子琴

合集下载

单片机实现电子琴课程设计

单片机实现电子琴课程设计

工业控制:如自动化生产线、机器人等 家电产品:如洗衣机、冰箱、空调等 汽车电子:如汽车电子控制系统、车载娱乐系统等 医疗设备:如医疗仪器、医疗电子设备等 通信设备:如手机、路由器等 航空航天:如卫星、航天器等
需求分析:明确单片机的功能需求
硬件设计:选择合适的单片机型号,设 计电路图
软件设计:编写单片机程序,实现功能 需求
调试与测试:对硬件和软件进行调试和 测试,确保功能正常
优化与改进:根据测试结果进行优化和 改进,提高性能和稳定性
量产与维护:将设计成果转化为产品, 进行量产和维护
PART THREE
电子琴主要由键盘、音源、放大器和扬声器组成
键盘用于输入音符,音源用于产生声音,放大器用于放大声音,扬声器用于输出声音

音乐教育:单片机可以应用于 音乐教育领域,帮助学生更好 地理解和掌握音乐知识
智能乐器:单片机可以控制乐 器的音色、音量、节奏等,实 现智能化演奏
音乐创作:单片机可以辅助音 乐创作,提高创作效率和创意
音乐治疗:单片机可以应用于 音乐治疗领域,帮助患者缓解
压力和焦虑
汇报人:
程序设计:编写单片机程序, 实现音符的输出和控制
硬件连接:将单片机与电子琴 的硬件连接,实现音符的输出
和控制
单片机控制电子琴的音调:通过改变单片机的输出频率,实现音调的变化 单片机控制电子琴的音量:通过改变单片机的输出电压,实现音量的变化 单片机控制电子琴的音色:通过改变单片机的输出波形,实现音色的变化 单片机控制电子琴的演奏模式:通过改变单片机的输出信号,实现演奏模式的切换
控制器:控制音色、音 量、节奏等
电源:提供电力
连接线:连接各部分硬 件
软件架构:单片机控制、音频处理、用户界面等模块 单片机控制:通过编程实现电子琴的音色、音高、节奏等控制 音频处理:对输入的音频信号进行处理,如滤波、放大、均衡等 用户界面:实现电子琴的按键、显示、音量等用户交互功能

南京工程学院单片机课程设计——电子琴资料

南京工程学院单片机课程设计——电子琴资料

目录目录 (1)一、设计任务(要求) (2)二、总体方案 (2)三、原理框图 (3)四、系统模块详细设计与调试 (4)(一)键盘扫描模块 (4)(二)数码管显示模块 (4)(三)音调编码读取模块 (4)(四)定时器中断模块 (4)五、设计总结 (5)六、参考文献 (6)七、附件材料 (6)一、设计任务(要求)利用51系列单片机、按键、扬声器等器件,设计一个电子琴。

具体功能要求如下:设计键盘电路,使其具有数字键1、2、3、4、5、6、7、8、9作为电子琴按键,演示键DEMO,其中1~7号键按下后即发出相应的音调。

8号键按下后依次发出“1、2、3、4、5、6、7” 音调,9号键按下后依次发出“7、6、5、4、3、2、1” 音调,按下DEMO键,自动演示一首歌曲,用单片机某一接口发出音频脉冲,驱动扬声器发音。

利用定时器定时,可以发出不同频率的脉冲,不同频率的脉冲经扬声器驱动电路放大滤波后,就会发出不同的音调.定时器按设置的定时参数产生中断,一次中断发出脉冲低电平,下一次反转发出脉冲高电平.由于定时参数不同,就发出了不同频率的脉冲.按键一次,发50个脉冲.发完后继续检测键盘,如果键还按下,继续发音,发脉冲个数的多少可以决定节拍的长短。

二、总体方案按照设计任务(要求),电子琴的主要涉及以下几个模块:1、定时器控制不同频率发音;2、矩阵键盘的扫描;3、除此以外,我还在本次设计中加入了数码管显示,分别显示当前弹奏的音符。

于是又多了数码管显示模块;实现方案:通过不断地键盘进行扫描。

当有按键按下时,执行该按键对应的程序,包括:发出相应的音符或音乐、数码管显示当前音符。

当按键松开,将音符停止发出,如果是音乐,将进行演奏。

其中,不同的音符,采用定时器中断,从而发出不同的音符。

即改变不同的定时器初始值。

对于音乐的音符,采用自编的特殊编码,以便程序的调用。

本程序的设计采用了三位数编码,即:利用三位数表示一个音符。

第一位由1-7组成,表示音符1-7;第二位由1-4组成,表示音阶的低、中、高和超高;第三位由1-9组成,表示该音阶的拍数,计算方式是1/2拍⨯数字。

单片机应用课程设计--简易电子琴设计

单片机应用课程设计--简易电子琴设计
{
delay(5);
if (key1 == 0)
{
key_in_flag = 0;
key_value = 4;
}
}
else
{
key_in_flag = 1;
}
key8 = 1;
key7 = 0;
if (key4 == 0)
{
delay(5);
if (key4 == 0)
{
key_in_flag = 0;
参考文献
[1] 赵鑫,蒋亮,齐兆群.数字电路设计[M].北京机械工业出版社,2005年6月第一版
[2] 苏家健,曹柏荣,汪志锋.单片机原理及应用技术[M].高等教育出版社
[3] 李朝青.单片机原理及接口技术[M].北京:北京航天航空大学出版色,2001
[4] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2004
{
key_in_flag = 0;
key_value = 2;
}
}
else
{
key_in_flag = 1;
}
if (key2 == 0)
{
delay(5);
if (key2 == 0)
{
key_in_flag = 0;
key_value = 3;
}
}
else
{
key_in_flag = 1;
}
if (key1 == 0)
方案二: 采用AT89C51单片机进行控制,由于AT89C51不具备ISP功能, 因此Atmel公司已经停产在市面上已经不常见,况且其ROM只有4K在系统将来升级方面没有潜力。
方案三:采用AT89S52单片机进行控制,由于其性价比高,完全满足了本作品智能化的要求,它的内部程序存储空间达到8K,使软件设计有足够的内部使用空间并且方便日后系统升级,使用方便,抗干扰性能提高。

单片机简易电子琴课程设计

单片机简易电子琴课程设计

单片机简易电子琴课程设计简易电子琴实验一、课程设计目的与要求1、掌握蜂鸣器的使用方法;2、掌握蜂鸣器的不同发音的方法;3、通过本次课程设计加深对单片机课程的认识和掌握,对单片机的应用做进一步了解。

二、课程设计设备STAR 序列试验仪一套、PC 机一台三、课程设计内容1、简易电子琴原理(1)蜂鸣器输入不同频率的方波,会发出不同的声音;(2)通过按键,由单片机控制产生不同频率的方波,从而发出不同的声音。

2、课程设计过程(1)通过单片机,是G6区的1-7号键由低到高发出1-7的音阶。

四、课程设计原理图1234567P1.0P1.1P1.2P1.3P1.4P1.5P1.6VccBuzzerLS12KR15.1KR28550Q60.01uFC40Ctrl100R11P1.7五、课程设计框图主程序:节拍1子程序(手动按键时用) 节拍2子程序(手动按键时用)0FFH->P1 开始 播放一段音乐 P1.0=0调用节拍1子程序 N Y 调用节拍2子程序 Y调用节拍3子程序Y 调用节拍4子程序 调用节拍5子程序 调用节拍6子程序 调用节拍7子程序P1.1=0P1.2=0N P1.3=0Y Y Y P1.4=0P1.5=0N P1.6=0Y N N N 0->P1.7 延时180us 1->P1.7 延时190us开始 返回0->P1.7 延时200us 1->P1.7 延时200us开始 返回节拍3子程序(手动按键时用)节拍4子程序(手动按键时用)开始0->P1.7延时180us1->P1.7延时170us返回开始0->P1.7延时160us1->P1.7延时160us返回节拍5子程序(手动按键时用)节拍6子程序(手动按键时用)开始0->P1.7延时150us1->P1.7延时150us返回开始0->P1.7延时140us1->P1.7延时140us返回节拍7子程序(手动按键时用)节拍1子程序(自动放音时用,时间约0.2s )节拍2子程序(自动放音时用,时间约0.2s ) 节拍3子程序(自动放音时用,时间约0.2s )0->P1.7 延时220us 计数器-1 1->P1.7 延时210us 1100->计数器 N计数器-1=0返回Y 0->P1.7 延时130us 1->P1.7 延时130us开始 返回开始节拍4子程序(自动放音时用,时间约0.2s ) 节拍5子程序(自动放音时用,时间约0.2s )节拍6子程序(自动放音时用,时间约0.2s ) 节拍7子程序(自动放音时用,时间约0.2s )NY 0->P1.7 延时170us 计数器-1 1->P1.7 延时170us开始 1300->计数器 计数器-1=0返回Y N0->P1.7 延时180us 计数器-1 1->P1.7 延时180us 开始 1250->计数器 计数器-1=0返回0->P1.7 延时185us 计数器-1 1->P1.7 延时180us开始 1200->计数器 Y N计数器-1=0返回NY 0->P1.7 延时190us 计数器-1 1->P1.7 延时190us 开始 1150->计数器 计数器-1=0返回六、课程设计步骤1、主机连线说明D1区:Ctrl — A3区:P1.7 G6区:JP74 —A3区:JP51(P1口)2、运行程序,按G6区的1-7号键,输出7种音阶。

南京工程学院-单片机课程设计报告

南京工程学院-单片机课程设计报告
{ delay(5); temp=P2; temp=temp&0x0f; if(temp!=0x0f) { temp=P2; temp=temp&0x0f; switch(temp) {case 0x0e:key=0;break; case 0x0d:key=1;break; case 0x0b:key=2;break; case 0x07:key=3;break; } }
描功能并且发音功能也能正确完成,但为什么会出现上述问题呢?经过
再次对程序的仔细阅读,发现其中按键的扫描时间和延时子程序所控制
的时间有关系,最后经过修改延时子程序的延时时间进行了调整,发现
上述问题的原因是在去抖动的延时扫描时间太长,导致了上述问题的发
生。经过对延时扫描时间调小,问题得到解决。
2. 按键功能实现遇见的问题
在整个程序的编写我采用了分模块编写的方法,然后逐个进行软件编译并下
载至硬件电路进行实践检测,最后完成了程序的正确编写。
1. 键盘扫描遇见的问题
在完成键盘扫描程序的编写和编译之后,我将程序下载到硬件电路的 CPU
中,发现按键按下之后很久才有了音调的产生,按键如果按的时间太短,
就不会发音。由上述的问题中可以知道键盘的检测部分能够完成键盘扫
同时设计了一个直流稳压电路增加电路的适应性同时设计了一个直流稳压电路增加电路的适应性同时设计了一个直流稳压电路增加电路的适应性增加增加增加了电路的适用性使整个系统更加紧凑工作十分稳定了电路的适用性使整个系统更加紧凑工作十分稳定了电路的适用性使整个系统更加紧凑工作十分稳定音乐频率音乐频率音乐频率一首音乐是许多不同的音阶组成的而每个音阶对应着不同的频率这样一首音乐是许多不同的音阶组成的而每个音阶对应着不同的频率这样一首音乐是许多不同的音阶组成的而每个音阶对应着不同的频率这样我们就可以利用不同的频率的组合我们就可以利用不同的频率的组合我们就可以利用不同的频率的组合即可构成我们所想要的音乐了即可构成我们所想要的音乐了即可构成我们所想要的音乐了当然对于单当然对于单当然对于单片机来产生不同的频率非常方便片机来产生不同的频率非常方便片机来产生不同的频率非常方便我们可以利用单片机的定时我们可以利用单片机的定时我们可以利用单片机的定时计数器计数器计数器t0t0t0来产生来产生来产生这样方波频率信号这样方波频率信号这样方波频率信号因此因此因此我们只要把一首歌曲的音阶对应频率关系弄正确即可

我的课设!!!

我的课设!!!

目录课设题目:简易电子琴的设计..................................................................................................... 2一、引言....................................................................................................................................... 21.1 电子琴设计的背景................................................................................................................. 21.2 电子琴设计的意义......................................................................................................... 21.3 电子琴设计的目标......................................................................................................... 3二、方案比较以及选择................................................................................................................. 32.1 控制模块选择方案......................................................................................................... 32.2 按键选择方案................................................................................................................. 3三、硬件设计简要及说明............................................................................................................. 43.1系统组成及总体框图...................................................................................................... 4四、软件设计................................................................................................................................. 44.1 LED数码显示原理.......................................................................................................... 54.2.1音乐相关知识........................................................................................................ 54.2.2 如何用单片机产生音频脉冲................................................................................. 64.2.3如何用单片机实现音乐的节拍............................................................................ 74.3 4×4矩阵键盘识别...................................................................................................... 84.4 中断系统介绍................................................................................................................. 84.5系统总体功能流程图....................................................................................................... 94.6 程序源代码.................................................................................................................. 11五、常用软件知识..................................................................................................................... 145.1 Keil编译器软件介绍................................................................................................... 145.2使用keil软件建立一个工程....................................................................................... 20 5.3用DEBUG进行调试 ..........................................................................................................5.4 STC-ISP软件介绍............................................................................................................5.5程序烧写过程...............................................................................................................六、课程设计总结.....................................................................................................................七、参考文献............................................................................................................................. 21附录1:主要电路原理图.......................................................................................................... 22课设题目:简易电子琴的设计微型电子琴的设计以AT89C51单片机作为系统的核心控制部分,通过制作硬件电路和软件的设计编写,然后进行软硬件的调试运行,最终达到设计电路的乐器演奏、存储及显示功能。

单片机课程设计报告电子琴

单片机课程设计报告电子琴

单片机课程设计报告系另_____________学科专业:____________班级:______________________姓名:____________________指导老师:__________________单片机课程设计题目——电子音乐盒设计摘要:该课程设计利用单片机AT89S52与LM386设计扬声器,外接一个喇叭可以发出声音。

关键字:单片机AT89S52 LM386一、设计目的、要求1.设计目的1)深入了解MCS—51 系列单片机的功能以及应用,学会制作简单的扬声器。

2)了解扬声器工作原理。

3)了解“新年好”音乐的设计原理。

2.设计要求1)查阅资料,选择合适的设计方案。

2)设计完整的硬件电路图,给出设计说明及相关电路参数计算公式,并进行适当的误差分析。

3)设计软件流程图,并写出完整的程序,并加以适当的注解。

4)根据以上内容写出完整课程设计报告。

二、硬件设计1. 器件介绍(1)在“单片机系统”中,把P1.0端口连接到“音频放大模块”区域中的SPKIN 端口。

(2)在“音频放大模块”区域中的SPK OUT端口连接一个8欧或者是16欧的喇叭。

2、设计原理用AT89S51单片机产生优美的音乐声从 P1.0端口输出。

通过定时器的定时来产生 不同频率的方波,驱动喇叭发出不同音阶的声音,再利用延迟来控制发音时间的 长短,即可控制音调中的节拍。

* 电电'J rLILbt][3.PCB 板图布局V 3LS KU EZ ■ J Ki ;i K. I/ U 3 f £; At. 芒£: Xr;LJ N Li Ex-in 心 v rc E 70 E£iTJ^-B-图1.1电子音乐盒电路原理图U-右-|;一口一 口一 U-|1一r- %**号寸廿匚>亠TJ4.元器件的焊接1) 拿到本套件后清查元器件的数量、质量,并及时更换不合格的元件。

2) 确定元件的安装方式,电阻采用卧式安装,其它元件采用立式安装。

单片机课程设计报告电子琴

单片机课程设计报告电子琴

单片机课程设计报告电子琴一、选题背景随着数字技术的飞速发展和信息科学的快速推进,单片机作为信息处理的核心器件,正在得到越来越广泛的应用。

随着芯片技术的不断更新和改进,单片机应用领域的拓宽和深化,各行各业对单片机专业人才的需求也愈发迫切。

因此,在单片机课程的教学中,设计一些实用的小项目、小应用,既能提高学生的实践操作能力,又能激发其学习兴趣和学科热情,是非常有必要的。

二、课程目标通过设计电子琴这一实用项目,达到以下三个目标:(1)掌握单片机的基本知识和操作技巧。

在设计项目中,需要使用到很多单片机相关的知识和技术,如单片机的编程语言、端口连接、程序设计、调试样板、原理图设计等。

通过这些操作,学生可以对单片机的工作原理和编程方法有一个更加深入的理解。

(2)培养学生应用知识的能力。

设计电子琴,需要使用到单片机的定时器、PWM输出、按键检测、LED灯控制等相关知识。

学生需要将这些知识应用到实际操作中,才能真正掌握这些知识点,更好地了解单片机的工作原理和性能特点。

(3)激发学生的创造性思维和创新意识。

在设计电子琴的过程中,学生需要从众多课程内容和技能中选择并运用所学知识,遇到问题时需要有创造性解决的思维和意识。

此过程能够帮助学生提高独立思考和创新能力,将所学知识真正运用到实践中。

三、教学方法针对单片机课程设计中的三个目标,教学方法如下:1. 理论和实践相结合学生需要了解单片机的基本知识和操作技巧,包括单片机的性能特点、端口连接、程序设计、原理图设计等。

同时,为了更好地掌握实际操作,需要将理论知识与实践操作相结合,在课程中给予足够的操作机会和实践练习,让学生深刻感受到不同参数的变化对最终设备造成的影响。

2. 开放性思考学习单片机课程时,教师需要引导学生进行开放性思考。

鼓励学生发现问题、提出问题、寻找问题的解决方案,从而提高学生的创造性思维和创新意识。

3. 相互合作学习在课程设计中,可以采用分组方式,让学生互相合作、共同学习、共同探讨解决问题的方法和途径。

单片机课程设计电子琴

单片机课程设计电子琴

单片机课程设计 电子琴一、课程目标知识目标:1. 让学生理解单片机的基本原理,掌握单片机在电子琴设计中的应用。

2. 使学生掌握电子琴的基本结构,能运用单片机编程实现电子琴的基本功能。

3. 帮助学生了解电子琴音调产生原理,掌握音调与频率的关系。

技能目标:1. 培养学生运用单片机进行电子琴设计与编程的能力,能独立完成一个简单的电子琴项目。

2. 培养学生动手实践能力,提高焊接、调试和故障排除等技能。

3. 培养学生团队协作和沟通能力,能在项目过程中进行有效分工与合作。

情感态度价值观目标:1. 激发学生对单片机及电子制作的兴趣,提高学习积极性。

2. 培养学生勇于尝试、不断探索的精神,增强克服困难的信心。

3. 引导学生关注科技发展,认识到所学知识在现实生活中的应用,培养创新意识。

分析课程性质、学生特点和教学要求,本课程目标具体、可衡量,有助于学生和教师在教学过程中明确预期成果。

将目标分解为具体学习成果,为后续教学设计和评估提供依据。

在教学过程中,注重理论与实践相结合,充分调动学生的积极性,提高学生的实践能力。

二、教学内容1. 单片机基础知识:介绍单片机的组成、工作原理,重点讲解CPU、内存、I/O口等部分的功能与应用。

教材章节:第一章单片机基础2. 电子琴结构与原理:讲解电子琴的基本结构,音调产生原理,键盘与发音电路的连接方式。

教材章节:第三章电子乐器原理3. 单片机编程:以C语言为基础,讲解单片机编程方法,重点掌握延时、中断、I/O口控制等编程技巧。

教材章节:第二章单片机编程基础、第五章中断与定时器4. 电子琴设计与制作:结合单片机知识,指导学生进行电子琴设计,包括硬件电路设计、程序编写、调试与优化。

教材章节:第四章单片机应用实例、第六章电子琴设计与制作5. 实践操作:安排学生进行电子琴硬件焊接、程序烧写、调试与测试,培养动手实践能力。

教材章节:第七章实践操作教学内容安排与进度:第一周:单片机基础知识学习,完成CPU、内存、I/O口等功能的学习。

单片机电子琴课程设计

单片机电子琴课程设计

单片机电子琴课程设计一、课程目标知识目标:1. 让学生理解单片机的基本原理和功能,掌握电子琴的基本构造和演奏方法。

2. 帮助学生掌握单片机编程的基本技巧,学会使用相关软件进行程序设计。

3. 使学生了解音乐理论中音阶、音符的基本知识,并将其应用于电子琴演奏。

技能目标:1. 培养学生动手操作单片机的能力,学会连接电子琴硬件并进行调试。

2. 培养学生编写简单电子琴程序的能力,实现不同音符的播放和乐曲演奏。

3. 提高学生团队协作和沟通能力,能够共同分析和解决在电子琴制作过程中遇到的问题。

情感态度价值观目标:1. 培养学生对单片机及电子琴制作的兴趣,激发学生探究精神,养成自主学习的好习惯。

2. 培养学生具有创新意识,敢于尝试,勇于实践,面对失败保持积极的心态。

3. 增强学生的环保意识,培养节约资源、爱护设备的良好习惯。

课程性质:本课程为实践性较强的课程,结合理论知识,培养学生的动手操作能力和实际应用能力。

学生特点:学生具备一定的电子知识和编程基础,对新鲜事物充满好奇心,喜欢动手实践。

教学要求:结合学生特点,注重理论与实践相结合,充分调动学生的积极性,提高学生的实践能力和创新能力。

在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。

将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. 理论知识:- 单片机原理:介绍单片机的基本结构、工作原理和功能。

- 音乐理论:讲解音阶、音符、音长等基本音乐知识。

- 编程基础:回顾C语言基本语法,学习单片机编程方法和技巧。

2. 实践操作:- 电子琴硬件连接:学习电子琴硬件的组成,进行电路连接和调试。

- 程序编写:编写程序实现电子琴基本功能,如按键识别、音符播放等。

- 歌曲演奏:设计程序,实现简单乐曲的演奏。

3. 教学大纲:- 第一周:单片机原理学习,音乐理论知识回顾。

- 第二周:编程基础复习,电子琴硬件连接与调试。

- 第三周:编写电子琴程序,实现基本功能。

单片机课程设计电子琴

单片机课程设计电子琴

单片机课程设计电子琴一、课程目标知识目标:1. 学生能理解单片机的基本原理和电子琴的基础知识,掌握单片机控制电子琴的基本电路构成。

2. 学生能掌握单片机编程的基本方法,运用C语言或汇编语言实现电子琴的音调控制。

3. 学生了解电子琴音阶与频率的关系,能运用数学知识进行音调计算。

技能目标:1. 学生能够独立设计并搭建单片机控制电子琴的硬件电路。

2. 学生能够编写程序,实现电子琴的基本功能,如音阶播放、简单曲目的演奏等。

3. 学生能够运用调试工具对电子琴程序进行调试和优化。

情感态度价值观目标:1. 学生通过动手实践,培养对单片机及电子制作的兴趣,增强学习动力。

2. 学生在团队协作中,学会沟通与交流,培养合作精神和解决问题的能力。

3. 学生在学习过程中,认识到科技对生活的改变,培养创新意识和社会责任感。

课程性质:本课程为实践性较强的课程,旨在让学生通过动手操作,掌握单片机控制电子琴的基本知识和技能。

学生特点:学生具备一定的电子基础和编程能力,对单片机有一定了解,对电子琴感兴趣。

教学要求:注重理论与实践相结合,强调动手实践和团队合作,关注学生的个体差异,提高学生的综合能力。

通过分解课程目标为具体学习成果,使学生在完成课程后能够达到上述目标。

后续教学设计和评估将以此为基础,确保课程目标的实现。

二、教学内容1. 理论知识:- 单片机原理与结构:介绍单片机的基本构成、工作原理及性能特点。

- 电子琴基础知识:讲解电子琴的音阶、音色及演奏方法。

- 单片机编程语言:回顾C语言和汇编语言的基本语法,为编程打下基础。

2. 实践操作:- 硬件电路设计:学习并搭建单片机控制电子琴的硬件电路,包括按键输入、音频输出等。

- 程序编写:编写程序实现电子琴的基本功能,如音阶播放、单音演奏等。

- 程序调试与优化:学习使用调试工具,对程序进行调试和优化。

3. 教学大纲:- 第一阶段(1课时):回顾单片机原理、电子琴基础知识及编程语言。

- 第二阶段(2课时):设计并搭建单片机控制电子琴硬件电路。

单片机简易电子琴课程设计

单片机简易电子琴课程设计

单片机简易电子琴课程设计一、课程目标知识目标:1. 让学生理解单片机的基础知识,掌握其编程原理;2. 帮助学生掌握简易电子琴的设计原理,包括音阶、音色和节奏的控制;3. 引导学生掌握电子琴的硬件连接和软件编程,了解两者之间的联系。

技能目标:1. 培养学生动手操作能力,能够独立完成单片机与电子琴硬件的连接;2. 培养学生编程能力,能够编写简单的程序控制电子琴演奏;3. 提高学生的问题解决能力,能够针对电子琴演奏过程中出现的问题进行调试和优化。

情感态度价值观目标:1. 培养学生对单片机及电子琴制作的兴趣,激发学习热情;2. 培养学生团队协作精神,学会在合作中共同解决问题;3. 培养学生创新思维,鼓励学生敢于尝试,勇于突破。

课程性质分析:本课程为实践性较强的课程,结合单片机技术与音乐知识,旨在培养学生的动手实践能力和创新精神。

学生特点分析:初中年级学生已经具备一定的物理知识和逻辑思维能力,对新鲜事物充满好奇心,喜欢动手实践。

教学要求:1. 结合课本知识,注重理论与实践相结合,提高学生的综合运用能力;2. 教学过程中,关注学生个体差异,给予每个学生个性化的指导;3. 注重教学评价,及时了解学生学习进度,调整教学策略,确保课程目标的实现。

二、教学内容1. 单片机基础知识:讲解单片机的组成、工作原理,重点掌握I/O口控制、定时器、中断等基本功能。

相关教材章节:第一章 单片机概述、第二章 单片机硬件结构。

2. 电子琴原理:介绍电子琴的基本原理,包括音阶生成、音色合成、节奏控制等。

相关教材章节:第三章 电子乐器原理、第四章 音频信号处理。

3. 硬件连接:学习如何将单片机与电子琴硬件连接,包括键盘矩阵、音频放大器、扬声器等。

相关教材章节:第五章 单片机接口技术。

4. 软件编程:编写程序实现电子琴的基本功能,包括音阶演奏、音色切换、节奏控制等。

相关教材章节:第六章 单片机编程基础、第七章 程序设计实例。

5. 实践操作:分组进行电子琴制作,让学生动手实践,提高实际操作能力。

单片机课程设计——简易电子琴

单片机课程设计——简易电子琴
单片机课程设计——简易电子 琴
汇报人:
单击输入目录标题 单片机基础知识 简易电子琴系统设计 单片机与简易电子琴的结合 简易电子琴的功能扩展 简易电子琴的优化与改进
添加章节标题
单片机基础知识
单片机简介
单片机是一种集成电路芯片,将微处理器、存储器、输入/输出接口等集成在一起 单片机具有体积小、功耗低、可靠性高、编程灵活等特点 单片机广泛应用于工业控制、家电、汽车电子等领域 单片机课程设计是学习单片机应用的重要环节,可以提高学生的实践能力和创新能力
音乐播放与控制
单片机控制:通过单片机控制电子琴的音色、音高和节奏 音乐播放:单片机通过控制电子琴的音色、音高和节奏,实现音乐的播放 控制方式:可以通过按键、触摸屏等方式控制音乐的播放 功能扩展:可以增加录音、播放、暂停、快进、快退等功能,提高用户体验
显示模块的应用
显示模块的作用:显示电子琴 的音色、音高、节奏等信息
单片机在简易电子琴中的应用
控制音量:通过单片机控制 音量的大小,实现电子琴的 音量调节功能。
控制音色:通过单片机控制 不同频率的音色,实现电子 琴的多种音色效果。
控制节奏:通过单片机控制 节奏的快慢,实现电子琴的
节奏调节功能。
控制和弦:通过单片机控制 和弦的演奏,实现电子琴的
和弦演奏功能。
单片机开发环境搭建
测试内容:音色、音调、 音量、节奏等性能指标
测试结果分析:对测试数 据进行分析,找出问题并 解决
测试报告:记录测试过程、 结果和分析,为后续改进 提供依据
单片机与简易电子琴的结合
单片机控制简易电子琴的原理
单片机作为核心控制单元,负责接收和处理来自键盘的输入信号
单片机根据接收到的输入信号,控制电子琴的音源产生相应的音调

电子琴单片机课程设计

电子琴单片机课程设计

电子琴单片机课程设计一、课程目标知识目标:1. 学生能理解电子琴单片机的基本原理,掌握其结构与功能。

2. 学生能掌握电子琴单片机编程的基本方法,包括音符、节奏和音量的控制。

3. 学生能了解电子琴单片机在音乐制作与自动化控制中的应用。

技能目标:1. 学生能运用所学的知识,独立完成电子琴单片机的编程与调试。

2. 学生能在团队合作中发挥自己的专长,共同完成具有一定难度的电子琴单片机项目。

3. 学生能运用电子琴单片机创作简单的音乐作品,并进行演奏。

情感态度价值观目标:1. 学生通过学习电子琴单片机课程,培养对音乐和电子技术的兴趣,提高创新意识和动手能力。

2. 学生在团队合作中,学会相互尊重、沟通与协作,培养团队精神和责任感。

3. 学生能够认识到电子琴单片机在现代音乐产业中的重要性,激发对科技改变生活的探索热情。

课程性质:本课程为实践性较强的课程,结合理论知识与实际操作,培养学生的动手能力和创新能力。

学生特点:学生处于高年级阶段,具备一定的电子技术基础和音乐素养,对新鲜事物充满好奇,具备一定的自学能力和团队协作能力。

教学要求:教师应注重理论与实践相结合,引导学生主动探索,鼓励学生创新,关注学生的个体差异,提高学生的综合素质。

通过课程学习,使学生能够将所学知识应用于实际项目中,实现课程目标的达成。

二、教学内容本课程教学内容主要包括以下几部分:1. 电子琴单片机原理:介绍电子琴单片机的基本构成、工作原理和功能特点,使学生了解电子琴单片机在音乐领域的应用。

教学内容:- 电子琴单片机的结构组成- 工作原理与功能特点- 电子琴单片机在音乐领域的应用案例2. 电子琴单片机编程:学习电子琴单片机的编程方法,包括音符、节奏、音量的控制。

教学内容:- 编程环境与编程语言介绍- 音符、节奏、音量编程方法- 常用编程技巧与实践案例3. 电子琴单片机应用:结合实际项目,教授如何运用电子琴单片机进行音乐创作和自动化控制。

教学内容:- 电子琴单片机在音乐创作中的应用- 自动化控制原理及实践- 创意项目设计与实现4. 团队合作与项目实践:培养学生团队协作能力,共同完成具有一定难度的电子琴单片机项目。

单片机课程设计---简易电子琴设计

单片机课程设计---简易电子琴设计

单片机课程设计课程设计名称:专业班级:学生姓名:学号:指导教师:课程设计时间:1 需求分析1.1 课题设计目的及其意义随着社会的发展进步,人们的生活水平也逐步提高,音乐已经成为了我们生活中很重要的一部分,在工作和学习之余,欣赏音乐不仅使身心得到放松,同时也提高人们的精神品质和个人素养。

当代,爱好音乐的年轻人越来越多,也有不少人自己练习弹奏乐器,作为业余爱好和一种放松的手段,鉴于一些乐器学习难度大需花费太多精力,且其价格太过于高昂,使得一部分有这种想法的人不得不放弃这种想法,而电子琴又是一种新型的键盘乐器,它是现代电子科技与音乐结合的产物,价格相对便宜,能够满足一般爱好者的需求,因此,在现代音乐中扮演着重要的角色。

故简易电子琴的研制具有一定的社会意义。

单片机(单片微型计算机)是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠等特点。

单片机的应用相当广泛,从平常的家用电器到航空航天系统和国防军事、尖端武器都能找到它的身影。

因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。

1.2 课题设计的任务与主要内容以51系列单片机AT89C51为主控制器,附有矩阵键盘、LED显示管、扬声器组成。

系统完成显示输入信息、播放相应音符等基本功能。

基本要求:(1)键盘矩阵识别。

即矩阵扫描,显示当前按键。

(2)不同频率音符播放。

可以通过按键控制24种发音,完成低音、中音、高音功能切换。

(3)具备示范音乐播放功能,示范音乐数量2 - 3首;扩展要求:(根据情况自行选择,可提高课程设计验收分数)(1)通过LCD屏显示音乐名称。

(2)动态显示音乐音高(低音、中音、高音)及当前按键音的符号。

(3)具有记忆功能,能记忆上次停电后的音高。

要求:验收可用proteus软件模拟验证,或实物验证更佳设计思路:先根据要求设计硬件电路和编写相应的程序,然后进行软件仿真调试,最后具体实现的功能:按下音符键可以发出相应的音符。

单片机课程设计报告 电子琴

单片机课程设计报告  电子琴

电子音调发生器一、实验目的1.了解计算机发声原理.2.熟悉定时器和键盘扫描电路的工作原理及编程方法。

二、实验完成的功能1.利用键盘1~7进行音调选择, 即按下音符产生对应音调。

2.事先存储三首歌曲, 并可进行选择播放。

3.谱曲功能:通过按键对LCD菜单选项进行选择, 进入谱曲界面, 通过按键1~7分别输入音高与几分音符类型, 由按键输入若干数据完成谱曲。

4.在播放存储歌曲与谱曲播放时,对应音符及其节奏LCD显示对应频谱。

5.在播放音乐时按“返回”键出现返回界面,由键盘按“确认”键选择返回主菜单或循环播放。

三、实验原理1.音节由不同频率的方波产生, 音节与频率的关系如表(1)所示。

要产生音频方波, 只要计算出某一音频的周期(..频率), 然后将此周期除以2, 即为半周期的时间。

利用计时器计时此半周期时间, 每当计时到后就将输出方波的I/O(P1.7)反相, 然后重复计时此半周期时间再对I/O反相, 就可在P1.7脚得到此频率的方波。

将P1.7经过驱动电路与蜂鸣器相连, 随着P1.7口输出不同频率的方波, 蜂鸣器便会发出不同的声音。

音乐的节拍是由延时实现的, 如果1拍的时间为0.4秒, 1/4拍是0.1秒。

只要设定延时时间, 就可得到节拍的时间。

延时实现基本延时时间, 节拍值只能是它的整数倍。

每个音节相应的定时器初值计算公式如下:(1/2)*(1/f)=(12/fose)*(216-x)即 x=216-(fose/24f)其中, f是音调频率, 当晶振fosc=11.0592MHz时, 音节“1”相应的定时器初值为x, 则可得到x=63777D=F921H, 其它的可同样得到。

表(1)音节与频率的关系在编写歌曲代码过程中, 音高由三位数字组成: 个位是表示1~7 这七个音符;十位是表示音符所在的音区:1-低音, -中音, -高音;百位表示这个音符是否要升半音: 0-不升, -升半音。

音长最多由三位数字组成: 个位表示音符的时值, 其对应关系是:|数值(n): |0 |1 |2 |3 | 4 | 5 | 6|几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n 十位表示音符的演奏效果(0-2): 0-普通, -连音, -顿音, 百位是符点位: 0-无符点, 1-有符点。

单片机课程设计---简易电子琴设计

单片机课程设计---简易电子琴设计

单片机课程设计课程设计名称:专业班级:学生姓名:学号:指导教师:课程设计时间:一、需求分析1、1课题背景随着社会得发展进步,音乐逐渐成为我们生活中很重要得一部分,有人曾说喜欢音乐得人不会向恶。

我们都会抽空欣赏世界名曲,作为对精神得洗礼.本论文设计一个基于单片机得简易电子琴。

电子琴就是现代电子科技与音乐结合得产物,就是一种新型得键盘乐器.它在现代音乐扮演着重要得角色,单片机具有强大得控制功能与灵活得编程实现特性,它已经溶入现代人们得生活中,成为不可替代得一部分。

电子科技也在不断得前进,电子技术正在以不同得方式改变着我们得生活,电子琴设计也就是希望给人们带来一些生活得乐趣。

电子琴可以应用在很多方面,比如一些简易得玩具上或手机上。

单片机技术使我们可以利用软硬件实现电子琴得功能,从而实现电子琴得微型化。

本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。

利用单片机产生不同频率来获得我们要求得音阶,最终可随意弹奏想要表达得音乐。

并且本文分别从原理图,主要芯片,各模块原理及各模块得程序得调试来详细阐述。

1、2课题设计得任务与主要内容本文得主要内容就是用AT89C51单片机为核心控制元件,设计一个简单得电子琴。

以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键与扬声器。

定时器按设置得定时参数产生中断,由于定时参数不同,就会发出不同频率得脉冲,不同频率得脉冲经喇叭驱动电路放大滤波后,就会发出不同音调。

先根据要求设计硬件电路与编写相应得程序,然后进行仿真调试,最后细心焊接硬件电路图,将程序烤入芯片中,最终达到设计目得。

本系统运行稳定,其优点就是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定得实用与参考价值。

1、3简易电子琴功能概述单片机因体积小、功能强、价格低廉而得到广泛应用.AT89C51单片机设计微型电子琴得方法,仅需AT89C51最小系统,扩展一组矩阵键盘,再接一组发光二极管用来指示电子琴得工作状态。

单片机电子琴课程设计

单片机电子琴课程设计

单片机电子琴课程设计一、课程目标知识目标:1. 让学生掌握单片机的基本原理,理解其内部结构和功能。

2. 使学生了解电子琴的基本工作原理,掌握单片机控制电子琴的方法。

3. 帮助学生掌握编程语言,如C语言,用于编写单片机控制程序。

技能目标:1. 培养学生动手搭建单片机电子琴硬件电路的能力。

2. 培养学生运用编程语言编写单片机程序,实现电子琴的基本功能。

3. 提高学生分析问题和解决问题的能力,使学生能够独立调试和优化单片机电子琴程序。

情感态度价值观目标:1. 培养学生对电子技术的兴趣,激发学生创新意识和探索精神。

2. 培养学生团队协作意识,提高沟通与交流能力。

3. 引导学生关注单片机技术在现实生活中的应用,认识到科技对社会发展的推动作用。

分析课程性质、学生特点和教学要求:本课程为单片机电子琴课程设计,旨在让学生将所学理论知识与实际应用相结合,提高学生的动手实践能力。

针对初中年级学生,课程内容需符合学生的认知水平和兴趣。

在教学过程中,注重引导学生主动参与,培养其独立思考和解决问题的能力。

课程目标分解:1. 知识目标:通过讲解、示范和练习,使学生掌握单片机原理、电子琴工作原理及编程方法。

2. 技能目标:通过动手实践,培养学生搭建硬件电路、编写程序和调试设备的能力。

3. 情感态度价值观目标:通过课程学习,激发学生对电子技术的兴趣,培养其团队协作意识和创新能力。

二、教学内容1. 单片机原理及内部结构:讲解单片机的组成、工作原理、I/O口功能等基础知识,对应教材第3章内容。

2. 电子琴工作原理:介绍电子琴的基本构成、音阶产生原理、键盘扫描方法等,对应教材第5章内容。

3. C语言编程基础:讲解C语言的基本语法、数据类型、运算符、控制语句等,对应教材第2章内容。

4. 单片机编程与控制:结合实例,讲解如何使用C语言编写单片机程序,实现电子琴功能,对应教材第4章内容。

5. 硬件电路搭建:介绍电子琴硬件电路的组成、元件选型及连接方法,对应教材第6章内容。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录目录 (1)一、设计任务(要求) (2)二、总体方案 (2)三、原理框图 (4)四、系统模块详细设计与调试 (5)(一)键盘扫描模块 (5)(二)数码管显示模块 (5)(三)音调编码读取模块 (5)(四)定时器中断模块 (6)五、设计总结 (6)六、参考文献 (8)七、附件材料 (8)一、设计任务(要求)利用51系列单片机、按键、扬声器等器件,设计一个电子琴。

具体功能要求如下:设计键盘电路,使其具有数字键1、2、3、4、5、6、7、8、9作为电子琴按键,演示键DEMO,其中1~7号键按下后即发出相应的音调。

8号键按下后依次发出“1、2、3、4、5、6、7” 音调,9号键按下后依次发出“7、6、5、4、3、2、1” 音调,按下DEMO键,自动演示一首歌曲,用单片机某一接口发出音频脉冲,驱动扬声器发音。

利用定时器定时,可以发出不同频率的脉冲,不同频率的脉冲经扬声器驱动电路放大滤波后,就会发出不同的音调.定时器按设置的定时参数产生中断,一次中断发出脉冲低电平,下一次反转发出脉冲高电平.由于定时参数不同,就发出了不同频率的脉冲.按键一次,发50个脉冲.发完后继续检测键盘,如果键还按下,继续发音,发脉冲个数的多少可以决定节拍的长短。

二、总体方案按照设计任务(要求),电子琴的主要涉及以下几个模块:1、定时器控制不同频率发音;2、矩阵键盘的扫描;3、除此以外,我还在本次设计中加入了数码管显示,分别显示当前弹奏的音符。

于是又多了数码管显示模块;实现方案:通过不断地键盘进行扫描。

当有按键按下时,执行该按键对应的程序,包括:发出相应的音符或音乐、数码管显示当前音符。

当按键松开,将音符停止发出,如果是音乐,将进行演奏。

其中,不同的音符,采用定时器中断,从而发出不同的音符。

即改变不同的定时器初始值。

对于音乐的音符,采用自编的特殊编码,以便程序的调用。

本程序的设计采用了三位数编码,即:利用三位数表示一个音符。

第一位由1-7组成,表示音符1-7;第二位由1-4组成,表示音阶的低、中、高和超高;第三位由1-9组成,表示该音阶的拍数,计算方式是1/2拍⨯数字。

例如:6,2,2……表示一拍中音6;4,3,1……表示半拍高音4。

a b c则,调用的频率参数为关于对音符编码的调用,设一个音的编码为,,⨯+,该参数用于修改定时器初始值;调用的时间参数为c,该参数用于修b a7改定时器执行时间。

三、原理框图四、系统模块详细设计与调试(一)键盘扫描模块1、矩阵键盘工作原理矩阵键盘的按键设在行、列线的交点上。

行线通过上拉电阻接到+5V电源上。

无键盘按下时,行线出于高电平状态;当有按键按下时,行线电平状态将由此按键相连接的列线的电平决定。

2、设计思路通过扫描法识别键盘。

即,先将某一列线置为低电平,其余各列线置为高电平,检查各行线电平的变化,如果某行线电平的为低电平,就可以确立此行此列交叉点处的按键被按下。

(二)数码管显示模块1、硬件电路数码管的显示,是通过74LS374锁存器来实现的。

段选和位选分别是P3.5和P3.4。

数据的输出为P0口。

(详见附录一:硬件原理图)2、设计思路通过分别控制段选、位选锁存器的导通(低电平)、锁存信号(高电平)。

从而分时给数码管写入数据并锁存。

(三)音调编码读取模块1、编码规则本程序的设计采用了三位数编码,即:利用三位数表示一个音符。

第一位由1-7组成,表示音符1-7;第二位由1-4组成,表示音阶的低、中、高和超高;第三位由1-9组成,表示该音阶的拍数,计算方式是1/2拍 数字。

例如:6,2,2……表示一拍中音6;4,3,1……表示半拍高音4。

2、读取方式首先读取前两位数,以确定音调。

然后读取最后一位,以确定拍数(时间)。

然后依次递增3位。

音调确定后,通过查表获取定时器初始值,并调用定时器中断。

拍数,即定时器中断执行的循环次数,以此来控制声音的时间。

(四)定时器中断模块1、定时器的调用本程序的设计采用定时器中断的方法来使蜂鸣器发出不同的频率声音,从而实现电子琴的音调。

定时器的初始值不同,产生的频率也就不同。

定时器的调用是循环不断的,它的循环包括两类:一类是一个音节频率的循环,从而控制一个拍数的长短;另一类是下一个音节的到来,重新写入初值,直至结束标志位的到来,即0,0,0。

如果再调用程序中,再加入一个整体循环,则可以反复执行音乐播放。

即,检测到结束标志后,重新播放音乐而不间断。

(本程序,没有使用该循环。

)2、初始值的生成与写入定时器的初始值,是通过网络搜索得到的,不同的初值代表着会发出不同频率的音调。

将它制成表,以便程序读取。

五、设计总结我课程设计的题目是电子琴的设计。

主要用的了之前所学的定时器中断、矩阵键盘扫描、数码管显示、C51编程等相关的单片机及接口技术的知识和理论。

在课设中,也充分的做到了学以致用,把之前所学的知识应用的实际当中去。

同时,也通过实践来检验之前所学的理论,发现了很多对理论知识的误解。

这些,也都在实践中得到了很好的弥补。

在设计程序的初始阶段,我本打算一次性完成任务,但每次尝试都以失败告终。

后来,我学会了分模块处理问题,逐一突破。

这也是我在此次课程设计中的一大收获。

让我充分懂得了,如何去处理一个较大的工程项目。

首先,我先实现了使单片机发出不同音调的基本功能,然后开始考虑键盘扫描。

但是在调试时,总是出现BUG。

在部分按键按下后,蜂鸣器会一直响,无法终止。

这个问题一直困扰了我很久,尝试了很多方法都没能成功,终于在一天早上醒来后的第一次尝试,终于成功了,即在键盘扫描中加入一个程序,当音乐执行到结束标志后,此时若没有键盘被按下时,令蜂鸣器停止鸣叫不做任何响应,直至有键盘再被按下。

最后,我将两个模块进行结合,于是便成功的写出了电子琴的程序。

而且成功进行了调试。

第一天验收,老师让我再加入数码管显示功能。

于是,我又写了数码管显示模块的程序。

数码管显示是通过锁存器来完成的。

当我程序写完之后进行调试,数码管没有进行显示,多次调试发现:只有长时间按下按键才会有相应字符显示。

于是我尝试把段选信号的选通与锁存指令和P0数据写在一起,这样就可以立即显示当前字符了。

第二天验收,顺利通过。

事后,我又采用了外部中断的方法进行电子琴的模式切换等其他功能,从而不断地丰富了电子琴的功能。

同时,也对程序进行了整理,使程序更加规范、美观、易读。

总而言之,此次课设,我学的东西很多。

也深深地懂得理论不进行实际,是不行的。

只有通过实践才能检验自己对理论知识的理解和掌握。

在写程序的时候,一定要有良好的习惯,格式要有自己的排版方式,不能混乱。

这样易于检查和调整。

通过这次课设。

大大提高了我对单片机以及编程的能力与信心。

我相信,以后通过自己的不断深入的学习,我一定能够熟练的运用单片机到实际当中去。

六、参考文献[1] 李升,《单片机原理与接口技术》,北京:北京大学出版社,2011年7月;[2] 网友:lv_xiaowei,《音调与频率对应关系表》,/view/d90a081a6edb6f1aff001f45.html ,2012年01月03日;七、附件材料附录一:硬件原理图附录二:程序清单及说明附录三:元器件清单附录四:实物图/************************************************************** 课程设计:电子琴(南京工程学院自动化学院) ************ 开发平台:AT80C52 ************ 程序设计:施国庆203100423 **************************************************************//*______________________________/ o oooo ooo oooo o o o /\/ oo ooo oo oooo o o o / // _________________________ / // // / //I///LOVE // U // // // / //___ //////////////////////////_/ /\____\________________________\_*//************************************************************** 头文件**************************************************************/#include <reg51.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit speaker = P3^6;sbit a0=P2^0;sbit a1=P2^1;sbit a2=P2^2;sbit a3=P2^3;sbit a4=P2^4;sbit b2=P3^2;sbit b4=P3^4;sbit b5=P3^5;unsigned char timer0h, timer0l;void jian();//--------------------------------------/***************************************************** ********* 音调设置及数码管编码********************************************************* *****/// 频率-半周期数据表高八位code unsigned char FREQH[] = {0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音1234567 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, //1,2,3,4,5,6,7 0xFC, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音 1234567 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音1234567// 频率-半周期数据表低八位code unsigned char FREQL[] = {0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音1234567 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, //1,2,3,4,5,6,7 0x8F, 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音 1234567 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音1234567//--------------------------------------unsigned char const display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };/***************************************************** ********* 乐谱及其独立音调********************************************************* *****///-----------------乐谱---------------------//code unsigned char sszymmh[] = {6,2,3, 5,2,1, 3,2,2, 5,2,2,1,3,2, 6,2,1, 5,2,1, 6,2,4,3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2,1,2,1, 6,1,1, 5,2,1, 3,2,1, 2,2,4,2,2,3, 3,2,1, 5,2,2, 5,2,1, 6,2,1,3,2,2, 2,2,2, 1,2,4,5,2,3, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 1,2,1,5,1,6, 0,0,0};code unsigned char dfc[] = {5,2,2, 6,2,2, 5,2,2, 3,2,1, 2,2,1,1,2,1, 2,2,1, 1,2,1, 6,1,1, 5,1,4,6,1,1, 6,1,2, 5,1,1, 6,1,1, 6,1,2, 5,1,1,5,2,3, 3,2,1, 2,2,4,5,2,1, 6,2,1, 5,2,1, 3,2,1, 2,2,4,1,2,1, 2,2,1, 6,1,1, 1,2,1, 2,2,4,2,2,1, 2,2,1, 2,2,1, 3,2,1, 5,2,2, 5,2,1, 6,2,1,1,2,3, 6,1,1, 1,2,1, 0,0,0};code unsigned char sheng[] = {1,2,2, 2,2,2, 3,2,2, 4,2,2, 5,2,2, 6,2,2, 7,2,2, 1,3,2, 0,0,0};code unsigned char jiang[] = {1,3,2, 7,2,2, 6,2,2, 5,2,2, 4,2,2, 3,2,2, 2,2,2, 1,2,2, 0,0,0};code unsigned char songbie[] = {5,2,2, 3,2,1, 5,2,1, 1,3,4,6,2,2, 1,3,2, 5,2,4,5,2,2, 1,2,1, 2,2,1, 3,2,2, 2,2,1, 1,2,1, 2,2,4,5,2,2, 3,2,1, 5,2,1, 1,3,3, 7,2,1,6,2,2, 1,3,2, 5,2,4,5,2,2, 2,2,1, 3,2,1, 4,2,3, 7,2,1, 1,2,4,6,2,2, 1,3,2, 1,3,4,7,2,2, 6,2,1, 7,2,1, 1,3,4,6,2,1, 7,2,1, 1,3,1, 6,2,1, 6,2,1, 5,2,1, 3,2,1, 1,2,1, 2,2,4,5,2,2, 3,2,1, 5,2,1, 1,3,3, 7,2,1,6,2,2, 1,3,2, 5,2,4,3,2,2, 1,2,1, 2,2,1, 3,2,2, 2,2,1, 1,2,1, 2,2,4,5,2,2, 3,2,1, 5,2,1, 1,3,3, 7,2,1,6,2,2, 1,3,2, 5,2,4,5,2,2, 2,2,1, 3,2,1, 4,2,3, 7,2,1, 1,2,4,0,0,0};//-----------------单音---------------------//code unsigned char dou[] = {1,2,1, 0,0,0};code unsigned char re[] = {2,2,1, 0,0,0};code unsigned char mi[] = {3,2,1, 0,0,0};code unsigned char fa[] = {4,2,1, 0,0,0,};code unsigned char so[] = {5,2,1, 0,0,0};code unsigned char la[] = {6,2,1, 0,0,0};code unsigned char xi[] = {7,2,1, 0,0,0};code unsigned char doo[] = {1,3,1, 0,0,0};/***************************************************** ********* 时间参数:延时、定时器中断 *** ***********************************************************/void t0int() interrupt 1 //T0中断程序,控制发音的音调{TR0 = 0; //先关闭T0speaker = !speaker; //输出方波, 发音TH0 = timer0h; //下次的中断时间, 这个时间, 控制音调高低TL0 = timer0l;TR0 = 1; //启动T0}//--------------------------------------void delay(unsigned char t) //延时程序,控制发音的时间长度{unsigned char t1;unsigned long t2;for(t1 = 0; t1 < t; t1++) //双重循环, 共延时t个半拍for(t2 = 0; t2 < 8000; t2++); //延时期间, 可进入T0中断去发音TR0 = 0; //关闭T0, 停止发音}void jpdelay(void){unsigned char i;for(i=300;i>0;i--);}/******************************************************** ****** 声频驱动程序********************************************************* *****/void song(unsigned char time) //演奏一个音符{a3=0;TH0 = timer0h; //控制音调TL0 = timer0l;TR0 = 1; //启动T0, 由T0输出方波去发音delay(time); //控制时间长度}/***************************************************** ********* 声频调用程序********************************************************* *****///---------------------单音节----------------------------//void yin1(void){unsigned char k, i,time;TMOD = 1;ET0 = 1;EA = 1;i = 0;time = 1;while(time) {k = dou[i] + 7 * dou[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = dou[i + 2]; //读出时间长度数值i += 3;song(time); //发出一个音符} }void yin2(void){unsigned char k, i,time;TMOD = 1;ET0 = 1;EA = 1;i = 0;time = 1;while(time) {k = re[i] + 7 * re[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = re[i + 2]; //读出时间长度数值i += 3;song(time); //发出一个音符} }void yin3(void){unsigned char k, i,time;TMOD = 1;ET0 = 1;EA = 1;i = 0;while(time) {k = mi[i] + 7 *mi[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = mi[i + 2]; //读出时间长度数值i += 3;song(time); //发出一个音符} }void yin4(void){unsigned char k, i,time;TMOD = 1;ET0 = 1;EA = 1;i = 0;time = 1;while(time) {k = fa[i] + 7 *fa[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = fa[i + 2]; //读出时间长度数值i += 3;song(time); //发出一个音符} }void yin5(void){unsigned char k, i,time;ET0 = 1;EA = 1;i = 0;time = 1;while(time) {k = so[i] + 7 * so[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = so[i + 2]; //读出时间长度数值i += 3;song(time); //发出一个音符} }void yin6(void){unsigned char k, i,time;TMOD = 1;ET0 = 1;EA = 1;i = 0;time = 1;while(time) {k = la[i] + 7 *la[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = la[i + 2]; //读出时间长度数值i += 3;song(time); //发出一个音符} }void yin7(void){unsigned char k, i,time;TMOD = 1;ET0 = 1;EA = 1;i = 0;time = 1;while(time) {k = xi[i] + 7 * xi[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = xi[i + 2]; //读出时间长度数值i += 3;song(time); //发出一个音符} }void yin8(void){unsigned char k, i,time;TMOD = 1;ET0 = 1;EA = 1;i = 0;time = 1;while(time) {k = doo[i] + 7 * doo[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = doo[i + 2]; //读出时间长度数值i += 3;song(time); //发出一个音符} }//---------------------音乐----------------------------//void music1(void){unsigned char k, i,time;TMOD = 1;ET0 = 1;EA = 1;i = 0;time = 1;while(time) {k = songbie[i] + 7 * songbie[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = songbie[i + 2]; //读出时间长度数值i += 3;song(time); //发出一个音符} }void music2(void){unsigned char k, i,time;TMOD = 1;ET0 = 1;EA = 1;i = 0;time = 1;while(time) {k = dfc[i] + 7 * dfc[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = dfc[i + 2]; //读出时间长度数值i += 3;song(time); //发出一个音符} }void music3(void){unsigned char k, i,time;TMOD = 1;ET0 = 1;EA = 1;i = 0;time = 1;while(time) {k = sheng[i] + 7 * sheng[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = sheng[i + 2]; //读出时间长度数值i += 3;song(time); //发出一个音符} }void music4(void){unsigned char k, i,time;TMOD = 1;ET0 = 1;EA = 1;i = 0;time = 1;while(time) {k = jiang[i] + 7 * jiang[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = jiang[i + 2]; //读出时间长度数值i += 3;song(time); //发出一个音符} }void music5(void){unsigned char k, i,time;TMOD = 1;ET0 = 1;EA = 1;i = 0;time = 1;while(time) {k = sszymmh[i] + 7 * sszymmh[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = sszymmh[i + 2]; //读出时间长度数值i += 3;song(time); //发出一个音符} }/***************************************************** ********* 键盘扫描********************************************************* *****/uchar keyscan(void) //键盘扫描函数,使用行列反转扫描法{uchar cord_h,cord_l;//行列值中间变量P2=0x0f; //行线输出全为0cord_h=P2&0x0f; //读入列线值if(cord_h!=0x0f) //先检测有无按键按下{jpdelay(); //去抖if(cord_h!=0x0f){cord_h=P2&0x0f; //读入列线值P2=cord_h|0xf0; //输出当前列线值cord_l=P2&0xf0; //读入行线值return(cord_h+cord_l);//键盘最后组合码值}}return(0xff); //返回该值}/***************************************************** ********* 按键判别********************************************************* *****/void jian(){uchar key;key=keyscan();jpdelay();switch(key){case 0xee:b5=0;P0=display[1];b5=1;yin1();break;case 0xde:b5=0;P0=display[2];b5=1;yin2();break;case 0xbe:b5=0;P0=display[3];b5=1;yin3();break;case 0x7e:b5=0;P0=display[4];b5=1;yin4();break;case 0xed:b5=0;P0=display[5];b5=1;yin5();break;case 0xdd:b5=0;P0=display[6];b5=1;yin6();break;case 0xbd:b5=0;P0=display[7];b5=1;yin7();break;case 0x7d:b5=0;P0=display[8];b5=1;yin8();break;case 0xeb:b5=0;P0=display[1];b5=1;music1();break;case 0xdb:b5=0;P0=display[2];b5=1;music2();break;case 0xbb:b5=0;P0=display[3];b5=1;music3();break;case 0x7b:b5=0;P0=display[4];b5=1;music4();break;case 0xe7:b5=0;P0=display[5];b5=1;music5();break;case 0xd7:b5=0;P0=0x40;b5=1;;break;case 0xb7:b5=0;P0=0x40;b5=1;break;case 0x77:b5=0;P0=0x40;b5=1;break;case 0xff:b5=0;P0=0x40; b5=1;speaker=1;break;}}/***************************************************** ********* 主程序********************************************************* *****/void main(){b5=0;P0=0x40;b5=1;P0=0x00;b4=0;P0=0xff;b4=1;IE=0x82;while(1){jian();} }。

相关文档
最新文档