单片机课程设计基于89C51的电子琴的设计.doc

上传人:laozhun 文档编号:4147673 上传时间:2023-04-07 格式:DOC 页数:23 大小:4.21MB
返回 下载 相关 举报
单片机课程设计基于89C51的电子琴的设计.doc_第1页
第1页 / 共23页
单片机课程设计基于89C51的电子琴的设计.doc_第2页
第2页 / 共23页
单片机课程设计基于89C51的电子琴的设计.doc_第3页
第3页 / 共23页
单片机课程设计基于89C51的电子琴的设计.doc_第4页
第4页 / 共23页
单片机课程设计基于89C51的电子琴的设计.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《单片机课程设计基于89C51的电子琴的设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计基于89C51的电子琴的设计.doc(23页珍藏版)》请在三一办公上搜索。

1、单片机系统课 程 设 计成绩评定表设计课题 : 基于89C51的电子琴的设计 学院名称 : 电气工程学院 专业班级 : 学生姓名 : 学 号 : 指导教师 : 设计地点 : 设计时间 : 指导教师意见:成绩: 签名: 年 月 日单片机系统课 程 设 计课程设计名称: 基于89C51的电子琴的设计 专 业 班 级 : 学 生 姓 名 : 学 号 : 指 导 教 师 : 课程设计地点: 课程设计时间: 单片机系统 课程设计任务书学生姓名专业班级学号题 目课题性质工程设计课题来源自拟指导教师李攀峰主要内容(参数)1、利用89C51单片机设计一个简单的具有演奏功能的电子琴;2、通过LED数码管显示音阶

2、的高低;3、通过4*4按键演奏出从低So到高DO等16个音,从而可以用来弹奏喜欢的乐曲。任务要求(进度)第1-2天:熟悉课程设计任务及要求,查阅技术资料,确定设计方案。第3-4天:按照确定的方案设计单元电路。要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。第5-6天:软件设计,编写程序。第7-8天:实验室调试。第9-10天:撰写课程设计报告。要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅合理。主要参考资料1 张迎新单片微型计算机原理、应用及接口技术(第2版)M北京:国防工业出版社,20042伟福LAB6000系列单片机仿真实验系统使用说明书3

3、 阎石数字电路技术基础(第五版)北京:高等教育出版社,2006审查意见系(教研室)主任签字: 年 月 日 目 录1.绪论21.1电子琴概述21.2设计思想及基本功能32.总体方案设计32.1方案设计32.2方案设计要求32.3电子琴系统的组成42.4系统框图43.硬件电路设计53.1单片机最小系统模块设计53.1.1AT89C51单片机53.1.2 单片机最小系统模块硬件设计93.2按键控制模块设计103.3音频输出模块设计103.3.1LM386音频放大器103.3.2 音频输出模块硬件接线设计113.4 LED数码管显示模块设计114.系统软件设计124.1 软件设计思想124.2音乐知识

4、以及播放原理124.3软件设计流程图145.总结16参考文献:17附录18附录一 系统原理图18附录二 程序代码191.绪论 1.1电子琴概述 随着社会的发展进步,音乐是人们生活中不可或缺的元素,音乐可以使人放松心情,陶冶情操,要演奏出好的音乐需要好的乐器,而且伴随着电子技术的快速发展,电子技术正在逐渐改善着人们的学习、生活、工作。基于当前市场上的玩具市场需求量大,其中电子琴就是一个很好的应用方面。单片机技术使我们可以利用软硬件实现电子琴的功能,从而实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等,并且可以进行一定的功能扩展。鉴于传统电子琴可以用键盘上的“k0”到“k16”键演奏从

5、低So到高DO等16个音,从而可以用来弹奏喜欢的乐曲。电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器,它在现代音乐中扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,他已经融入了让人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。以单片机为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。1.2设计思想及基本功能本设计采用51系列单片机AT89C51为主控制器,附有一个4*4按键矩阵键盘、LED数码显示管和扬声器,系统完成显示输入信息、播放相应音符等基本功能。利用单片机产生不同

6、频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。按下矩阵键盘中的按键会使数码管显示当前按键,扬声器播放对应的音符。鉴于传统电子琴可以用键盘上的“k0”到“k16”键演奏从低So到高DO等16个音,从而可以用来弹奏喜欢的乐曲。本设计可实现的功能为:通过4*4矩阵键盘的按键,当按下其中某一个按键时,扬声器可发出对应的音阶,并且LED数码管可以显示出当前的音阶大小,从而可以弹奏出美妙的乐曲。2.总体方案设计2.1方案设计方案一:用可控硅制作电子琴。将220V交流电经变压器降压,再经过整流、滤波,获得+13.5V直流电压。将单向可控硅SCR和电阻、电容组成驰张振荡器电路。但该设计方案制作成本高

