




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.z.----.可修编.本科毕业设计(论文)本科毕业设计(论文)基于单片机的音乐盒的设计学院名称:专业:班级:**:**:指导教师**:指导教师职称:二〇一四年六月-.z.基于单片机的音乐盒的设计摘要:本次设计根据单片机技术原理,通过硬件电路制作以及软件编程,制作出一个基于AT89C52单片机的简易音乐播放器,该系统以单片机作为电路的主控核心,硬件电路主要由按键电路、复位电路、显示电路等模块组成。系统软件采用C语言进行编写,采用了模块化编程,其移植性较好。系统程序主要包括主程序、播放子程序、按键子程序、延时子程序等。该系统有歌曲播放、电子琴两种模式,可通过按键进行模式选择。本论文包括系统方案的建立、硬件电路的具体设计及软件的程序实现等过程。并通过软硬件的联合调试,验证了设计方案的可行性。该系统最终实现了模式的选择、歌曲的选择及播放等功能,实验证明,该系统具有一定的实用性。关键词:AT89C52单片机;软件编程;音乐盒-.z.TheDesignofMusicBo*oftheSingleChipMicroputerAbstract:Thisdesignaccordingtoprincipleofsinglechipmicroputertechnology,throughthehardwarecircuitsandsoftwareprogramming,makeasimplemusicplayerbasedonAT89C52singlechipmicroputer,thesystemwithsinglechipmicroputerascontrolcoreofthecircuit,thehardwarecircuitismainlyposedofkeypadcircuit,resetcircuit,displaycircuitmodule.SystemsoftwareusingClanguagetowrite,usingthemodularprogramming.theportablilityisgood.Systemprogrammainlyincludesthemainprogramsubroutine,playedsubroutines,buttons,delaysubroutine.Thesystemhasasongplay,keyboardtwomodes,canthroughthebuttontochoose.Thispaperincludestheestablishmentofthesystem,detaileddesignofhardwarecircuitandsoftwareprogramimplementationprocess.Andthroughthesoftwareandhardwarejointdebugging,verifythefeasibilityofdesignscheme.Thesystemfinallyrealizethepatternselection,selectionofsongsandplayfunction,suchase*perimentsshowthatthesystemhasacertainpracticality.Keywords:AT89C52microcontroller,;Softwareprogramming;themusicbo*-.z.目录TOC\o"1-3"\h\u1612第1章绪论1276561.1课题背景及研究意义1282681.2课题设计目的及主要工作230118第2章课题任务分析与方案选择3310302.1课题任务分析355022.2硬件电路的组成3132282.3设计功能要求321172.4总体设计原理493432.5总体设计框图4193092.6选用的方案518110第3章系统硬件设计670793.1单片机最小系统6170973.1.1AT89C52单片机介绍6113923.2.2复位电路介绍881863.2.3晶振电路介绍9155413.3显示电路10231363.44*4矩阵键盘识别电路1119663.5声音电路1212806第4章软件设计1432404.1Proteus仿真软件与Keil编译介绍14241754.2音调与节拍15143414.2.1发声原理1588824.2.2音调的确定1640474.2.3节拍的确定17181054.2.4音乐编码18220614.3系统软件总体设计流程图18159774.3.1主程序流程图18267204.3.2歌曲播放流程图2038804.3.3按键扫描流程图2017204.3.4延时子程序流程图213713第5章总结2321795致谢24-.z.10999参考文献258515附录1:电路原理图2714393附录2:元器件清单288754附录3:源程序29-.z.第1章绪论1.1课题背景及研究意义单片机应用到当前社会的各个领域中,既提高了社会的信息化水平又大力的发展了社会的生产力,同时也使目前电子产品的性能有了更高的提升,从而使产品更新换代的周期也逐渐变短。如今,单片机不仅有着高性能与多品种性能的发展趋势,并且还向着其他优良方向发展,比如向着CMOS化、低耗能、小巧、大容量、高性能、廉价和外围电路内装化等。单片机从本质上转变了传统控制系统中的设计思想与设计方式,这在其应用中具有很重要的价值[1]。以前的状态是,只能通过模拟电路或者是数字电路的应用,才可以将大部分的功能实现,而目前的状态可以直接使用软件编程的方式来实现单片机的功能。这种被称为微控制技术的方法是对传统控制技术的一次革命,就是使用软件的方式取代使用硬件的方式来实现功能的控制技术[2]。单片机可以很成功的应用到嵌入式系统当中,因此它获得了更多应用的机会,相比与专用处理器来说,这是超越其应用的优势。换个方式讲单片机是世界上个数最多的计算机。集成单片机已经应用到到的大部分电子和机械产品中,是目前人类的生产生活的主流。大多数电子产品中都会配有1到2部单片机,比如正常生活中人们通讯时用到的手机、,生产生活中用到的计算器、家用电器,以及娱乐项目中的电子玩具、掌上电脑,另外还包括一些电脑配件键盘鼠标之类的。而台式机,笔记本电脑等个人电脑中也都有许多单片机在工作。其他的一些大一点的产品中通常会配有40部以上的单片机,比如汽车等,而特殊的一些大型机械上的单片机会有更多,甚至能达到上百台,并且可以同时工作,在庞大的工业控制系统上就是如此。由此可见就算PC机和其他控制系统的合在一起,他们的总数也远远不及单片机的数目,甚至比人的数量还要多[3]。因此单片机地研究前景有非常广阔的空间。所以现实生活中单片机的影响已经融入到大多数的研究领域,例如军事中装配的导弹导航系统,装在飞机上的各种仪器的控制系统,计算机之间的网络通讯和数据传输,包括运用在工业自动化过程的实时控制和数据处理,还有人们在生活中用到的各类智能IC卡,在民用轿车中应用到的安全保障系统,包括一些普通生活的一些控制系统中也有应用,比如录像机、摄像机、全自动洗衣机,包括其他的一些电子玩具、电子宠物等娱乐产品,这些都离不开单片机的应用[4]。我们所接触的信息在随着科学技术的提高和人类社会的进步发展中会不断扩大并且越来越复杂。面对如此多如牛毛的信息,人们已经可以利用计算机等工具准确高效地对其进行处理,但是想要将处理成功的信息能及时,清晰地传递给别人,还必须利用更加高效的显示技术来实现相应的功能。其中能成熟的结合单片机技术和液晶显示技术,使得智能可视化技术成为信息传输交流技术发展的主流方向[5]。说到音乐盒的历史发展,可以上溯到欧洲文艺复兴的年代,也就是中世纪时期。那个时候其主要的作用只是为教会的钟塔提供时间提醒用的,这种装置构成单一,就是把各种不一样的钟表装在一个机器上,所以也叫做“可发出声音的组钟”。所以音乐盒的成长历史有将近300多年,同时也见证了人类历史文化的发展[6]。机械音乐盒在最初的音乐盒中是占据主流的,他是利用齿轮来让铁桶滚动,铁桶上装有铁棒,通过铁棒与铁片相互碰撞从而制成琴键,从而发出声音的原理。但是,机械音乐盒的缺点很多,比如外形大,个体沉重,且发声单一。而且有着一些容易让内部铁条变形的外在因素在影响,比如水,粉尘等,都会造成音准失调,时间一长就会让音乐盒的发音跑调。另外,机械音乐盒放音时必须放平不可动摇,才能发出好的音质。而且机械音乐盒价格昂贵,不允许大批量生产,商业价值不高[7]。而如今随着科技的进步,人们能将现代电子科技和音乐相结合,并产生一个新的产物,被称为电子琴,这种全新的乐器通过键盘来实现弹奏,俨然已成为现代音乐发展中的不可或缺的角色。由此可见单片机也凭借着其控制功能的强大与软件编程的灵便的特征,成功渗透到当今人们生活的各个领域,是人类正常生产生活中必须要用到的存在。1.2课题设计目的及主要工作本文的主要设计内容中,电路的核心控制元件就是AT89C52单片机,即主控核心为单片机,硬件电路设计中还包括键盘、扬声器、4*4矩阵键盘、液晶显示器等模块。通常来讲一部好听的音乐由不少各不一样的音阶所构成的,但是许多音符又是由各不相同的频率相互对照,这样在使用该系统时就能够通过操纵不一样的频率的相连,就能变为所需的音乐,在单片机工作中发出不一样的频率是十分容易的,它能够通过单片机的定时/计数器T0来发出不同方波频率的信号,所以,只需直接将一部歌曲的音符与频率之间的对应关系根据音符与频率关系对照表弄清楚就行了。本系统中电子音乐盒有着外形小巧,播放的音质优美,另外其演奏的音乐也有非常方便的优势,而这些都是传统的机械式音乐盒无法达到的。通过电池来供电使得电子音乐盒更加方便,并且它的制作过程也非常简单,而且非常廉价,厂商能成批的进行制造。基于单片机制作的音乐盒,控制功能强大,可根据不同需求进行选歌,且使用方便。第2章课题任务分析与方案选择2.1课题任务分析本次设计中硬件电路的主要核心就是AT89C52芯片,用扬声器作为外部放音电路,这样就能够实现音乐播放控制器的功能。设计中运用软件程序通过在单片机内部控制定时器,从而达到能够实现演奏出幽美悦耳的音乐的功能。本次设计中对运用单片机设计音乐盒与电子琴时,分析其原理,发现其本质就是利用单片机来生成不同的频率以便在系统中可以得到自己所需的音符,最终可以弹奏各种不同的音乐。此次论文主要论述各个模块的功能,芯片等元器件和电路的原理图,以及软件程序流程图等。在此次设计的内容中,利用计算机当做控制终端,方便在软件仿真和调试过程可以顺利进行。用1602显示器显示发音值和扬声器的发音状态。使用4*4矩阵键盘,作为电子琴的琴键。系统整体设计简洁,精练。用户能够根据自身的兴趣演奏乐曲,也能够播放不同的音乐。而对于不同型号的单片机来讲直接改变一下地址就可以继续使用该音乐盒放音了。由此可看出它的硬件系统和软件系统都拥有较优的通用性,而且它的实用价值和参考价值也是相当高的。2.2硬件电路的组成本次硬件电路设计可以分为以下几个部分:(1)单片机部分以AT89C52单片机为核心控制整个系统;(2)液晶显示部分是用1602液晶显示器,通过单片机P1口控制,以实现开机画面,音乐盒与电子琴功能的显示,以及电子琴不同音调的显示;(3)功能键盘部分是用4*4矩阵键盘作为按键开关,通过单片机P3口控制,实现电路复位,歌曲的播放,功能的选择,以及电子琴音调的播放的功能;(4)发声部分是用蜂鸣器,通过单片机P2口实现歌曲的播放以及电子琴音调的发声。2.3设计功能要求汇编或C语言程序设计。2.程序调试,在Proteus上进行仿真。3.使用I/O处采用1602液晶显示歌曲。此次设计的电路共分为两种工作模式:音乐盒模式与电子琴模式(1)音乐盒模式下演奏完整的一首歌。(2)电子琴模式下通过4*4键盘演奏不同的音乐。按下复位键进入开机画面,按下选择键进入音乐盒模式播放音乐,再按选择键进入电子琴模式,可以进行演奏。2.4总体设计原理基本发声原理是通过单片机的定时器产生一定长度的方波,方波脉冲驱动扬声器发出声音。只需直接算出一个音频的周期(1/音频),然后直接取半个周期的时间进行定时,就可以生成音频脉冲了。利用定时器计使用这个半周期的时间,然后在重复计时此半周期时间,在计时结束后再将I/O口进行反相,直接就能在I/O脚上获得这个频率的脉冲信号。如中音D0,频率为523HZ,其周期T=1/523=1912微秒,要想获得中音D0(523HZ),就将令计数器直接定时为1912/2=956,这样每当计数956次后,就将I/O口反相就可以了[8]。想要播放音乐时,直接按下按键,然后判断键值,并启动计数器T0,这样生成相应频率的脉冲,通过单片机来驱动喇叭,就能放出乐曲了。同时启动定时器T1,在液晶显示器上显示模块。显示相应的功能必须要使用显示器,本次设计采用的是1602显示器,通过单片机P1口控制,实现功能切换的显示;如果要进行相应的操作时,就使用按键开关来作为按键模块的功能按键,在单片机的P3口上实施控制,来实现歌曲的播放与模块切换的功能;扬声器则是通过单片机的P2口进行控制的,主要是能实现播放乐曲和演奏的功能;同时有液晶显示器显示电子琴琴键的键值,扬声器播放出音乐。2.5总体设计框图电源供电是单片机工作的动力来源,单片机工作中用到的时钟信号是由晶振电路提供的,外部中断由功能按键来实施控制,以此来控制选择音乐盒模块与电子琴模块,扬声器发声是通过I/O口向外输出的,液晶显示器则是进行功能的显示。而复位电路的作用就是建造程序的初始状态,在发生意外或者程序报错时,就能将单片机重新启动,保证电路的安全。系统总体设计框图如图2-1所示。AT89C52显示电路4*4矩阵键盘晶振电路声音电路复位电路图2-1总体设计框图2.6选用的方案(1)硬件设计:系统把AT89C52当做整个电路主控制核心,而外部的程序存储器需要扩展则是利用74LS373与27512,对播放器的控制是采用按键来实现的,4*4键盘矩阵控制电子琴的发音,显示电路采用1602液晶显示器来显示,晶振部分用的频率大小是12MHz,从P3.0口输出的音乐信号由扬声器传出并放出动听的音乐。(2)软件设计:软件编程的程序中选取了C调中一个8度内的一共7个音阶的音符来作为音调。按照十二平均律,(就是把八度定义为1200音分,其中全因音符占用200音分,半音占100音分,共十二个半音)每个音符所对应的频率由定时器T0产生。我们在表中放入定时器初值,一共十二个半音,这样我们在加载计数初值是就可以直接在程序中以查表的方式来进行,而在放音时就可以不用再计算定时器的初值了,每个编码都会有一个音符所对应着,占用一个字节,这样可以更方便的将程序进行调用。鉴于人耳有限的分辨力,所以曲谱中的节拍码直接可以用延时来替换,每个音符发音30MS,这样就使编程更加的简单了。矩阵式键盘在设计中得到较好的应用,目的是让按键能够及时的响应,程序的编写中的主线编写是其中的扫描键盘的程序(就是在主程序中循环的扫描按键,并在扫描按键模块时在调用其他的功能模块),每当按下一次按键,利用扫描按键的功能计算出键盘的键值,并将键值存储起来,跳转到相应的标号执行程序,并将键值调用液晶显示器子程序显示在制定的位置上,在检测到复位键按下时,就会恢复带开机画面。此方案中选用1602液晶显示器的优点是其在编写程序时方便,显示的也稳定,而且占用的CPU时序少,另外它和矩阵键盘一样在其外围电路中可以有不少的扩展功能。第3章系统硬件设计3.1单片机最小系统3.1.1AT89C52单片机介绍单片机事实上是一种集成的电路芯片(实际上就是一块硅片),也被称为微型计算机系统,它的主要技术是超大规模集成电路技术,主要的组成部分有中央处理器CPU(具有数据处理能力)、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统和定时器/计数器等(其他的还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路模块),这种集成电路不仅体积小,而且功能完善,所以在工业控制领域得到广泛应用[10]。从80年代开始,最初只有4位、8位的单片机,到现在的高速单片机已经达到了300M。本次设计中用的是AT89C52单片机,AT89C52的主要功能是控制会聚调整时的功能,它用的内核是工业上标准的C51内核,是一种8位的通用微处理器,所以它的内部功能和管脚排布和正常使用的8*c52没什么差别[11]。AT89C52有许多功能,主要包括初始化一些功能部件,比如把主IC的内部寄存器与数据RAM和外部接口等进行汇聚,还有可以把调整控制汇聚,将测试图控制汇聚以及接受并解码红外遥控信号IR和对主板CPU进行通信等[12]。AT89C52单片机中的*TAL1(19脚)在振荡器中是被当做输入脚,而*TAL2(18脚)在振荡器中是当做输出脚,另外它的外借晶振可以接到12MHz。单片机中的复位电路是由电阻和电容组成的,其中电阻和电容都是从外部接入的,复位电路的输出端口是RST/Vpd(9脚)。单片机的工作需要电源供电,而在52单片机中的供电端口有VCC(40脚)接+5V电源的正极,VSS(20脚)接电源的负极,运行单片机需要软件编程来实现,依靠软件来定义单片机的功能用途,可以通过P0-P3口的通用I/O脚来实现软件程序的导入,此次设计过程中,我们把P0端的32-39脚分别和N1的对应的功能管脚相连,如此就可以将N1功能控制端口用P0端的32-39脚来定义,其他的连接在N1的SDAS(18脚)与SCLS(19脚)端口上的10脚与11脚,就可以将这两个引脚定义成I2C总线上的控制端口,另外一些相应的功能端是连接主板CPU上的,主要功能是把目前制式的检测和汇聚进行状态调整,并进入控制功能,而这些连接到主板CPU的引脚就定义为握手信号功能端口,而52单片机中的12脚,27脚以及28脚都可以实现此功能[13]。现如今,尽管单片机的品种繁多,各具特色,但是80C51单片机由于兼容其他类型单片机产品的结构和指令系统,所以80C51依然是主流,可以说占据了该领域的半壁江山。而随着Microchip公司的PIC精简指令集合(RISC)发展势头强劲,中国**的HOLTE*公司单片机的产量也日渐增加,而且其质量高,价格廉,所以占据一定的市场份额。此外还有MOTOROLA公司的产品,日本几大公司的专用单片机。在一定的时期内,这种情形将得以延续,将不存在*个单片机一统天下的垄断局面,走的是依存互补、相辅相成、共同发展的道路。九十年代以后,单片机在结构上采用双CPU或内部流水线,CPU位数有8位、16位、32位,时钟频率高达20MHZ,片内带有PWM输出、监视定时器WDT、可编程计数器阵列PCA、DMA传输、调制解调器等。芯片向高度集成化、低功耗方向的发展,使得单片机在大量数据的实时处理、高级通信系统、数字信号处理、复杂工业过程控制、高级机器人以及局域网等方面得到大量应用[8]。这类单片机有NEC公司的MPD7800,MITSUBISHI公司的M337700,REVKWELL公司的R6500[9]。此次设计之所以选用52单片机是因为AT89C52比AT89C51多个定时器,而RAM大小也不一样,51的大小只有128,52的却有256。根据这些信息可以看出52其实是51的增强型,在定时器方面52也比51的定时器多了一个T2,在串行通信中可以设置更高的波特率,由此可见T2的功能实现上与其他的两个定时器也不同样,在ROM上52比51要多4K,中断也多2个,意味着看门狗也比51多出一个来,另外52在掉电与数据指针等方面也有一些改善[14]。而在外接晶振上C52可以拥有最高能达到33MHz,而C51的极限也只能达到24MHz。单片机有个最小应用系统,也就是单片机最小系统,这种系统是可以正常工作的,但由于构成此系统只用了最少的元器件,所以功能也相应的比较单一。我们考虑52单片机中的结构,可以看出最小系统正常是由单片机芯片、晶振电路、复位电路构成的。基于52单片机的最小系统的电路原理图,如图3-1所示。图3-1单片机最小系统复位电路介绍复位电路是由电容串联电阻构成的。复位电路原理图如图3-2所示。图3-2复位电路原理图电源通电后,就会在RST引脚上显示出高电平,而高电平的可持续时间是由电路的RC值来决定的。在设计实现功能时要适当组合RC的取值就可以保证复位的可靠性,因为单片机一般会在RST脚上持续两个机器周期以上的高电平时就会复位。本次设计中C取用的是22uf,R取10K。要想在RST脚上能生成的高电平多于2个机器周期,就直接将RC按照这个数值进行组合。在复位电路中复位信号是在系统供电时就会提供,而想要撤消复位信号,只需等到系统中的电源稳定了即可。为了在实现功能时电路的安全,在系统中电源稳定以后,等待撤消的复位信号必须要经过一个延时,这样的目的是为了防止在电源开关启动或关闭过程中引发的抖动而影响复位。复位电路复位的过程中有两种,一种是通电自动复位,另一种是按键手动复位,根据电路原理图可知,复位电路的复位信号的输入端是RST引脚,而且复位必须在高电平的情况下才有效。想要实现复位电路的功能,就是通过外接电容C1与外接电阻R8来实现。晶振电路介绍52单片机中的引脚*TAL1和的引脚*TAL2都是在片内一个反相放大器(高增益)中的,它的作用是用来组成稳定的自激振荡器,组成自激振荡器的电路是由有石英晶体的振荡器和微调电容进行外接,而能直接进入系统内部时钟电路的信号就是这个振荡器发出的脉冲信号。本次设计晶振电路中使用的是固定电容C5与C6,两个电容都是30pF。晶体振荡频率*围是1.2MHz~12MHz,一般情况下,选用振荡频率为12MHz的石英晶体。而要将信号变成单片机的时钟信号,只有在内部时钟发生器上将振荡脉冲信号通过二分频的操作才能实现。单片机工作状态下要想从先取指令,再进行译码,最后再微操做的过程能有序的进行,就必须通过时钟信号来控制,由此可知单片机在工作状态下提供基本时钟的电路就是时钟电路。生成时钟信号的方式可以分为两种,一种是内部时钟的方式,另一种是外部时钟的方式,本课题采用就是内部时钟方式。晶振电路就是在单片机内组成一个自激振荡器,而这个稳定的自激振荡器是将一个晶振和两个稳频电容外接到单片机的*ALT1与*LAT2两个引脚上构成的。晶振频率选择12MHz。晶振电路原理图如图3-3所示。图3-3晶振电路原理图3.3显示电路本设计显示部分是采用液晶显示器1602,单片机的P0口是一个地址/数据复用的双向I/O口,当使用P0口访问外部存储器和数据存储器时,P0口内部已有上拉电阻,当P0口作程序检验,输出指令字节时,必须外接上拉电阻。1602的控制信号RS、RW、E分别接到单片机的P2.0、P2.1、P2.2。本设计中1602液晶显示器可以实现多种显示功能,比如在开机过程中能够显示开机画面,提示开机;在功能选择上可以显示当前所选择的功能模块画面以及电子琴模式中可以显示在琴键上按下的键值。显示电路原理图如图3-4所示。图3-4显示电路原理图3.44*4矩阵键盘识别电路设计中经常使用的键盘按键分为好多种,比如有电容式,有导电式,还有机械式和薄膜式等,而将电路接通与断开就是这些键盘按键的基本功能,所以不管是什么种类的按键,都有这些基本的功能。而现今使用的键盘在功能应用方面主要有两种基本类型,一种是编码键盘,另一种是非编码键盘,编码键盘的键盘本身就有一个硬件电路,而这些硬件电路就能够实现接口处在按键被自动检测到时,实现一些比如去抖动和防串键等功能,而且这些与按键功能相对应的键码也会被送往CPU中。但是由于编码键盘的硬件电路复杂,所以其价格也相应的昂贵,就算其接口简单,用起来也挺方便,但是一般简单的设计中不会应用编码键盘,只有一些厂商生产的商品才会用到。而非编码键盘虽然仅提供简单的行列矩阵式的按键开关,但在实现功能过程中可以通过软件编程来实现识别按键,确定与输入键码,以及去抖动等一些功能。所以在设计中选用非编码键盘可以节省许多的成本。无论选什么按键,在键盘的接口处的四个基本功能是必不可少的,分别是:去抖动,防串键识别按键以及生成键码。本次设计中键盘用的是4*4矩阵键盘,它是将16个按键依据4行4列的方式进行排版,键盘在单片机中是通过JP50端口进行信号传输的。输出端是由行线连接到单片机的I/O口上,而输入端是由列线连接到I/O口上。若输出端都是高电平的话,就表示按键没有被按下。我们判断按键是否被按下,可以根据读取当前输入线的状态,因为当按键按下时,表示有低电平从行线输出来,而且会把输入线电平拉低,而这个状态就能判断按键按下了没。本次设计选用的键盘耗能低,并且由于它的外围电路元件少,扩充起来会更灵活。键盘电路原理图如图3-5所示。图3-5键盘电路原理图键盘扫描的时候,会先对其横坐标*进行操作,也就是扫描“行”,再对其纵坐标y进行操作,也就是扫描“列”。获取y的方法与获取*的方法相似,具体的操作可以参考附录的相关总程序。这样,按键的功能就可以根据获取的坐标,也就是(*,y)中*与y的值来实现。3.5声音电路本次设计使用的发声元件是扬声器,图3-6是的扬声器原理图。图3-6扬声器原理图声音电路是由2N3904NPN三极管和喇叭组成。实现功能时,直接从AT89C52中获取的高电平控制信号,然后再通过这个三极管把这个控制信号放大,再驱动扬声器放出声音。但因为扬声器所需驱动功率较小,驱动器件要求也较低,所以选用2N3904型号的NPN型三极管就可驱动扬声器发出声音,这样在设计中所用的成本也会相应的减少。在单片机中的P2口就是实现音乐的播放功能的接口。此声音电路实现的功能就是播放音乐,在电子琴模式下,按键弹奏出的声音也是由喇叭播放出来的。第4章软件设计一个系统想要正常运行不仅仅依靠硬件系统的支持,而且要依靠软件系统的支持。若是把这个系统比作人,则人的躯体就是硬件系统,而人的灵魂则是软件系统,只有将硬件系统和软件系统之间相互完美的配合才能组成一个能够“思考”和“判断”的整体系统[16]。在设计中依靠软件的可编程性,能精简硬件系统的组成,同时依靠着软件编程的灵活性,可以省略通过对硬件系统进行修改而实现对整个系统功能的修改。软件系统与硬件系统之间是密切相联的,软件系统的成立是建立在硬件系统完成的前提上,离开了硬件系统,软件将无法实现任何功能。软件设计的重要特性是具有一定的针对性,针对硬件系统的不同,就要编写不同的软件程序。要想系统拥有较快的工作效率,以及较高的可靠性,除了硬件系统的影响外,软件系统同样起到决定性的作用。4.1Proteus仿真软件与Keil编译介绍软件的编程需要依靠优良的平台,此次设计用的EDA操作系统就是一款由英国LCE公司所刊行的,而此操作系统中的Proteus操作平台就是一个优良的软件。这款操作系统不仅涵盖了别的EDA操作系统进行仿真的功效,对于单片机和它的外围电路同样可以仿真[15]。目前在国内Proteus软件推广刚起步,就已经受到单片机爱好者、从事单片机教学的教师、致力于研究单片机开发应用的科技工作者的青睐[18]。Proteus是世界上著名的EDA工具,从原理图的布图、代码的调试到单片机与外围电路协同仿真,以及一键切换到PCB的设计,真正实现了从概念到产品的完整设计[18]。这款系统的处理器模型功能强大,它支持8051、HC11和PIC系列中的10、12、16、18、24、30以及DsPIC33,另外还支持AVR、ARM、8086以及MSP430等,后来还支持Corte*与DSP等处理器,不仅如此,该设计平台还在不断增加其他的处理器模型[16]。该平台同样支持许多的编译器,比如IAR和Keil以及MATLAB等,以便用户只用同一个平台来进行各项操作。在软件编程的过程中,我们用汇编软件把源程序该成机器码,这样CPU才能对其执行命令,过去在MCS-51单片机上进行汇编,所使用的软件是A51,而现在单片机发展迅速,开发所用的语言大多是高级语言,现如今大多研究人员在单片机上用的是最流行的Keil软件,所用最近一段时间的厂商在制作仿真机的过程中都表示会对Keil软件给予全面的支持。如今使用的开发语言大部分是C语言,美国Keil公司出品一款开发系统就支持在单片机上运用C语言来开发,是51系列的KeilC51软件,C语言比汇编语言的优势要大的多,不管从功能上,结构上,还是可读性,可维护性上都明显,而且简单易懂。Keil软件具有完整性,拥有完整的开发方案,我们可以将一些功能和方案集中到一个集成开发环境(Vision)中,其中的功能方案有C编译器,有宏汇编,有连接器与库管理,还有一个功能强大的仿真调试器。在WINDOWS7和WIN*P等一些操作系统中就可以使用Keil软件。不管你用的开发语言是C语言还是汇编语言,它集成环境方便,软件仿真调试效率高,能使你的工作也会事半功倍。目前差不多有超出10万名微控制器开发人员在使用这种获得业界认同的解决方案[17]。4.2音调与节拍发声原理物理学中声波的频谱*围一般在几十赫兹到几千赫兹。单片机发声是通过扬声器发出的声音,其原理是在接口线处生成“高电平”或“低电平”,这样就可以制造一定频率的方波信号,而发出的声音不可能是单一的,所以要对“高低”电平的持续时间进行控制,这些都是通过一个延时程序来控制的,这样就可以改变音调,放出不同的声响[16]。音调和音符就是音乐能顺利播放的必要元素。先了解一下音调,对于音调,声音的频率与声音播放的强度就是其确定因素。纯音达到一定的强度时,频率的升降也直接会决定音调的升降;而纯音的频率中,低频纯音的音调会随着声音强度的增高而有所下降,相对的高频纯音的音调却会随着声音强度的增高而上升[17]。另外,音符的频率有所不同。现在来了解节拍,设计软件时想要控制音符的节拍,只需用定时器T0就可以了,而不同定时时间的产生只要有不同的初值输入就行了。但是初值是不能直接去改变的,所以想要控制节拍时间的长短,可以通过判断中断计数器的值来实现,并产生不同的节拍,这是因为T0的定时时间最多只有131ms,不过可以利用T0生成10ms的时间基准,再设置一个中断计数器就行了[19]。在播放音乐时产生的音符和控制节奏,都是通过查表的程序依次读取的,而这个表是由曲谱中全部的常数构成的,一组常数又是由一个音符中时间常数与相对应的节拍常数组成,这样就可以实现发声效果。特别的,音乐的结束由结束符(00H)表示,音乐的停顿效果则是由休止符(FFH)表示,还可以在相同的两个音符间或其他音符间插入时间单位频率不一样的音符,这样可以增强节奏感[20]。单片机播放出的音乐没有电子琴可以演奏不同音调声音的功能,因为放出的音乐基本是单音频率,没有一定幅度的谐波频率,这样,对单片机放音只要知道音调和节拍的知识就可以了。音符频率对照表如表4-1所示。表4-1:音符频率对照表音调的确定唱歌时会正常有DO、RE、MI、FA、SO、LA、SI这7个音调,音调名就是大写的英文字母C、D、E、F、G、A、B来表示的,唱成简谱的1、2、3、4、5、6、7,相当于汉字“哆唻咪发唆啦西”的读音,这是唱曲时声乐的发音,所以叫“音调”,即Tone[19]。而C、D、E、F、G、A、B这组音调名可以被我们拆为12个等份,可以用一个“半音”来描述一个等份,用“全音”来描述相邻两个音间隔的两个“半音”。我们通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上﹟号或者b号的叫变化音。这些变化音中﹟的作用是在基于原来的音上再升高半音,叫做升记号,b的作用是在基于原来的音再降低半音,叫做降记号。例如,高频率(1046hz做)只是中间做频率(523hz)翻了一番,阿尔托做频率(523hz)只是低音频率(266赫兹)的两倍;同样,高重复频率(1175hz)只是中间再频率(587hz)翻了一番,阿尔托重新频率(587hz)只是低音重复频率(294赫兹)的两倍。(1)以生成音频脉冲,以解决只是一个音频周期(1/频率),则这段除以2,其中一半是周期时间。利用定时器计使用这个半周期的时间,我们可以重复计时此半周期时间,在计时结束后再将I/O口进行反相,直接就能在I/O脚上获得这个频率的脉冲信号。(2)在计数器模式下工作,只要采用AT89C52单片机内部的定时器就能实现,然后通过获取TH0和TL0的数值的方法来产生不同频率。 特别的,音乐的结束由结束符(00H)表示,音乐的停顿效果则是由休止符(FFH)表示。通过查表可查到OOH与FFH,以此来实现功能。(3)如中音D0,频率为523HZ,其周期T=1/523=1912微秒,要想获得中音D0(523HZ),就将令计数器直接定时为1912/2=956,这样每当计数956次后,就将I/O口反相就可以了。C调各音符频率与计数值T的对照表如表4-2所示。表4-2:C调各音符频率与计数值T的对照表节拍的确定音乐是要有旋律的,所以音乐不仅仅只靠音调,节拍也是必不可少的,这样音乐才有旋律,音乐的快慢也可以控制。节拍的英文叫做Beat,通俗点来讲就是打拍子,比如在听音乐的时候会情不自禁的随其拍手。实际上1拍是多少秒,并无严格的规定,就和人的心跳差不多,人的心跳大多是每分钟72左右,但有些人会快一些,而有些人会慢一些,只要音乐听的动听就好。这样我们就可以用节拍来描述一首音乐可以持续多长时间,当遇到休止符时,发音会暂停。形成音乐的过程是将不同频率相互结合,再通过与节拍数相对应的延时过程就行了,通过理解音乐的一些基本常识,可以知道将很多不一样的音符结合可以产生音乐,而不同的音符还对应不一样的频率,这样生成不同频率的音频脉冲就可以形成音乐。单片机内可以很容易的就得到不一样频率的脉冲,形成有方波频率的信号通过定时器与计数器就能直接实现。所以,能播放出如此悦耳动听的声音,只要能搞明白音符和相对应的频率就行了。音乐编码一个音符中要有两个音节,其中音调占用一个字节,而另一个字节被节拍占用。在音调字节中,高四位意味着低中高音,0表示低音,1表示中音,2表示高音;音调就是其中的低四位。就像中音do就表示成0*11。节拍字节中,数值i的意思是延迟i个十六分音符。一首歌曲如果是4分音符组成,那一拍就是0*04。而0*04还可以来代表其的延时,就是在下边无横线,右边无横线和数字的情况。若底面有个横线就是用0*02表示;右边有个横则用0*08表示;右边有两横就用0*0c表示;而右边有三横则是用0*10表示;右下角有一点:加上当前延时的一半。因为每个歌曲的播放速率各不相同,单位就可以用曲速(单位——拍每分钟)表示。所以在音乐编码表中的第0和第1元素用来表示曲速。这样就能根据以上的规律在不同歌曲的简谱图上编写出单片机辨别的简谱表。4.3系统软件总体设计流程图主程序流程图开始开始扫描键盘扫描键盘否否否否读下一个音符否是关闭定时器P0口置0是是否停止播放?算出定时器初值识别按键是有矩阵键按下?算出音符的音调、节拍否是是否结束符?读取歌曲播放键按下?关闭T0T1否是按键是否释放?开启定时器,并赋初值,扬声器发声按节拍延迟根据音调给T0赋初值开启T0T1读下一个音符否是关闭定时器P0口置0是是否停止播放?算出定时器初值识别按键是有矩阵键按下?算出音符的音调、节拍否是是否结束符?读取歌曲播放键按下?关闭T0T1否是按键是否释放?开启定时器,并赋初值,扬声器发声按节拍延迟根据音调给T0赋初值开启T0T1图4-1主程序流程图歌曲播放流程图开始开始初始化设置音节起始位置和节拍间距读取音节,音符初始化设置音节起始位置和节拍间距读取音节,音符显示当前播放歌曲节拍结束音乐结束显示当前播放歌曲节拍结束音乐结束图4-2歌曲播放流程图按键扫描流程图由于定时器的初始值设置不一样,所以不同按键对应不同的功能。在设计过程中通常会设计一个按键扫描的子程序,这样其他的功能就可以更方便的调用这个程序。按键扫描子程序的流程图如图4-3所示。YYYNYN开始是否有键按下?开始是否有键按下?延时去抖NN有否键按下?延时去抖NN有否键按下?Y计算并保存键值按键是否释放?Y计算并保存键值按键是否释放?恢复键值返回恢复键值返回图4-3按键扫描流程图延时子程序流程图延时程序通常是经过一层或多层循环来实现的,整个系统延时的时间是程序执行的指令总条数和执行每条指令所用的时间进行相乘。因为该系统的晶振采用的是12M,因此执行每条指令所用时间为2us。程序执行流程图如图4-4所示。开始开始是否是否否否*>0?*>0?是是*--y>0"y--返回y>0"y--返回图4-4延时子程序流程图在函数初始化子程序设计中,在主函数内,给*些参数以及一些标记位赋个初值并编写成一个函数,也就是函数初始化程序,如此可以让程序能更加拥有层次,更明显易懂。由于整个程序要用到定时器0和定时器1,所以初始化程序主要是对定时器相关内容作说明。第5章总结个人觉得本次的单片机还是非常有意义的,我觉得带给我的好处可以总结为两点:第一,能让把实际的与理论的知识做一个结合,第二,让我们对单片机这一个应用学科,有了更深入的学习,了解单片机的各种操作,而不仅仅局限在书本上念字。这次的课程设计,我做的是一个电子琴音乐播放器,原本的心中理想作品是可以自由选择歌曲的音乐盒。但由于实际操作中碰到很多问题,影响到设计的进度,最终设计的要求改为,带音乐播放(2首),带按键弹琴。前期准备的时候搜集了很多东西,并分析了一些可以借鉴的文档,然后综合并总结了多个文档确定了我这次的设计方案。然后根据这些资料在Proteus软件上进行了绘制,并进行前期的仿真,之后开始硬件的焊装。一开始我对按键模块进行了选择。原先的方案是独立式按键,最后发现按键少,达不到要求,最终选择了4*4矩阵键盘。在做放大电路时我们选用的是NPN型三极管,因为觉得三极管的能力就已经能达到要求,不需要放大器。做扬声器的时候我选用了喇叭。差不多三天的时间焊接好硬件电路,并开始调试,首先编辑一个简单的方波信号来检测扬声器的好坏,经过多次调试和改件最终能工作,然后利用C语言编写了一个按键的发音,经过调试成功后,在开始编写多个按键的发音,最后我都把子程序写好,调试成功,然后组合成一个总程序,达到设计的要求。当然在组合的时候也出现过程序问题,因为我有的部分使用了同一个工作寄存器,还有定时器。在碰到问题的时候有时候一天都调不出来,但是最后反复检查分析错误原因,才解决了这些问题。这次的毕业设计对自己真的有很大的提高,以后工作有机会多多接触这方面的实践,积累相关的经验,从实际中学到书本上学不到的知识。致谢六月份的到来,代表新的毕业季的降临,也预示着我大学四年的学习生活走向尾声。当我回首眺望,看到自己一生最珍贵的时光能在大学校园之中,有着众多有共**趣爱好的朋友,实在是荣幸之极。在四年的时间里,我在学习上有了很大的进步,思想上得到较高的提升。通过我自己的努力,老师的指导以及同学与朋友的帮助,和家人的支持与鼓励,让我在大学期间获益良多。完成一篇好的论文是枯燥艰辛而又具有很大挑战的。但老师不厌其烦的指导、同学间的互相帮助以及家长的支持鼓励,让我有了坚持完成论文的动力。在此,我特别要感谢我的导师。老师一直都孜孜不倦的指导我,不管是开始论文选题,采集文献,还是中期硬件的制作,结构的布局,以及最后论文的确定和论文中内容格式,标点符号等,都为我提供了帮助。要是没有老师的不知疲倦的指导,我就不能够顺利完成论文。同时也感谢寝室的各位同学,在我遇到问题时帮我出谋划策,让我度过难关。最后要感谢一直给我理解与支持,鼓励与帮助的家人,有了他们的这些正能量,让我在做事情时更有动力,更有信心,让我所做的一切更加有意义。此次的论文由于时间的紧迫和自身专业水平的还有待提高,所以论文中肯定存在一些尚未发现的错误。恳请老师能多予指正,让我大学最后的阶段更加圆满,不留遗憾。在此学生感激致谢!参考文献[1]李玉梅.单片机原理的应用设计[M].国防工业,2009.[2]陈海宴.51单片机原理及应用[M].航空航天大学,2010.[3]高培先.提高实时系统数据采集质量的研究[J].**理工学院,2002.15(3):111—113.[4]杨美仙.单片机的发展及其应用[J].科技信息(学术研究),2007.6(35):65-79.[5]梁丽洁.基于单片机的简单数字采集系统的设计[J].**理工大学学报,2007.01(8):156-168.[6]罗卫星.单片机音乐播放器设计[J].科学之友,2010.11(4):137-139.[7]欧阳斌林,*立山,蒋文科.单片机原理及应用[M].:中国水利水电,2011.[8]王宜怀.12位A/D转换器TLC2543与51系列单片机接口技术[J].**丝绸工学院学报,1999.20(5):197-199.[9]何立民.从80C51F[10]柴钰.单片机原理及应用[M].**电子科技大学,2009.[11]田媛.单片机音乐播放器功能多样性的研究[J].**职业技术学院学报,2013.06(28):64-70.[12]远飞.基于单片机的音乐播放器的仿真与制作[J].电子元器件应用,2010.12(15):122-130.[13]DaniloPelusi.JournalofDiscreteMathematicalSciencesandCryptography[J].Applicationoffuzzylogictointegratedcircuits,2003.6(1):109-120.[14]YinFei,ZhangDongliang.InternationalJournalofDistributedSensorNetworks(IF0.727)[J].PerformanceAnalysisforLarge-ScaleParallelMicroscopicTrafficSimulationSystem,2009,5(1):422-461.[15]ReginaldB.Kogbara,Abir.Al-Tabbaa,JuliaA.Stegemann.JournalofEnvironmentalScienceandHealth,PartA(IF1.252)[J].Relatingmonolithicandgranularleachingfromcontaminatedsoiltreatedwithdifferentcementitiousbinders2013,48(12):1502-1515.[16]曹丽燕.基于单片机的音乐盒功能设计[J].信息与电脑(理论版),2010.04(15):156-177.[17]许红换.基于单片机AT89C52的数字音乐盒设计[J].电源技术应用,2013.07(15):167-189.[18]*磊.单片机原理及应用教学手段探索[J].电子世界,2013.11(21):56-78.[19]祝燎,何峰山.单片机AT89C51的设计与开发[J].河西学院学报.2010(25):86-106.[20]罗芬,赵新业,梁小流.多功能音乐演奏的设计[J].大众科技,2010.11(10):201-265.附录1:电路原理图附录2:元器件清单附录3:源程序*include<reg52.h>//包含头文件*include"1602.h"*defineuintunsignedint*defineucharunsignedcharsbitP1_0=P2^0; //蜂鸣器引脚sbitK2=P1^0; //按键2引脚(板子上左边三个中的中间一个)voidTime0_Init(); //定时器0初始化voidTime1_init(); //定时器1初始化ucharkeyscan(); //按键扫描函数unsignedcharCount; //count为音乐代码的指针ucharnum,temp,num1,key,i,j,STH0,STL0; //定义各种变量 voidPlay_music(unsignedchari); //播放音乐函数unsignedintcodetab[]={63628,63835,64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110};//1~7的频率表unsignedchar*ianshi1[16]="DianZiQin";unsignedchar*ianshi2[16]="YinYueHe";unsignedchar*ianshi3[16]="biyiSheJi";unsignedcharjishu;unsignedcharcodeSONG[]={ 0*26,0*20,0*20,0*20,0*20,0*20,0*26,0*10,0*20,0*10,0*20,0*80,0*26,0*20,0*30,0*20,0*30,0*20,0*39,0*10,0*30,0*10,0*30,0*80,0*26,0*20,0*20,0*20,0*20,0*20,0*1c,0*20,0*20,0*80,0*2b,0*20,0*26,0*20,0*20,0*20,0*2b,0*10,0*26,0*10,0*2b,0*80,0*26,0*20,0*30,0*20,0*30,0*20,0*39,0*10,0*26,0*10,0*26,0*60,0*40,0*10,0*39,0*10,0*26,0*20,0*30,0*20,0*30,0*20,0*39,0*10,0*26,0*10,0*26,0*80,0*26,0*20,0*2b,0*10,0*2b,0*10,0*2b,0*20,0*30,0*10,0*39,0*10,0*26,0*10,0*2b,0*10,0*2b,0*20,0*2b,0*40,0*40,0*20,0*20,0*10,0*20,0*10,0*2b,0*10,0*26,0*30,0*30,0*80,0*18,0*20,0*18,0*20,0*26,0*20,0*20,0*20,0*20,0*40,0*26,0*20,0*2b,0*20,0*30,0*20,0*30,0*20,0*1c,0*20,0*20,0*20,0*20,0*80,0*1c,0*20,0*1c,0*20,0*1c,0*20,0*30,0*20,0*30,0*60,0*39,0*10,0*30,0*10,0*20,0*20,0*2b,0*10,0*26,0*10,0*2b,0*10,0*26,0*10,0*26,0*10,0*2b,0*10,0*2b,0*80,0*18,0*20,0*18,0*20,0*26,0*20,0*20,0*20,0*20,0*60,0*26,0*10,0*2b,0*20,0*30,0*20,0*30,0*20,0*1c,0*20,0*20,0*20,0*20,0*80,0*26,0*20,0*30,0*10,0*30,0*10,0*30,0*20,0*39,0*20,0*26,0*10,0*2b,0*10,0*2b,0*20,0*2b,0*40,0*40,0*10,0*40,0*10,0*20,0*10,0*20,0*10,0*2b,0*10,0*26,0*30,0*30,0*80,0*C0,0*30,0*1C,0*10,0*20,0*40,0*1C,0*10,0*18,0*10,0*20,0*10,0*1C,0*10,0*18,0*40,0*1C,0*20,0*20,0*20,0*1C,0*20,0*18,0*20,0*20,0*80,0*FF,0*20,0*30,0*1C,0*10,0*18,0*20,0*15,0*20,0*1C,0*20,0*20,0*20,0*26,0*40,0*20,0*20,0*2B,0*20,0*26,0*20,0*20,0*20,0*30,0*80,0*FF,0*20,0*20,0*1C,0*10,0*18,0*10,0*20,0*20,0*26,0*20,0*2B,0*20,0*30,0*20,0*2B,0*40,0*20,0*20,0*1C,0*10,0*18,0*10,0*20,0*20,0*26,0*20,0*2B,0*20,0*30,0*20,0*2B,0*40,0*20,0*30,0*1C,0*10,0*18,0*20,0*15,0*20,0*1C,0*20,0*20,0*20,0*26,0*40,0*20,0*20,0*2B,0*20,0*26,0*20,0*20,0*20,0*30,0*80,0*20,0*30,0*1C,0*10,0*20,0*10,0*1C,0*10,0*20,0*20,0*26,0*20,0*2B,0*20,0*30,0*20,0*2B,0*40,0*20,0*15,0*1F,0*05,0*20,0*10,0*1C,0*10,0*20,0*20,0*26,0*20,0*2B,0*20,0*30,0*20,0*2B,0*40,0*20,0*30,0*1C,0*10,0*18,0*20,0*15,0*20,0*1C,0*20,0*20,0*20,0*26,0*40,0*20,0*20,0*2B,0*20,0*26,0*20,0*20,0*20,0*30,0*30,0*20,0*30,0*1C,0*10,0*18,0*40,0*1C,0*20,0*20,0*20,0*26,0*40,0*13,0*60,0*18,0*20,0*15,0*40,0*13,0*40,0*18,0*80,0*00};/*******************************延时函数************************************函数名:Delay_*Ms()作用:用于微量延时,在播放音乐是延时*****************************************************************************/voidDelay_*Ms(unsignedint*){unsignedinti,j;for(i=0;i<*;i++){for(j=0;j<2;j++);}}/*******************************延时函数************************************函数名:delay(uintz)作用:zms延时延时z毫秒*****************************************************************************/voiddelay(uintz){ uint*,y; for(*=z;*>0;*--) for(y=110;y>0;y--);}/********************************主函数********************************函数名:main()*******************************************************************/voidmain(){unsignedcharji; lcd_ini(); lcd_order(0*80); for(jishu=0;jishu<16;jishu++) lcd_data(*ianshi3[jishu]); while(K2==1); while(K2==0);while(1){ lcd_order(0*80); for(jishu=0;jishu<16;jishu++) lcd_data(*ianshi2[jishu]); Time0_Init(); while(1) { Play_music(0); Time1_init(); lcd_order(0*80); for(jishu=0;jishu<16;jishu++) lcd_data(*ianshi1[jishu]); while(1) { keyscan();//键盘扫描子程序 P1_0=1; if(K2==0) { while(K2==0); TR1=0; EA=0; ji=1;break; } } if(ji==1) { ji=0; lcd_order(0*80+0*40+6); lcd_data(''); lcd_data(''); break; } } }}voidTime0_Init(){TMOD=0*01;IE=0*82;EA=1;//开总中断ET0=1;//开定时器0中断TH0=0*DC;TL0=0*00;//11.0592MZ晶振,10ms}voidTime1_init(){ TMOD=0*10;//定时器0工作方式1 ET1=1;//开定时器0中断 EA=1;//开总中断}/*功能:歌曲播放子程序i为播放哪一段曲目*/voidPlay_music(unsignedchari){unsignedcharTemp1,Temp2,ll;unsignedintAddr;Count=0;//中断计数器清0Addr=i*217;while(1){Temp1=SONG[Addr++];if(Temp1==0*FF)//休止符{TR0=0;Delay_*Ms(80);}elseif(Temp1==0*00)//歌曲结束符{return;}else{Temp2=SONG[Addr++];TR0=1;while(1){P1_0=~P1_0;Delay_*Ms(Temp1);if(Temp2==Count){Count=0;break;} if(K2==0) { P1_0=1; while(K2==0); ll=1; break; }} if(ll==1) { ll=0; i=0; TR0=0; break; }}}}/****************************************键盘扫描**************************函数名:keyscan()作用:键盘扫描**********************************************************/ucharkeyscan(){ P3=0*fe;//第一行判断 temp=P3; temp=temp&0*f0;while(temp!=0*f0) { delay(5); temp=P3; temp=temp&0*f0; while(temp!=0*f0) { switch(temp) { case0*e0:num=1; break; case0*d0:num=2; break; case0*b0:num=3; break; case0*70:num=4; break; } lcd_order(0*80+0*40+6);lcd_data(0*30+num/10); lcd_data(0*30+num%10); P1_0=~P1_0; STH0=tab[num-1]/256; STL0=tab[num-1]%256;TR1=1; while(temp!=0*f0) { temp=P3; temp=temp&0*f0; }TR1=0; } } P3=0*fd;//第二行判断 temp=P3; temp=temp&0*f0; while(temp!=0*f0) { delay(5); temp=P3; temp=temp&0*f0; while(temp!=0*f0) { switch(temp) { case0*e0:num=5; break; case0*d0:num=6; break; case0*b0:num=7; break; case0*70:num=8; break; } lcd_order(0*80+0*40+6);lcd_data(0*30+num/10); lcd_data(0*30+num%10); P1_0=~P1_0; STH0=tab[num-1]/256;STL0=tab[num-1]%256;TR1=1; while(temp!=0*f0) { temp=P3; temp=temp&0*f0; } TR1=0; } } P3=0*fb;//第三行判断 temp=P3; temp=temp&0*f0; while(temp!=0*f0) { delay(5); temp=P3; temp=temp&0*f0; while(temp!=0*f0) { switch(temp) { case0*e0:num=9; break; case0*d0:num=10; break; case0*b0:num=11; break; case0*70:num=12; break;} lcd_order(0*80+0*40+6);lcd_data(0*30+num/10); lcd_data(0*30+num%10); P1_0=~P1_0; STH0=tab[num-1]/256; STL0=tab[num-1]%256;TR1=1; while(temp!=0*f0) { temp=P3; temp=temp&0*f0; } TR1=0; } } P3=0*f7;//第四行判断 temp=P3; temp=temp&0*f0; while(temp!=0*f0) { delay(5); temp=P3; temp=temp&0*f0; while(temp!=0*f0) { switch(temp) { case0*e0:num=13; break;case0*d0:num=14; break; case0*b0:num=15; break; case0*70:num=16; break; } lcd_order(0*80+0*40+6);lcd_data(0*30+num/10); lcd_data(0*30+num%10); P1_0=~P1_0; STH0=tab[num-1]/256; STL0=tab[num-1]%256;TR1=1; while(temp!=0*f0) { temp=P3; temp=temp&0*f0; } TR1=0; } }returnnum;}voidTime1_Int()interrupt3 //定时器1中断函数{ TH1=STH0; TL1=STL0; P1_0=~P1_0;}voidtime0()interrupt1 //定时器0中断函数{ TH0=0*DC; TL0=0*00; Count++;//长度加1}*include<reg52.h>typedefunsignedcharuint8;typedefunsignedintuint16;sbitRS=P2^5;//LCD1602的数据命令选择sbitRW=P2^6;sbitEN_LCD=P2^7;//LCD1602的使能信号voiddelays(uint16time);//延时函数(6us单位) voidlcd_ini(); //LCD1602的初始化voidlcd_order(uint8date); //向LCD1602的写1个指令voidlcd_data(uint8date); //向LCD1602的写1个指令void*ie1602(uint16daa);//写数据*include"1602.h"/**********************************************函数名:delay行参:time延时基数功能:用while延时***************
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 食品添加剂行业竞争策略-深度研究
- 第19课《登勃朗峰》教学设计 2023-2024学年统编版语文八年级下册
- 1 我们爱整洁 教学设计-2023-2024学年道德与法治一年级下册统编版
- 2025年郑州卫生健康职业学院单招职业技能考试题库必考题
- 2025年广东环境保护工程职业学院单招职业技能考试题库附答案
- 2025年湖南艺术职业学院单招职业倾向性测试题库附答案
- 2025年上海兴伟学院单招职业技能测试题库及答案1套
- 这是谁的叶(教学设计)2023-2024学年一年级上册科学教科版
- 人教版七年级历史与社会上册 3.3.2水上都市威尼斯教学设计
- 江西省九江市少年宫科学动力机械课程(教学设计) 拱桥
- 钳工实操评分表(凹凸配合)
- 铸造厂熔炼工部安全操作规程
- 人类进化史精品课件
- 鲁滨逊漂流记读后感PPT
- 总包单位向门窗单位移交门窗安装工程工作面交接单
- 设备供货安装方案(通用版)
- 【高中地理课件】2022-2023学年高中地理人教版(2019)选择性必修1 构造地貌的形成 航拍之旅课件
- 公开招聘社区居委专职工作人员考试笔试、面试题集及相关知识(11套试题含答案)
- 《植物生理学》课件第三章+植物的光合作用
- 中国药膳理论与实践-药膳基本理论和技能
- 华东师大版七年级初一数学下册全套试卷(单元、期中、期末)
评论
0/150
提交评论