




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
可存储式电子琴设计报告 班级: 机072-1班 姓名: 李英明 学号: 200723502113 目录1设计总说明 32、可存储式电子琴设计要求 32.1实现的基本功能 32.2系统执行时的现象 33、MCS-51单片机介绍 33.1 MCS-51单片机基本特性 33.2 MCS-51单片机的引脚功能 43.2.1时钟电路 43.2.2控制信号 53.2.3 I/O口 63.3 MCS-51定时/计数器工作原理 73.3.1 定时器原理 7 3.3.2 计数器原理 73.3.3 相关的控制寄存器 74、系统硬件设计 84.1单片机硬件系统设计原则 84.2硬件电路图 84.3各部分电路的详细说明 84.3.1 AT89C51电路 84.3.2 LCD液晶显示器电路 104.3.3 键盘电路 114.3.4 工作指示灯LED 134.3.5晶振电路 134.3.6 复位电路 144.3.7喇叭电路 145、系统软件设计 155.1 定时器发声原理 155.2详细程序说明 166、设计感想 337、参考资料 348、附录一 349附录二 351、设计总说明可存储式电子琴利用单片机定时器来产生固定频率的方波信号推动喇叭发出旋律,使用LCD显示器来显示音阶输入的相关消息,当按下键盘组相对按键,喇叭会发出相对音阶单音,共有两个8度音阶,所输入的单音会存入8051内而保存起来至多可以输入64个单音,可以把输入的单音一起演奏出来,有清除存储功能,再重新输入,演奏时可以按键来中断。本设计报告首先介绍的是可存储电子琴的设计要求,然后是设计的思路,继而讲的是系统的硬件设计,硬件中个元件的详细设计包括各元件的型号和原理;其中重点介绍了LCD液晶显示的使用方法;还有键盘的电路,及其工作的原理也讲的很详细。硬件讲完后,接着是软件的设计,包括如何确定个音阶的频率,各子程序功能的说明,最后是详细的程序;另外,我们还新增了演奏预存音乐的功能,在设计的最后有实现此功能的详细程序。下面让我们一起走进可存储电子琴的程序设计。2、可存储式电子琴设计要求2.1实现的基本功能本设计利用8051单片机的控制程序结合LCD设计一台数字式可存储式电子琴。 其基本功能为:(1)使用LCD显示器来显示输入的音阶;(2)所输入的单音会存入8051内而保存起来;(3)共有两个8度音阶;(4)至多可以输入64个单音,可以把输入的单音一起演奏出来;演奏时可以按键来中断;可以实时显示目前正在演奏的单音码。2.2系统执行时的现象接通电源后,工作指示灯D3会一直亮,D4会闪亮3次,按下KOK7和K10K15后,喇叭会发出相应的声音,LCD显示器的第一行会显示按键的次数,第二行会显示相应的音阶。同时也显示重新演奏和清除的提示信息。K8键为重新演奏键,按下后会将按进的音阶重新演奏一边,同时工作指示灯D4会闪亮3次,演奏的同时若按下K_INT键会停止演奏。K9键为清除键,按下后计数值会变为零,工作指示灯D4闪亮3次,从新开始计数。3、MCS-51单片机介绍 3.1 MCS-51单片机基本特性图3_1此设计中我们选用的是AT89C51单片机,如图3_1所示。MCS-51单片机主要功能特点如下:(1)8位CPU;片内128B RAM (2)片内4KBROM; 特殊功能寄存器区(3)2个优先级的5个中断源结构;4个8位并行I/O口(P0、P1、P2、P3)(4)2个16位定时/计数器;全双工串行口(5)布尔处理器;64KB 外部数据存储器地址空间(6)64KB 外部程序存储器地址空间;片内振荡器及时钟电路3.2 MCS-51单片机的引脚功能 AT89C51单片机采用40条引脚双列直插式器件,引脚除5V(VCC40脚)和电源地(VSS20引脚)外,按其功能主要由时钟电路、控制信号、I/O口三大部分组成,图3_1为8051的引脚图。3.2.1时钟电路时钟电路主要包括两个引脚XTAL1和XTAL2XTAL1(19脚)芯片内部振荡电路(单极反相放大器)输入端。XTAL2(18脚)芯片内部振荡电路(单极反相放大器)输出端。3.2.2控制信号 控制信号主要包括 RST/VPD 、ALE/、和/VPP1. RST/VPD (9脚)复位信号时钟电路工作后,在此引脚上出现两个机器周期的高电平,芯片内部进行初始复位,复位后片内寄存器状态如表3-1所示。表3-1 复位后内部寄存器状态 寄存器内容寄存器内容PC0000HTMOD 00HACC00HTCON00HB00HTH000HPSW00HTL000HSP07HTH100HDPTR0000HTL100HP0P30FFHSCON00HIP00000SBUF不定IE000000PCON000002. ALE/(30引脚)地址锁存信号当访问外部存储器时,P0口输出的低八位地址由ALE输出的控制信号锁存到片外地址锁存器,P0口输出地址低八位后,又能与片外地址/数据复用口,那么P0口上的信息究竟时地址还是数据完全又ALE来定义,ALE高电平期间,P0口上一般出现地址信息,在ALE下降沿是,将P0口上地址信息锁存到片外地址锁存器,在ALE低电平期间P0口上一般出现指令和数据信息。平时不访问片外存储器时,该端也以六分之一的时钟频率固定输出正脉冲。 因而亦可作系统其它芯片的时钟源。ALE可驱动8个TTL门。3. (29脚)片外程序存储器读选通低电平有效,8051访问片外程序存储器时,程序计数器PC通过P2口和P0口输出十六位指令地址,作为程序存储器读信号,输出负脉冲将相应存储单元的指令读出并送到P0口上,供8051执行。同样可驱动8个TTL门输入。4. /VPP(31脚)内部和外部程序存储器选择信号对于8051来说,内部有4K字节的程序存储器,当为高时,CPU访问程序存储器有两种情况:地址小于4K时访问内部程序存储器;地址大于4K时访问外部程序存储器。3.2.3 I/O口AT89C51单片机有4个双向8位I/O口P0P31. P0口(P0.0P0.7,3932脚)为三态双向口对8051来讲,P0既可作地址/数据总线使用,又可作通用I/O口使用。2. P1口(P1.0P1.7,18脚)准双向口P1口是一个有上拉电阻的准双向口。P1口的每一位口线能独立地用作输入线或输出线。作输出时:将“1”写入锁存器,使输出级的场效应管截止,输出线由内部上拉电阻提升为高电平,输出为“1”;将“0”写入锁存器,场效应管导通,输出线为低电平,即输出为“0”。作输入时:必须先将“1”写入锁存器,使场效应管截止。该口线6由内部上拉电阻提拉成高电平,同时也能被外部输入源拉成低电平,即当外部输入“1”时该口线为高电平,而输入“0”时,该口线为低电平。P1口作输入时,可被任何TTL电路和MOS电路所驱动,由于具有内部上拉电阻,也可以直接被集电极开路和漏极开路电路所驱动,不必外加上拉电阻。3. P2口(P2.1P2.7,2128脚)准双向口(1)当P2口作通用I/O使用时,是一个准双向口,此时转换开关MUX倒向左边,输出级与所存起接通,引脚可接I/O设备,其输入输出操作与P1口完全相同。(2) P2口作地址总线口使用:当系统中接由外部存储器时,P2口用于输出高八位地址A15A8。这是在CPU的控制下,转换开关MUX 倒向右边,接通内部地址总线,P2口的口线状态取决于片内输出的地址信息,这些信息来源于PCH、DPH 等。在外接程序存储器的系统中,由于访问外部存储器的操作连续不断,P2口不断送出地址高八位,例如在8031构成的系统中,P2口一般只作地址总线口使用,不再作I/O口直接连外部设备。表3-2 P3口第二功能定义口线第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0输入)P3.3(外部中断1输入)P3.4T0(外部计数器0触发输入)P3.5T1(外部计数器1触发输入)P3.6(外部数据存储器写选通)P3.7(外部数据存储器读选通) 4. P3口(P3.0P3.7,1017脚)双功能口(1)P3口作通用I/O口使用时,输出功能控制线为高电平,与非门的输出取决与锁存器的状态,此时锁存器Q端的状态与其引脚状态是一致的。在这种情况下,P3口的结构和操作与P1口相同。 (2)P3口作第二功能口使用,P3口的第二功能实际上就是系统具有控制功能的控制线。P3口的第二功能定义如表3-2所示1。3.3 MCS-51定时/计数器工作原理 3.3.1 定时器原理当设置为定时器工作方式时,计数输入信号来自内部振荡信号,在每个机器周期内定时器的计数器做一次“1”运算。因此定时器亦可视为计算机机器周期的计数器。而每个机器周期又等于12个振荡脉冲,故定时器的计数速率为振荡频率的(即12分频)。若单片机的晶振主频为12MHz,则计数周期为。3.3.2 计数器原理当设置为计数器工作方式时,计数输入信号来自外部引脚T0(P3.4)、T1(P3.5)上的计数脉冲,外部每输入一个脉冲,计数器TH0、TL0(或TH1、TL1)做一次“1”运算,完成一次计数操作。3.3.3 相关的控制寄存器(1)TMOD计时模式选择寄存器M1 M0 工作模式0 0 模式00 1 模式1 1 0 模式21 1 模式3表3-3 TMOD寄存器的B1、B0位的设置及其说明(2)IE: 中断启用寄存器可按位寻址,地址A8H,用来启用各种中断信号的产生,各个位说明如表3-4所示:表3-4 IE中断控制位B7 B6 B5 B4 B3 B2 B1 B0 EA ET2 ES ET1 EX1 ET0 EX0其中的有关符号说明如下:a. EA(IE.7): EA=0时,所有中断禁用(中断不产生);EA=1时,各中断的产生由个别的启用位决定。b. (IE.6): 保留。c. ET2(IE.5): 启用定时器2溢位的中断(8052用)。d. ES (IE.4) : 启用串行端口的中断(ES1启用,ES=0禁用)。e. ET1(IE.3): 启用定时器1中断。f. EX1(IE.2): 启用外部中断INT1的中断。g. ET0(IE.1): 启用定时器0中断。h. EX0(IE.0): 启用外部中断INT0的中断。4、系统硬件设计4.1单片机硬件系统设计原则一个单片机应用系统的硬件电路设计包含两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM、RAM、I/O、定时器/计数器、中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。二是系统的配置,即按照系统功能要求配置外围设备,如键盘、显示器、打印机、A/D、D/A转换器等,要设计合适的接口电路。4.2硬件电路图系统的硬件电路图如图4_1所示:由图可知,可存储式电子琴的电路分为以下几部分:(1) AT89C51电路(2) LCD液晶显示器电路(3) 键盘电路(4) 工作指示LED(5) 晶振电路(6) 复位电路(7) 喇叭电路4.3各部分电路的详细说明 4.3.1 AT89C51电路如图3_1所示,且详细说明已在第三章中详细解释,此处略过。4.3.2 LCD液晶显示器电路1.LCD液晶显示电路如图4_4所示,选用的型号为HD44780。 图4_42.引脚说明:其引脚功能说明如下:(1) D0D7 双向的数据总线,LCD数据读写方式可以分为8位及4位两种,以8位数据进行读写则D0D7皆有效,若以4位方式进行读写,则只用到D7D4.(2) RS 寄存器选择控制线,当RS=0时,并且做写入的动作时,可以写指令寄存器,若RS=1则用于读写数据寄存器。(3) R/W LCD读写控制线,R/W0时,LCD执行写入的动作,R/W1时则做读取的动作。(4) EN 启用控制线,高电平动作。(5) VCC 电源正端。(6) VO 亮度调整电压输入控制引脚,当输入0V时字符显示最亮。(7) GND 电源地3.HD44780的指令集HD44780的指令集如表4-1所示。表4-1 HD44780指令集指令名称控制信号指令代码功能RS R/W D0 D6 D5 D4 D3 D2 D1 D0清屏 0 00 0 0 0 0 0 0 1清除DDRAM和AC值设置显示方式 0 00 0 0 0 1 D C BD:显示开关,D=1,开,D=0,关;B:闪烁开关,B=1,开,B=0,关;C:光标开关,C=1,开,C=0关光标画面滚动 0 0 0 0 0 1 S/C R/C * *S/C=1为画平面一个字符移;S/C=0为光标平移一个字符移;R/L=1,为右移,R/L=0为左移设置工作方式(初始化方式) 0 00 0 1 DL N F * *Dl=1为8位数据接口,DL=0为四位数据接口,N=1为2行显示,N=0为1行显示;F=1为510点阵,F=0为57点阵设置CGRAM地址0 00 1 A5 A4 A3 A2 A1 A0A5A4A3A2A1A0=0CH3FH4.上拉电阻的选取 经查资料可知,一般上拉电阻的取值为110K,因此在此设计中选用的电阻为8个10K的普通电阻。4.3.3键盘电路图4_5本设计所用的键盘电路如图4_5所示,由16个按键及一个中断按键组成,使用AT89C51单片机P2口的8条I/O线做16个按键的键盘扫描,由P2.0P2.3送出扫描信号,而由P2.4P2.7读取按键数据返回码。,其扫描过程大致为:1.送出扫描信号1110以扫描第一列的4个按键,读取P2.4P2.7数据,判断该行是否有按键按下。2.送出扫描信号1101以扫描第二列的4个按键,读取P2.4P2.7数据,判断该行是否有键按下。3.送出扫描信号1011以扫描第三列的4个按键,读取P2.4P2.7数据,判断该行是否有按键按下。4.送出扫描信号0111以扫描第四列的4个按键,读取P2.4P2.7数据,判断该行是否有键按下若有被按下,则连接至被按下的该键,返回线状态为0,5.回到步骤(1)继续做按键扫描。以上的步骤连续地重复,若有按键被按下,就将该按键译码出来。扫描信号及读取按键数据返回码整理如表4-2所示 表4-2按键扫描按键数据输入码扫描输出信号所检测的按键P2.7 P2.6 P2.5 P2.4P2.3 P2.2 P2.1 P2.0 1 1 1 0 1 1 1 0K0键 1 1 0 11 1 1 0K1键 1 0 1 11 1 1 0K2键 0 1 1 11 1 1 0K3键1 1 1 0 1 1 0 1K4键1 1 0 1 1 1 0 1K5键1 0 1 1 1 1 0 1K6键0 1 1 11 1 0 1K7键1 1 1 0 1 0 1 1K8键1 1 0 1 1 0 1 1K9键1 0 1 1 1 0 1 1K10键0 1 1 1 1 0 1 1K11键1 1 1 0 0 1 1 1K12键1 1 0 1 0 1 1 1K13键1 0 1 1 0 1 1 1K14键0 1 1 1 0 1 1 1K15键4.3.4 工作指示灯LED图4_2图4_3此设计中有两个工作指示灯D1和D2,如图4_2和图4_3所示,其中D1接在电源插孔的阳极上,只要给系统供电,D1就会一直发光。选取D1的型号为FG112001 选取的原因是此处为一普通单色二极管,此型号的额定功率为30MW,最大电流为20mA,额定电流为5mA。电阻R2的大小为1K,经计算得电路中的电流大约为5mA,因此符合要求。 D2是接在了P3.7引脚上,通过控制P3.7引脚,就可以控制D2的亮灭。其中,D2的型号为FG112001,选取的原因是此处为一普通单色二极管,此型号的额定功率为30MW,最大电流为20mA,额定电流为5mA。电阻R9的大小为1K,经计算得电路中的电流大约为5mA,因此符合要求4.3.5晶振电路图4_7晶振电路如图4_7所示,其中取电容的型号为CL12,此类型号的功能属于通用型,大小参照单片机原理与应用通常取(3010)PF,此处取20PF,晶振的型号为HC-49/S。 4.3.6复位电路图4_8复位电路如图4_8所示,其中电容型号为CD03-LL,此型号的功能为开关电路,大小取22UF,电阻取1K,选取此值参考单片机原理与应用。4.3.7喇叭电路图4_6 本设计中喇叭电路如图4_6所示,引出的线接到定时器To的引脚上,控制定时器可以使喇叭发出声音,音阶由定时器的频率确定。喇叭选用的型号为 YMD12,直径129.5mm最大电流为25mA 工作额定电压为3.0V,在2.54.0v内正常工作。R6为上拉电阻,其阻值一般取110K,此处取10K。R5的阻值选为100,选取的依据是根据喇叭的最大电流和功率,大致求出其电阻值为120,若R5为100,则喇叭的电压大约为2.7V。满足工作的条件,故选用1005、系统软件设计5.1 定时器发声原理各个音符对应的频率值如表5-1所示: 简谱1234567频率5876596987848809871046117413181396156717601975 表5-1 频率表由频率值推得定时器计数初值,可由以下关系式求得: (:频率值) (:方波宽度,以表示,:定时器所计数的次数) (:计数初值低字节) (:计数初值高字节)经计算得到: f co TH TL523956226458785122913659758232106987162332078463723638805682388987506240610464782412117442524223131837924451396358244261567319246117602842474197525324835.2详细程序说明本设计发出旋律是利用单片机定时器来产生固定频率的方波信号推动喇叭,进而产生声音的。目前控制程序只在按键按下放开后才演奏单音,这样也避免了误操作,若同时按下两个键后,只有等所有的键都放开后才能发音。1.PLAY: 执行时可以确定发音的音阶,控制喇叭的开关。2.SOUND-ON: 启动定时器0开始计时。3.SOUND-OFF: 停止定时器0计时动作。4.LOAD-VALUEL: 根据按键码,以查表法根据音阶来确定定时器的计数初值。5.T0-INT: 定时器0计时中断做音乐演奏控制。6.SCAN: 键盘扫描程序,确定是哪个键被按下。7.GET-KEY: 调用键盘扫描,将按键转化为按键码。8.SO: 调用SOP,发出声音。9.SOP: 依据按键码发出单音。10. RUN: 主程序。11. RPLAY: 重新演奏输入进去的音阶。12.SET-LCD: 对LCD做初始化。13. CLR-LINE1: 清除LCD的第一行字符。 14.CLR-LINE2: 清除LCD的第二行字符。15. LCD-PRINT: 在LCD显示字符。16. WCOM: 以4位控制方式将命令写至LCD。17. LCDP1: 在LCD的第一行显示字符。 18.LCDP2: 在LCD的第一行显示数字。19.SHOW-DIG: 在LCD的第一行显示数字。20.SHOW-DIG2: 在LCD的第二行显示数字。具体程序如下:RS EQU P0.0 ; RS引脚由P0.0控制EN EQU P0.1 ; EN引脚由P0.1控制K_INT EQU P2.7 ; 中断键接P2.7引脚WLED EQU P3.7 ; P3.7控制工作指示灯D2SPK EQU P3.4 ; P3.4控制压电喇叭FKEY EQU 20H.0 ; 按键标志,有按键时FKEY=1MNO EQU 64 ;最大内存空间为64字节,30H6FHMEM EQU 30H ;MEN设定为内存起始地址L0 EQU 71H ; 定义变量用来记录计数初值低字节H1 EQU 72H ; 定义变量用来记录计数初值高字节BUF_KEY EQU 73H ; 按键数据缓冲区KEY_NO EQU 74H ; 用来存储按键编号NO EQU 75H ; 存储按键的个数CO EQU 76H ; 计数变量X EQU 77H ; LCD显示的相对地址;.ORG 00H LJMP BEGINORG 0BH ;0BH为定时器0中断地址LJMP T0_INT;-ORG 0026HBEGIN: LCALL LED_BL ;调用LED_B 子函数 ,D2闪动,表示程序开始执行 MOV TMOD,#00000000B ;设置TMOD,使定时器0工作模式为模式0 MOV IE,#10000010B ;启用定时器0中断产生 CLR EN ;LCD OFF LCALL SET_LCD ;LCD 初始化 LCALL SOUND_ON ;喇叭打开 MOV R4,#1 ;R4表示的是音阶 MOV R3,#1 ;R3表示的是拍数 LCALL PLAY ; 确定发音的音阶,控制喇叭的开关 MOV R4,#2 MOV R3,#1 LCALL PLAY MOV R4,#3 MOV R3,#1 LCALL PLAY LJMP RUN ;开始执行主程序 JMP $ PLAY: ; 确定发音的音阶,控制喇叭的开关 LCALL LOAD_VALUE ;载入定时器0计数初值 LCALL SOUND_ON ;喇叭打开,;*;DECIDE PLAY LENGH.PL1:MOV R5,#30 ;延时150ms LCALL DELAY ;调用延时子函数 DJNZ R3,PL1 ;喇叭打开,启动定时器0开始计时 ; PAUSE LCALL SOUND_OFF ;喇叭关闭没有声音,停止定时器0计时动作 MOV R5,#3 ;延时15ms LCALL DELAY RET;-SOUND_ON: ;喇叭打开 SETB TR0 ;启动定时器0开始计时 RET;-SOUND_OFF: ;喇叭关闭 CLR TR0 ;停止定时器0计时动作 RET;-LOAD_VALUE: MOV DPTR,#HI_LIST ;指向数据列表地址 MOV A,R4 MOVC A,A+DPTR MOV H1,A ;将计数初值高字节送给H1 MOV DPTR,#LO_LIST ;指向数据列表地址 MOV A,R4 MOVC A,A+DPTR MOV L0,A ;将计数初值低字节送给L0 RET;-T0_INT: ;定时器0中断服务程序,在T0有中断的时候,跳转执行此程序 MOV TL0,L0 ;将低字节送给TL0 MOV TH0,H1 ;将高字节送给TH1 CPL SPK ;P3.4位输出反向,形成周期方波,驱动喇叭发出声音 RETI ;中断程序执行结束,返回;-HI_LIST: ;音阶对应定时器0计数初值高字节数据列表 DB 0,226,229,232,233,236,238,240 DB 241,242,244,244,246,247,248LO_LIST: ;音阶对应定时器0计数器低字节数据列表 DB 0,4,13,10,20,3,8,6 DB 2,23,5,26,1,4,3;- DELAY: ;延迟子程序 MOV R6,#50D1: MOV R7,#50D2:DJNZ R7,D2 DJNZ R6,D1 DJNZ R5,DELAY RET;-LED_BL: ;工作指示灯D2闪烁3次 MOV R4,#4LE1: CPL WLED ;位反向,使灯的状态取反,实现闪烁 MOV R5,#10 LCALL DELAY DJNZ R4,LE1 RET;-TABLE_DIG: ;键盘按键编码表,通过查表,可以将按键转换为按键码 DB 00H,01H,02H,03H DB 04H,05H,06H,07H DB 08H,09H,0AH,0BH DB 0CH,0DH,0EH,0FH;-; R1:COUNT 1 ;控制循环计数的次数; R2:COUNT 2 ;控制循环计数的次数; R3:SCAN SIGNAL ;循环扫描输出信号; R4:COUNT KEY_NO ;按键计数编号;-SCAN: ;键盘扫描控制程序 MOV R3,#0FEH ;加载扫描输出信号初值11111110B MOV R4,#0 ;按键计数编号清楚为0 MOV R1,#4 ;循环1执行4次 CLR PSW.5 ;PSW.5=0 表示未按键 MOV A,R3 MOV P2,A ;由P2送出扫描输出信号 MOV R5,#1 ;延迟一会 LCALL DELAY MOV A,P2 ;读取P2数据以便判断是否有按键 ANL A,#0F0H ;取得高4位值 EX:1110XXXXMOV R2,#4 ;循环2执行4次,检查是否按键L2:JB ACC.4, N1 ;累加器A第4位若为1表示没按键 MOV KEY_NO,R4 ;加载按键编号 SETB PSW.5 ;设置按键标志位N1: ;若没有按键,则跳转至此继续执行扫描过程 INC R4 ;使按键编号加1 RR A ;累加器向右移动一位,以便检查下一位 DJNZ R2,L2 ;循环2判断是否继续执行 MOV A,R3 ;加载旧的扫描码 RL A ;累加器向左移动一位 MOV R3,A DJNZ R1,L1 ;循环1判断是否继续执行BACK: JNB PSW.5, NO_KEY ;设置是否按键,设置标志位FKEY的状态 SETB FKEY ;若有按键,则置FKEY=1 RETNO_KEY: CLR FKEY ;若没有按键则置FKEY=0 RET;-GET_KEY: ;等待按键并传回按键码 CLR FKEY ;清除按键标志为,置FKEY=0 LCALL SCAN ;执行按键扫描 JB FKEY,GE1 ;测试按键标志 LJMP GET_KEYGE1:LCALL SCAN ;执行按键扫描 JB FKEY,GE1 ;等待按键放开来 MOV A,KEY_NO MOV DPTR,#TABLE_DIG ;经过查表的方式找出按键码 MOVC A,A+DPTR MOV KEY_NO,A RET;-SO: ; 依据按键码发出单音 MOV R3,#1 LCALL PLAY ;调用子函数,确定发音的音阶,控制喇叭的开关 RET;-SOP: CJNE A,#0,A1 ;判断是不是K0键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#1 LCALL SO RETA1: CJNE A,#1,A2 ; 判断是不是K1键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#2 LCALL SO RETA2: CJNE A,#2,A3 ; 判断是不是K2键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#3 LCALL SO RETA3: CJNE A,#3,A4 ; 判断是不是K3键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#4 LCALL SO RETA4: CJNE A,#4,A5 ; 判断是不是K4键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#5 LCALL SO RETA5: CJNE A,#5,A6 ; 判断是不是K5键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#6 LCALL SO RETA6: CJNE A,#6,A7 ; 判断是不是K6键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#7 LCALL SO RET; NEXT HIGH TONE 1-7.A7: CJNE A,#07H,A8 ; 判断是不是K7键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#8 LCALL SO RETA8: CJNE A,#0AH,A9 ; 判断是不是K10键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#9 LCALL SO RETA9: CJNE A,#0BH,A10 ; 判断是不是K11键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#10 LCALL SO RETA10: CJNE A,#0CH,A11 ; 判断是不是K12键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#11 LCALL SO RETA11: CJNE A,#0DH,A12 ; 判断是不是K13键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#12 LCALL SO RETA12: CJNE A,#0EH,A13 ; 判断是不是K14键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#13 LCALL SO RETA13: CJNE A,#0FH,A14 ; 判断是不是K15键被按下,若按下继续执行,否则跳转后继续比较 MOV R4,#14 LCALL SO RETA14: ;若没有按键则返回程序继续执行 RET;-RUN: ;主程序 MOV NO,#0 ;将计数值初值设为0 MOV R0,#MEM ;初
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 复旦数学专业真题及答案
- 外墙防腐保温施工技术标准与规范方案
- 2025年甘肃招聘考试真题及答案
- 混凝土回收与再利用技术方案
- 广告牌制作合同4篇
- 碳捕集利用设备维护与保养方案
- 高级管理人才离职经济补偿及竞业限制协议
- 2025年幼儿教育史试题及答案
- 平凡的荣耀测试题及答案
- 离婚财产分割与债务承担详细协议书
- YYT 1244-2014 体外诊断试剂用纯化水
- 西方经济学导论全套课件
- “基础教育精品课”PPT课件模板
- DB32-T 4063-2021建筑工程施工质量鉴定标准-(高清现行)
- 通用顶管监理规划
- 3养殖水环境及控制(1)ppt课件
- 小学一年级新生学籍注册模版
- 金泽21世纪美术馆
- 竖井滑模施工组织设计
- 最新青岛版(六年制)四年级上册数学《 1.5 求近似数》PPT课件
- 城市夜景照明设计规范JGJ T 163-2008
评论
0/150
提交评论