7、且复杂。方案二:采用AT89S51单片机进行控制,由于其性价比高,完全满足了本设计智能化的要求,它的内部程序存储空间为4K,完全满足了本设计的需要,并且使用方便,抗干扰性能高。鉴于上述两个方案的优略比较和分析,本设计采用第二种方案。2.2方案设计要求关于电子琴的设计,具体要求如下:1. 音阶高低的处理,利用定时器来控制频率,而每个音符的符号只是存在我自己定义的要求达到电子琴的基本功能,可以演奏出简单的乐曲。2. 用键盘做出电子琴的按键,每一个键代表一个音符。3. 各音符按一定的顺序排列,必须符合电子琴的按键排列顺序。2.3电子琴系统的组成单片机因体积小、功能强、价格低廉而得到广泛的应用。通过在

8、市面上的多种单片机的比较,AT89C51在性能上基本符合本系统的要求,并且价格比较便宜,而且对我们来说比较熟悉,所以采用该单片机。本设计是以AT89C51为核心控件,外部扩展一组矩阵键盘,接一个发光二极管来指示电子琴的工作状态,加一个LED数码管显示当前所按的音阶。本系统分为两个部分:一个是音频放大器,另一个就是电子琴的键盘。音乐播放部分:乐音实际上是有固定的周期信号,本系统采用AT89C51的两个定时器(T0,T1)控制,在P1.0脚上输出方波周期信号,产生乐音,通过矩阵键盘按键产生不同的音符,由此操作人员可以随心所欲的弹奏自己所喜爱的乐曲。由于一首音乐是由许多不同的音阶组成的,而每个音阶对

9、应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0(或T1)来产生这样的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。乐曲中,每一个音符对应着确定的频率,我们将每一个音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏。2.4系统框图 该系统通过电子琴按键随意键入所要表达的音符,作为电平送给主体电路,中央处理器通过识别,解码输出音符,在扬声器中发出有效的声音,通过这样可以不断的弹奏音

10、乐。本设计主要模块由四个部分组成:按键模块、主控模块、音频模块、LED显示模块。如图2-1所示:图2-1系统框图 图2-1为此次设计中的电子琴的硬件结构图,我们运用单片机的最小系统,用P3口的高四位和P3口的低四位座4*4矩阵式键盘的接口,用P0口作数码管的接口,用P1.0作信号输出口。整个系统分为四个模块,AT89C51单片机作为核心控制模块,矩阵键盘式输入模块,音频放大器和数码管显示是输出模块。3.硬件电路设计硬件电路包括单片机最小系统、按键控制电路、音频输出和数码管显示电路四大模块。3.1单片机最小系统模块设计 3.1.1AT89C51单片机 AT89C51是一个低功耗高性能CMOS 8

11、位单片机片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器器件采用ATMEL公司的高密度、非易失性存储技术制造兼容标准MCS-51指令系统及80C51引脚结构芯片内集成了通用8位中央处理器和ISP Flash存储单元功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89C51具有如下特点:40个引脚(引脚图如图3-1所示),4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器RAM,32个外部双向输入/输出I/O口,5个中断优先级2层中断嵌套中断,

12、2个16位可编程定时计数器,2个全双工串行通信口,片内时钟振荡器。此外AT89C51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下CPU暂停工作而RAM定时计数器串行口外中断系统可继续工作掉电模式冻结振荡器而保存RAM的数据停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式以适应不同产品的需求。 其主要特性如下: 与MCS-51 兼容 4K字节可编程FLASH存储器 寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz-24MHz 三级程序存储器锁定 1288位内部RAM 32可编程I/O线 两个16位定时器/

13、计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 图3-1AT89C51引脚排列图 VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下

14、拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P

15、3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如表3-1所示:表3-1 P3口管脚特殊功能P3口管脚特殊功能P3.0 RXD串行输入口P3.1 TXD串行输出口P3.2 /INT0外部中断0P3.3 /INT1外部中断1P3.4 T0记时器0外部输入P3.5 T1记时器1外部输入P3.6 /WR外部数据存储器写选通P3.7 /RD外部数据存储器读选通P3口同时为闪烁编程和编程校验

16、接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间。此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时 ALE只有在执行MOVXMOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /P

17、SEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET,当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向

18、放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。3.1.2 单片机最小系统模块硬件设计 单片机必须在时钟的驱动下才能工作。在单片机内部有一个时钟振荡电路只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元决定单片机的工作速度。外部振荡源电路一般选用石英晶体振荡器,此电路在加点大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。 如图3-2时钟电路所示

