版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于AT89C52单片机的电子琴设计摘要电子技术经过多年的发展,技术已越来越成熟,电子技术逐渐融入到了各个领域,电子琴就是该技术的代表。由于电子琴体积小、功能强大、且价格比较贴近大多数人的购买力,受到广大的初学者、音乐爱好者的喜爱。因此电子琴有必要进一步的创新,比如提升音乐的音质、增添储存功能等,通过不段的探索,来使电子琴功能更加全面。本文的主要介绍了用AT89C52单片机为核心元件,带有十八个独立按键的电子琴,其中十六个按键各自代表十六个音符,其中的每个按键能可以在数码管上显示相应字符,其余两个为功能按键,分别用来操控电子琴的弹奏和播放。同时当系统处于播放模式时,系统会自动播放电子琴内存储的歌曲,使用者可以通过按下功能按键来播放存储的曲目,控制系统会把用户程序内存储的音符进行播放,在自动播放的过程中如果按下另外一个功能按键则停止播放歌曲。本设计通过计算不同音符的频率产生不同频率的音频脉冲,经三极管放大信号后驱动蜂鸣器发出不同音符的声音。另外用延时程序来控制发音时间的长短从而实现控制节拍的效果。本次设计的主要优点是硬件电路结构简单易实现,电子琴所需功能基本齐全,系统稳定可靠,且材料简单价格低廉。关键字:AT89C52单片机、音阶、弹奏目录TOC\o"1-3"\h\u143131概述 I1概述1.1研究背景电子琴是1934年由美国人劳伦斯·哈梦特制造发明的,到现在已有80多年历史。当初创造它的目的是用它来代替巨大的管风琴(管风琴是乐器中最大的一种,最低的发音管有10多米长)。到了20世纪60年代,电子琴制造商提高改进了电子琴的制造技术,通过使用晶体管和集成电路代替电子管,使电子琴的体积越来越小。到了20世纪70年代,随着大规模集成电路的问世和电子计算机的普片应用,导致电子琴的设备体积更加小巧和功能上的多样化。20世纪80年代初期,电子琴开始引入中国,随着改革开放,由于电子琴的价格和体型相对一般的钢琴来说更为低廉和小巧,也由于电子琴的功能多元化特点远超传统钢琴,使得很多人在选择乐器时,都比较偏向于选择功能多元化且价格更加低廉的电子琴。单片机电子琴是现代电子技术与传统音乐结合的新时代产物,是一种新型的便携式键盘乐器,它不仅可以替代传统乐器弹奏乐曲,还可以更加便捷、且更加多样化的进行乐曲弹奏,在当今音乐领域中发挥着极其重要的作用。近现代,由于微处理器技术和超大规模集成电路工艺的发展,使得单片机具有功能多样化、体积小、功耗小、稳定可靠的特点。单片机作为系统的核心部件几乎融入到我们生活的各个领域中,小到家用电器,大到工业的控制系统,它可以根据硬件设计的具体要求,合理的对软件进行设计,从而达到电子电路的合理运用。1.2国内外电子琴发展与研究根据世界电子琴品牌排行榜可知,雅马哈是当今世界电子琴市场的第一品牌,其后分别为卡西欧、罗兰Roland、美得理MEDELI、Korg电子琴和美科电子琴等。雅马哈电子键盘乐器,通过不断突破与创新,全心全意于为世界各地喜欢音乐的人带来划时代的音乐感受。丰富多变的弹奏方式,为键盘乐器提供了无尽可能。雅马哈电子琴丰富多彩的产品线,给不同阶段的电子琴用户都带俩了丰富多元的选择空间。从开始探索电子音器世界的初学者,到世界各地的音乐制作人,从在家中自娱自乐,到国际化的音乐舞台,雅马哈电子键盘都能提高最有力的帮助。同时雅玛哈电子键盘也提供给键盘演奏者细节丰富的声音和充满动感的伴奏风格,从共鸣性丰富的钢琴到绚丽炫彩的小提琴,从狂野的美式西部摇滚乐,到典雅华丽的电子华尔兹,所有可能性都收录于了雅玛哈电子键盘乐器。由此成为了世界第一大电子琴品牌。最近二十年来,也正是随着计算机的发达加之电脑等多媒体制作程序的广泛应用,使的电子产品琴也随着时尚的步伐而加快了发展,包括大名鼎鼎的悠悠电子产品琴、nbpiano模拟电子产品琴、顺风雷电子琴琴等,不仅以其精美的用户界面获得了许多电子产品琴爱好者的青睐,而且其功能上已经基本接近于真正的电子琴。目前针对于儿童玩具的微型电子琴研究已经有着良好的市场前景,而这种微型电子琴因成本低,功能多,而受到了广大人们的喜爱,是初学电子琴的理想选择。1.3研究目的及意义随着电子科技的蓬勃发展,电子科技也逐步融合到了各个领域,而电子琴也正是在此背景下诞生。由于电子琴体积小、功能强大、且价格比较贴近大多数人的购买力,受到广大的初学者、音乐爱好者的喜爱。关于价格低廉的电子琴产品设计,目前国内外的研究水平尚有待进一步提高,而关于微型电子琴的实际用途的研究方面还出在刚刚开始的状态,所以,本章重点从微型电子琴的价格与实用性入手,设计出一款价格低廉,且功能强大的微型电子琴。这种电子琴将会弥补了传统电子琴音阶可调范围低、不可储存、不易携带、成本高的缺点。由于电子琴有十六个音符,可以配合乐谱使用,弹奏出高低音两种不同的版本。且电子琴体积小、易携带,大大提高了人们携带电子琴的便携性。单片机拥有强大的控制能力和灵活的编程实现特性,采用单片机作为核心元件,极大的提高了电子琴的稳定性和高效性。
2系统硬件设计单片机电子琴设计主要要满足通过按下按键发出并显示不同的音调,通过扬声器放大发声的基础功能,因此由按键、显示、扬声器这几个模块。如图2.1所示本系统采用AT89C52为主控芯片。输入电路有十六个琴键按键,通过按键按下想要表达的音符,作为电平发送给主电路,单片机通过识别、解码输出音符,在扬声器中发出特定的噪声。另有两个功能键,一个为播放模式,一个为弹奏模式。播放模式时,按下琴键则播放内置储存的对应音乐。图2.1单片机电子琴系统框图键盘控制:键盘由16个按键组成,通过按下按键输入对应的音符,按键将信息传递给单片机从而控制扬声器发声。AT89C52单片机:本设计主要由AT89C52单片机、晶振电路、复位电路组成单片机最小系统。最小系统用来接收按键信息来控制其他模块。扬声器:扬声器模块主要由两个三极管和喇叭构成,当有键按下时,信号将会通过三极管放大后通过喇叭发出对应声音。功能切换:由两个按钮和LED灯组成,分别控制电子琴的弹奏和播放功能。数码管模块:由一个排阻和一个共阳极数码管组成,弹奏时显示按键对应音符,播放时显示播放音乐的序号。2.1单片机及其最小系统单片机的最小系统,是指采用三个模块组成的使单片机能够正常工作的系统。最小系统一般由单片机、时钟电路、复位电路这三个部分。它们是使单片机可以顺利工作的的必要组成部分,可将单片机最小系统作为核心部分,并通过对其进行扩展使单片机完成设计所需要的功能。2.1.1AT89C52AT89C52是51系列单片机的一个型号,它是ATMEL公司制造的。AT89C52是一款低电压,高效的单片机,片内含8k字节的可反复擦写的只读程序存储器和256字节的随机存取数据存储器。图2.2AT89C52单片机元件图AT89C52一共含40个引脚,其中32个为外部双向输入/输出(I/O)端口,并且它拥有2个外中断口,3个16位可编程化定时器,2个全双工串行通信口,以及2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程。它将通用的微处理器和存储器结合在一起,尤其是可反复擦写的Flash存储器能够有效地减少开发成本。主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器进出端口,外接12MHz晶振。RST/Vpd(9脚)为复位电路输入端口,外接电阻电容组成复位电路。VCC(40脚)和VSS(20脚)为供电端口。P0~P3为可编程通用输入输出引脚。P0口,三态双向口,它不但可以作为输入输出端口,还可以作为低八位地址或数据总线使用(当系统扩展时)P1口,准双向输入输出口,它和P0口具有同样的功能P2口,准双向输入输出口,它与前面不同的是,当系统扩展时,它是作为高八位地址总线使用P3口,多功能口,P3口除了作为通用的输入输出端口以外,它的每个引脚都有各自的第二功能。2.1.2时钟电路图2.3时钟电路图时钟电路是单片机的定时控制方式,主要包括内部时钟方式和外部时钟方式两种形式,本文采用内部时钟方式。振荡器主要由单片机内部反相器的输入输出端和外接的反馈元件组成。单片机内部各元件接收振荡器产生的时钟信号。单振荡器可由外界晶振,或接陶瓷振荡器与电容,通电以后延时大概十毫秒,而不由软件控制振荡器产生时钟,其中,C1和C2电容的两个作用:一个是对振荡器的频率起调节作用,典型值为三十pF,二是协助振荡器起振。2.1.3复位电路图2.4复位电路图AT89C52单片机启动前需要进行复位处理,使CPU和系统的各个部件都处于一种确定的初始状态。复位信号从单片机的RST引脚输入,并且应保持两个机械周期的高电平,如果使用6MHZ的晶体振荡器,则复位信号必须维持4µs以上,才能够保证有效复位。2.2按键模块本设计采用矩阵式键盘构成一个十六键按键键盘,相对于独立式键盘,矩阵式键盘只需把八个I/O组成,能够有效的提高单片机I/O口的利用率,大大节约了单片机的资源。实现原理:当有按键按下时,与此键相连的行线与列线导通,行线在无键按下时处在高电平。显着,假定让悉数的列线也处在高电平,那么,按键按下与否不会致使行线电平的改动,因而,有必要使悉数列线处在低电平。只需这么,当有键按下时,该键地址的行电平才会由高电平变为低电平。从而就可以找到哪一行哪一列电平发生变化,通过以上方法我们就得到16个键的特征编码。图2.5矩阵键盘电路图2.3数码管显示模块图2.6数码管显示图本次设计的显示电路通过LED数码管显示,是一种外加电压并发出光的元件。LED有共阳和共阴两种方式,本设计采用共阳极数码管,数码管上的发光二极管由来自单片机I/0接口的高低电平来实现点亮和关闭,数码管上显示的数字和字符是由单片机送来的数码管显示编码实现,使操作人员非常方便的的掌握不同琴键的对应的音符。2.4喇叭发声模块图2.7喇叭发声模块喇叭发声模块采用两个晶体三极管和扬声器构成,将信号通过两个三极管组成的放大电路使扬声器发声。晶体三极管,是指采用了一定加工方式,将两个PN结结合在一起的元件,由于PN姐之间的相互作用,使三极管具有电流放大的功能。三极管的放大作用:集电极电流的变化量等于基极电流变化量的β倍,即电流变化被扩大了β倍。如果我们将一个变化的小信号加到基极跟发射极之间,这将导致基极电流发生变化,基极电流的变化被放大后,使集电极电流有很大的变化。假定集电极电流是经过一个电阻R,那么在这电阻上的电压就会出现很大的变化。我们将这个电阻上的电压取出来,就得到了放大后的电压信号了。当没有键按下时,P3.7口发出低电平,Q1,Q2皆为截止状态,喇叭不发声。当有键按下时,P3.7口发出高电平,Q1导通,Q2导通,喇叭发声。2.5功能切换模块图2.8功能切换模块该模块主要由两个按钮和LED指示灯组成,T1和T2分别为电子琴的弹奏模式和播放储模式,D1和D2为对应指示灯。通过两个外部中断控制,按下T1,则点亮弹奏模式指示灯D1,执行弹奏模式,按下T2,则点亮播放模式指示灯D2,执行播放模式。
3软件设计3.1音乐相关知识3.1.1音调在音乐中所谓“声调”,其实就是我们常说的“音高”。在音乐中常把中央C上方的A声调作为标准音高,其频率f=440Hz,其余则与其比较。设f1和f2为两个音符,当这两个音符的频率相差一倍时,也即f2=2*f1时,则称f2比f1高一个倍频程。在音乐学中称它相差一个八度音。在一个八度音内,有12个半音。以1-i八音区为例,12个半音是:1-#1、#1-2、2-#2、#2-3、3-4、4-#4,#4--5、5-#5、#5-6、6-#6、#6-7、7-i。这12个音阶的分度基本上是以对数关系来划分的。假如我们只要懂了这十二个音符的音高,也就是它基本音高的频率,我们就可根据倍频程的关系得出其他音符基本音调的频率。判断某个频率所对应的定时器的定时初值的主要方式:这个时间t也就是单片机上定时器应有的中断触发时间。通常情况下,当单片机启动时,它以振荡器的十二分频信号为计数脉冲。设振荡器频率为fo,则定时器的予置初值由下式来决定:式中,TALL==65536,THL为定时器待确定的计数初值。因此定时器的高低计数器的初为:将t=1136μs代入到上述二式中,就可求出当在单片机晶振频率为fo=12Mhz,定时器在工作方式1下的标准音高A的定时器高低计数器的预置初值为:根据上面的求解方法,我们就可求出其他音调相应的定时器的初值。如表3.1所示。表3.1高、中、低音符与单片机定时器T0计数值的关系音符频率/HZ简谱码(T值)音符频率/HZ简谱码低1DO26263628#4#FA74064860#1#DO27763731中5SO78464890低2RE29463835#5#SO83164934#2#RE31163928中6LA88064968低3ME33064021#6#LA93264994低4FA34964103中7SI98865030#4#FA37064185高1DO104665085低5SO39264260#1#DO110965085#5#SO41564331高2RE117565110低6LA44064400#2#RE124565134#6#LA46664463高3ME131865157低7SI49464524高4FA139765178中1DO52364580#4#FA148065198#1#DO55464633高5SO156865217中2RE58764684#5#SO166165235#2#RE62264732高6LA176065252中3ME65964777#6#LS186565268中4FA69864820高7SI1967652833.1.2节拍其中1、2为一拍,3、4、5为一拍,6为一拍共三拍。1、2的时长为四分音符的一伴,即为八分音符长,3、4的时长为八分音符的一伴,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400-500ms。3.2主程序模块单片机电子琴需要实现通过按下按键实现弹奏音乐的功能,在数码管上显示音符,并通过喇叭发出对应音符的声音。程序实现流程图如图3.2所示:图3.2单片机电子琴主程序流程图主程序在接通电源后,默认是弹奏模式,当有一个按键按下时,数码管显示对应音符,并通过喇叭发出声音,当切换为播放模式时,按下按键,数码管显示对应内置歌曲序号,并开始播放该歌曲。3.3主要子程序设计的硬件分各个模块实现,同样的程序也需要由子程序来分别完成功能,子程序可以使复杂的程序简单明了,方便阅读和调试,每个功能对应的模块都有它的子程序,如矩阵键盘的键盘扫描子程序,按键键值的识别子程序等。3.3.1键盘扫描子程序图3.3键盘扫描模块流程图键盘模块可以看做是横四纵四的线条,但不连通,当有一个按键按下,按下的按键就会连通一条横着的线和竖着的线,被按下的按键相连的纵线所带的高电平会被横线的低电平下拉,按下后电平会互换,以此找到是哪个键闭合并计算相应的键值。根据矩阵键盘的流程图可知,当没有键按下时,P1=0xf0,当有键按下时,该键所对应的行和列电平就会发生变化。将行和列读取的结果组合起来,就可以找到哪个键按下,从而得到该键的特征编码3.3.2键盘键值识别子程序图3.4键盘键值识别流程图键盘键值识别的前提是要系统识别出哪个按键按下,所以先要判断是否有键按下,为了防止系统判定错误,设置延时一段时间去抖动,并再次识别是否有键按下,通过两次的判断保证识别的准确性,然后通过switch语句对不同按键的特征编码赋予不同的K值,当扫描到按键按下时,从switch语句中得到按键的特征编码,从而达到按键键值识别的效果。
4软件仿真4.1仿真软件4.1.1keil编程软件KeilC51是由美国ksadaSoftware公司出品的51系列兼容单片机C语言开发系统软件,与汇编语言相比,C语言在功能上、结构性、易读性、可维护性上都有着较突出的优点,所有简单实用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,并使用一个集成化的开发环境(μVision)将上述部分组合在一起。图4.1Keil操作界面4.12Protues仿真软件英国Labcenter公司推出的Protues软件应用虚拟仿真技术,很好的解决了单片机及其外围电路的综合设计与协调仿真的问题,从而能够在没有单片机等实际硬件设备的条件下,直接利用计算机实现对单片机设计的仿真模拟,其仿真结果可以直接运用于实际的实物设计,大大提高了单片机设计的综合设计效率,同时也使单片机的学习设计和研究开发过程变得更加简单与快捷。其操作界面如图4.2所示。操作步骤为:在库里找齐所需元件,绘制原理图,导入后缀为.hex的程序文件,最后开始仿真。图4.2Protues操作界面4.2软件仿真过程与结果在protues元件库中找到单片机电子琴需要的所有元器件,包括AT89C52单片机、电阻、三极管、数码管、扬声器、按键、LED灯等等。正确连接各个元器件引脚的线,并设置好所有引脚和相应数值,检查无误后保存在电脑上。重新仿真时在软件左上角文件中选择”打开工程”,找到之前绘制好的电路图并打开。图4.3最后如图4.3,鼠标左键双击AT89C52单片机芯片,单机”programFile”选项后面的文件图标,将用Keil写好的hex文件添加进去,点击确定。单击protues窗口左下角的三角形符号开始仿真,可以看到数码管亮起并显示”0”字样,表示已开机可以弹奏。系统初始状态如图4.4所示图4.4单片机电子琴初始状态图D1LED灯亮起,表示初始默认为弹奏模式,在右边键盘上按下按键,数码管就会显示对应音符的数值,并且扬声器电路开始运行发出对应的声音。如图4.5所示图4.5电子琴弹奏模式运行图按下T2按钮,D2LED灯亮起,表示切换为播放模式,在右边键盘上按下按键,数码管就会显示对应歌曲的序号,并且扬声器电路开始持续运行播放音乐。如图4.6所示图4.6单片机电子琴播放模式运行图
5总结和展望本文根据市场对电子琴的要求,对老式电子琴和现代电子琴的原理进行了探索,并设计了一种单片机电子琴。本系统的核心控制芯片采用AT89C52型号单片机,通过控制单片机定时/计数器来生成方波频率信号,使不同的按键产生不同的音符。其次,在自动播放功能中,对乐谱弹奏所需要的音符和节拍同样通过控制产生不同的频率信号实现。本次设计设计思路简单明了、成本低、程序简单,极大的优化了微型电子琴的设计思路。虽然经过protues仿真,本设计基本能实现设计要求,但如果代入到现实的生活中,仍然有许多需要改进和不足的地方,比如电源的问题,如果要便于携带,就需要改进供电方式。在实际操作的过程中,发现功能切换时,偶尔会出现失灵的状况。由于编程水平有限目前进行改进有一些困难。相信在不断地的学习过程中,这些问题都会得到解决与改进。当下科技发展迅速,电子琴的种类也会越来越多,其功能会越来越强大,会出现更加多样的方式实现音乐的创作和弹奏,给人们带来更加精彩的音乐乐趣。
6参考文献[1]楼俊君,程启明,赵永熹.PROTEUS仿真软件在单片机实践课程中的应用[J].电脑知识与技术,2018,14(30):91-92[2]曾卫华.“单片机原理及应用”课程的教学改革与实践[J].电气电子教学学报,2018,40(05):65-67+97[3]葛水河,张窝羊,杨旭辉.基于单片机的16键多功能电子琴硬件设计[J].时代农机,2018,45(07):233-234[4]其曼古丽·加马力丁.论翻转课堂视角下的《单片机原理及应用》课程项目化教学模式[J].电脑与电信,2018(06):35-37[5]黄海燕.基于创客教学模式的高职生态课堂建设的实践研究——以单片机技术课程为例[J].佳木斯职业学院学报,2018(05):1-3[6]李佳琪.基于单片机的简易电子琴设计[J].科技风,2018(06):1[7]程家勤,刘强强,张阳熠,周海军,欧美英,董可秀.基于单片机的多功能电子琴设计[J].电子制作,2017(11):9-11[8]徐江维,李菲.基于51单片机的电子琴设计[J].电子世界,2017(09):125.[9]杜平.基于51单片机的声光电子琴设计[J].数码设计,2017,6(08):48-49[10]梅霆.单片机仿真在实践教学中的应用与探讨[J].中国教育技术装备,2017(06):44-45[11]王云.51单片机C语言程序设计教程[M].第二版.北京:人民邮电出版社,2018:24-28.[12]徐爱钧,徐阳.单片机原理与应用—基于Proteus虚拟仿真技术[M].第二版.北京:机械工业出版社,2018:15-18.[13]刘淑荣,王瑾.MCS-51系列单片机原理及应用[M].第二版.北京:中国电力出版社,2011:24-25.[14]\t"http://en.x.fqscloud.top:90/zn/Detail/index/GARJ2019/_blank"QunMa; \t"http://en.x.fqscloud.top:90/zn/Detail/index/GARJ2019/_blank"KunlunLi; \t"http://en.x.fqscloud.top:90/zn/Detail/index/GARJ2019/_blank"JiahuiHu.DesignofintelligentcarbasedonMCUAT89S52[J].InternationalCoreJournalofEngineeringVolume52019(8):210[15]MingyuZhang.SmallMetalIntelligentDetector[J].InternationalCoreJournalofEngineeringVolume5,2019(12):110-111.[16]YaliHe; JingHe; CaiyunXu; NannanZhang; KuangWu.DesignofTemperature-controlledFanSystemBasedonSingleChipMicrocomputer[J].WorldScientificResearchJournalVolume72021(6):474-475
7附录#include<reg51.h>#include<absacc.h>#include<stdio.h>#include<math.h> //头文件 #defineucharunsignedchar#defineuintunsignedint //宏定义ucharSTH0; //定时器变量ucharSTL0; //定时器变量bitFY=0; //设置0时为弹奏模式,为1时为播放模式ucharSong_Index=0,Tone_Index=0;//单首歌曲音符数uchark,key; //k:按键数值。key:按键的特征编码sbitSPK=P3^7; //定义喇叭的接口sbitLED1=P3^5;sbitLED2=P3^4; //定义两个LED的接口ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//数码管显示的数组(123456789) 0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0xa3,0x8c,0xc8}; //(ABCDEFHOPN)unsignedcharcodenum1[]= "Music:";ucharcodeSong[][100]= //内置歌曲数组的音符顺序{ // 1 2 {12,10,9,9,10,8,9,10, 12,10,9,9,5,10,11,10, 10,10,14,10,9,8,7,8, 9,10,13,6,8,10,9,6, 8,7,5,6,12,10,9,9, 9,10,8,9,10,12,10,9, 9,9,5,10,11,10,10,10, 14,10,9,8,7,8,9,10, 13,6,8,10,9,6,8,7, 5,6,-1}, //烟花易冷 {13,12,10,12,15,13, 12,13,10,12,13,12,10,8,6,12, 10,9,9,10,12,12,13,10,9, 8,12,10,9,8,6,8,5,-1},//世上只有妈妈好};ucharcodeLen[][100]=//对应歌曲的节拍{ {1,1,2,4,1,1,1,4, 1,1,2,2,1,1,1,4, 1,1,1,1,2,1,1,1, 1,1,3,1,1,1,1,1, 1,1,1,6,1,1,2,1, 1,1,1,1,4,1,1,2, 1,1,1,1,1,4,1,1, 3,1,2,1,1,1,1,1, 3,1,1,1,1,1,1,2, 2,6,-1}, {3,1,2,2,2,1, 1,4,2,1,1,2,2,1,1,1, 1,4,3,1,2,1,1,2,2, 4,3,1,1,1,1,1,6,-1},};uintcodetab[]={ //在弹奏和播放模式时用于定时器初值 63500, //超低音si 63628,63835,64021,64103,64260,64400,64524, //低音do-si 64580,64684,64777,64820,64898,64968,65030, // do-si 65058,65110,65157,65178,65217,65252,65283, //高音do-si 65313}; //超高音dovoiddelay1(uintms)//粗略1ms延时函数,不精确{ uchart; while(ms--) for(t=0;t<120;t++);}voiddelay(void){ uchari; for(i=300;i>0;i--);}uchargetkey(void) //矩阵键盘扫描函数{ ucharscancode,tmpcode; if((P1&0xf0)==0xf0) //表示无按键按下 return(0); //此函数返回值为0 scancode=0xfe; //如果上面的if表达式不成立,此语句才可以执行 while((scancode&0x10)!=0)//有按键按下时,此表达式成立 { P1=scancode; //将P1口赋值 if((P1&0xf0)!=0xf0) //判断P1口的状态 { tmpcode=(P1&0xf0)|0x0f; //P1口的状态与上0xf0,然后或上0x0f return((~scancode)+(~tmpcode)); //取反相加得到按键的特征编码 } elsescancode=(scancode<<1)|0x01; //检查 } return(0xff);}voidanjian() //按键键值识别{ P1=0xf0; //P1口赋值 if((P1&0xf0)!=0xf0) //判断是否有按键按下 { delay(); //去抖 if((P1&0xf0)!=0xf0)//再次判断有无按键按下 { key=getkey(); //扫描按键 Tone_Index=0;//播放音符顺序清零 switch(key) //根据扫描的按键编码将k赋值 { case0x88: //按键编码为0x88 k=0; //k赋值0 break; //跳出switch case0x48://如果不满足则继续向下判断,直到有符合 k=1; //k赋值1 break;//下同,略 case0x28: k=2; break; case0x18: k=3; break; case0x84: k=4; break; case0x44: k=5; break; case0x24: k=6; break; case0x14: k=7; break; case0x82: k=8; break; case0x42: k=9; break; case0x22: k=10; break; case0x12: k=11; break; case0x81: k=12; break; case0x41: k=13; break; case0x21: k=14; break; case0x11: k=15; break; default: //无键值输出 break; } } }}voidmain(void) //主函数{ SPK=0; LED1=1; LED2=0; //开机默认弹奏模式 P0=0xc0; //数码管显示0 IE=0x87; //定义外部中断控制器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025内蒙古鄂尔多斯电力冶金集团股份有限公司招聘80人笔试历年参考题库附带答案详解
- 2025中国煤炭地质总局社会招聘20人笔试历年参考题库附带答案详解
- 2025中国二冶集团有限公司招聘1人笔试历年参考题库附带答案详解
- 广东省广州市增城区2025-2026学年七年级上学期期中质量检测地理试题(含答案)
- 广西贺州市2025-2026学年下学期七年级道德与法治期中教学质量检测(含答案)
- 2026年江苏省盐城市中考历史调研试卷(二)(含答案)
- 2025-2026学年浙江衢州市衢州五校高二下学期4月期中英语试卷(含答案无听力音频无听力原文)
- 2026年农产品供应链管理合同(农业服务)
- 2026年少儿芭蕾舞课程
- 无人机电子技术基础课件 1.2.2.半导体二极管
- 2026年陕西有色冶矿集团第一批招聘(48人)笔试参考题库及答案解析
- 统编人教五年级语文下册《杨氏之子》教学课件
- 2026年乡镇粮食安全责任制规定知识测试题
- 编制说明-矿产资源规划数据质量检查与汇交规范
- 2026太平保险校招面试题及答案
- 充电桩日常维护手册
- 企业环保工作绩效考核方案
- 2026年航空航天基础知识模拟题库
- 肿瘤免疫治疗伦理审查的特殊考量
- 煤矿事故应急培训课件
- 感染性腹主动脉瘤诊断治疗专家共识解读指南
评论
0/150
提交评论