19、,电路中两个电容C1,C2用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。C1,C2的典型值为30PF。 单片机在工作时,由内部振荡器产生的周期或由外直接输入的送至内部控制逻辑单元的时钟信号的周期,称为时钟周期。其大小是时钟信号频率的倒数,通常用fosc表示。如时钟频率为12MHz即fosc12MHz则时钟周期为1/12s。图3-2 单片机时钟电路 3.2按键控制模块设计 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P3口)就可以构成4*4=16个按键,比之

20、直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。 矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,图3-3中,行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低。这样,通过读入输入线的状态就可得知是否有键按下了。图3-3 矩阵键盘连线设计3.3音频输出模块设计3.3.1LM386音频放大器LM386是美国国家半导体公

21、司生产的音频功率放大器主要应用于低电压消费类产品。LM386是一种音频集成功放具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点广泛应用于录音机和收音机之中。LM386特性如下: 静态功耗低,约为4mA,可用于电池供电。 工作电压范围宽,4V-12V或5V-18V。外围元件少。 电压增益可调,20-200。 低失真度。 3.3.2 音频输出模块硬件接线设计音频放大器的接线比较简单,具体接线如图3-4所示,后接扬声器即可。图3-4 音频放大电路接线图3.4 LED数码管显示模块设计 数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,多

22、一个小数点显示,按能显示多少个“8”可分为1位、2位、4位等等数码管,按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。 在本设计中,由于只需要显示音阶对应的数字,所以我们选用7段数码管。7段

23、数码管如图3-5所示:图3-5 LED数码管显示电路图4.系统软件设计4.1 软件设计思想 本系统主要采用AT89C51单片机为核心,与键盘、扬声器等模块组成核心主控制模板,利用定时器可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后可以发出不同的音调。操作的时候,通过不同的按键发出不同的音调从而实现编曲。 系统的软件系统主要可分为主程序、定时计数中断程序、时间调整或定闹设置程序三大模块。在程序设计过程中加强了部分软件抗干扰措施. 4.2音乐知识以及播放原理 一首音乐是许多不懂的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,

24、当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。 若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时计时半周期时间,每当计时终止后就将P1.0反相然后重复计时再反相。就可以在P1.0引脚上得到此频率的脉冲。 利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912s,因此只要令计数器计时956s/1s=956,每计数956

25、次时将I/O反相,就可得到中音DO(523Hz)。 计数脉冲值与频率的关系式(如式4-1所示)是: N=fi2fr 4-1 式中:N表示计数值; fi表示机器频率(晶体振荡器为12MHz时,其频率为1MHz); fr表示想要产生的频率。 其计数初值T的求法如下(如式4-2): T=65536-N=65536-fi2fr 4-2 例如:设K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。 T=65536-N=65536-fi2fr=65536-10000002fr=65536-500000/fr 即:低音DO的T=65536-50

26、0000/262=63627 中音DO的T=65536-500000/523=64580 高音DO的T=65536-500000/1046=65059 本单片机采用的是12MHZ晶振,高中低音符与计数T0相关的计数值如表4-1所示: 表4.1 高低音符与单片机计数T0相关计数值表音符频率(HZ)简谱码(T值)音符频率(HZ)简谱码(T值)低1 DO26263628# 4 FA74064860#1 DO#27763731中 5 SO78464898低2 RE29463835# 5 SO#83164934#2 RE#31163928中 6LA88064968低3 M33064021# 693264

27、994低4 FA34964103中 7 SI98865030#4 FA37064185高 1 DO104665058低5 SO39264260# 1 DO#110965085#5 SO#41564331高 2 RE117565110低6 LA44064400# 2 RE#124565134#646664463高 3 M131865157低7 SI49464524高 4 FA139765178中 1 DO52364580# 4 FA#148065198#1 DO#55464633高 5 SO156865217中 2 RE58764684# 5 SO#166165235#2 RE#62264732

28、高6LA176065252中 3 M65964777# 6186565268中 4 FA69864820高 7SI196764283 音乐的音拍,以一个节拍为单位(C调),如表4-2所示:表4-2 曲调值表曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms 对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。 琴键处理程序,根据检测到得按键值,查询音律表,给计时器赋值,发出相应频率的声音。对音调的控制,根据不同的按键,对定时器T1送入不同的初值,调节T1的溢出时间,这样就可以输出不同音调频率的方波,

29、不同音调下各个音阶的定时器,可以用T0用来产生音符频率,T1用来产生音拍。4.3软件设计流程图 主程序流程图和T0中断服务流程图如图4-1所示: 图4-1整体程序处理流程图 音乐发声程序流程如图4-2所示 :图4-2 音乐发声流程图 键盘扫描程序流程如图4-3所示: 1. 44矩阵键盘识别处理,每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。 2.键盘处理程序的任务是,确定有无键按下,判断哪一个键按下,键的功能

30、是什么,还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。图4-3 键盘扫描流程图5.总结 本设计是利用AT89C51单片机设计的电子琴,硬件电路简单,如果对象是更为复杂的电子琴系统,其实际原理与方法与本设计基本相同。另外,实例所设计的的计算器是用LED数码管显示的,当然也可以用其他的器件显示,如LCD液晶显示屏,这样就可以显示出更加丰富的字符,在此基础上,还可以编写更加完善的程序来实现更多的功能。 经过这次的课程设计,不仅巩固了书本上所学的知识,而且对单片机

31、有了更进一步的了解。通过查阅资料,不断地修改程序,在老师和同学的帮助下解决了一个又一个困难,最终得以设计成功。这次课程设计,扩充给了我的知识面,让我学到了更多的有关于单片机的知识,为了将来的工作打下了坚实的基础。参考文献:1 张迎新单片微型计算机原理、应用及接口技术(第2版)M北京:国防工业出版社,20042伟福LAB6000系列单片机仿真实验系统使用说明书3 阎石数字电路技术基础(第五版)北京:高等教育出版社,20064夏路易,石宗义。电路原理图与电路板设计教程Protel 99se.北京:北京希望电子出版社,20025康华光。模拟电路技术基础(第五版)。北京:高等教育出版社,2005附录附

32、录一 系统原理图附录二 程序代码 ORG 0000H ;初始位置00H JMP STARET ;跳到主程序 ORG 000BH ;定时器0中断起始单元 JMP TIME0 ;跳到中断程序 STARET: MOV TMOD,#00000001B;设定工作方式为1 MOV IE, #10000010B ;开中断允许 SETB TR0L1: CALL KEY ;调用键盘扫描程序 CLR EA ;关中断总允许 JB F0,L1 ;查询键盘按下标志 MOV A,22H ;将键盘码送单元A MOV DPTR,#TABLE1 MOVC A,A+DPTR ;将查询的数码管显示码送A MOV P0,A ;将数码

33、管显示码送数码管 MOV A,22H ;将键盘码送单元A RL A ;数据倍乘 MOV DPTR,#TABLE MOVC A,A+DPTR;将声音编码送A MOV TH0,A;将声音编码高位给TH0 MOV 21H,A;送声音编码给21H单元储存 MOV A,22H RL A INC A MOVC A,A+DPTR;取声音编码地位给A MOV TL0,A;将声音编码送TL0 MOV 20H,A;将声音编码低位送20H储存L2: CALL KEY;调用键盘扫描程序 SETB EA;开断总允许 JB F0,L1;查询键盘按下标志 JMP L2 ;没有转L2循环/*键盘扫描程序*/KEY: SETB

34、 F0 ;键盘按下标志至1 MOV R3,#0F7H;R3送扫描码 MOV R1,#00H;R1初始为0L3: MOV A,R3;将扫描码送A MOV P2,A将扫描码送P2扫描 MOV A,P2;读取键盘状态 SETB C;进位至1 MOV R5,#04H;将4给R5单元,用于行扫描L4: RLC A JNC KEYIN;有键按下跳到KEYIN INC R1;无键按下R1加1 DJNZ R5,L4;判断一行有没有判断完毕 MOV A,R3;扫描完毕后,再次送扫描码给A SETB C;进位置1 RRC A;对A进行右移 MOV R3 ,A ;送新的扫描码给R3 JC L3 ;判断是否扫描完毕,

35、是则循环 RET;返回主程序KEYIN: MOV 22H,R1;将键盘码送22H储存 CLR F0;对键盘按下标志清0 RET;返回主程序TIME0: PUSH ACC;将A压入堆栈 PUSH PSW;将PSW压入堆栈 MOV TL0,20H;将声音编码低位送TL0 MOV TH0,21H;将声音编码高位送TH0 CPL P1.0;对输出口声音信号取反 POP PSW;.从堆栈还原PSW POP ACC;从堆栈还原ACC RETI;中断返回/*音符编码*/TABLE: DW 64021,64103,64260,64400 DW 64524,64580,64684,64777 DW 64820,64898,64968,65030 DW 65058,65110,65157,65178/*共阳极数码编码*/TABLE1: DB 0CH,98H,48H,40H,1EH DB 9FH,25H,0DH,99H,49H,41H,1FH DB 11H,01H,63H,03H END

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号