电子音乐播放器课程设计_第1页
电子音乐播放器课程设计_第2页
电子音乐播放器课程设计_第3页
电子音乐播放器课程设计_第4页
电子音乐播放器课程设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一.电子音乐播放器一、设计的任务和目的题目目的:学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。设计要求:利用8253作为音阶频率发生器,应先对一段音乐进行编码后存入音符表,并建立好音阶表(只建立一个8度即可,音阶表见附录),音符长度不能少于60个,连续播放3遍后停止。二8253芯片介绍1芯片介绍8253可编程定时/计数器是Intel公司生产的通用外围芯片之一,有3个独立的十六位计数器,技术频率范围为0〜2MHZ,它所有的技术方式和操作方式都通过编程控制。8253的功能用途是:(2)可编程频率发生器(3)事件计数器(4)二进倍频器(5)实时时钟(6)数字单稳(7)复杂的电机控制器(2)可编程频率发生器(3)事件计数器(4)二进倍频器(5)实时时钟(6)数字单稳(7)复杂的电机控制器8253有六种工作方式:(1)方式0:计数结束中断(2)方式1:可编程频率发生器(3)方式2:频率发生器(4)方式3:方波频率发生器(5)方式4:软件触发的选通信号(1)延时中断I1ZD6I2LLD2DIDO234F67HALOLI122423228小小里A"I&15141:?JillCSiJi\0ri.1/GATE2GATEL8253引脚图D7〜D0——八条双向数据线;WR(低电平有效)——写输入信号;RD(低电平有效)一一读输入信号;CS(低电平有效)一一片选输入信号;A0、A1片内寄存器地址输入信号;CLK——计数输入,用于输入定时基准脉冲或计数脉冲;OUT——输出信号,以相应的电平指示计数的完成,或输出脉冲波形;GATE——选通输入(门控输入),用于启动或禁止计数器的操作,以使计数器和计测对象同步。2控制字113瞬0DI方式1'I*102一00计数器锁存命令>11方式3—01只读与底8位禹&位自动宣。100方式4—io只读/写高8位低&位自此直0101方式5L11先写低8位,后写造8位三.程序框图通过给8253定时器装入不同的计数值,可以使其输出不同频率的波形。当与门打开后,经过放大器放大的作用,便可驱动扬声器发出不同频率的音调,要使该音调的声音持续一段时间,只要插入一段延时程序,之后再将扬声器(关闭与门)即可。诞时血略2讶耸机计波法教底计捶麝产生该契率信号,曰送至压声器发出声音计翳祖it餐改教送计茵8>产生逢昼率信号,?送至扬声器发出声言・者乐描放干程序流程图»曲L各音符频率设宣曲1各音枷间设宣曲三答音?W率设首曲二各音漩词设置调用mtiw子程序-鸣用叩仲2子程序读甲HJ]畔拍由监读取同间节拍EV圄用呼e■止仪孑程序调用娘前曰孑程序诿取频率tf读琅费率开始流程图四、电路连接五、程序设计SSEGSEGMENTPARASTACK'stack'dw100hdup(0);Resizethestackbychangingthenumber'100'SSEGENDSDSEGSEGMENTINFO1DB0DH,0AH,'',0DH,0AH,'THEREARE3SONGS:',0DH,0AH,0DH,0AH,'$'INFO2DB'1.HAPPYBIRTHDAY',0DH,0AH,'$'INFO3DB'2.SHEEP',0DH,0AH,'$'INFO4DB'3.RIVER',0DH,0AH,'$'INFO5DB'0.EXIT',0DH,0AH,'$'INFO6DB'YOUHAVECHOSEN:$'INFO7DB'THANKYOUFORYOURUSE',0DH,0AH,'$'INFO8DB'',0DH,0AH,'PRESSTHEKEYTOSELECTSONG!',0DH,0AH,'$'INFO9DB0DH,0AH,'',0DH,0AH,'|INVALIDSELECTION|',0DH,0AH,'',0DH,0AH,'$'FREG1DW2dup(262),294,262,349,262,262,294,262,392,249,262,262,523,440,349;曲1的频率DW330,294,466,266,440,349,392,349,-1TIME1DW1,1,2,2,2,4,1,1,2,2,2,4,1,1,2,2,2,2,4,1,1,2,2,2,4;曲1的时间FREG2DW330,294,262,294,3DUP(330);曲2的频率DW3DUP(294),330,392,392DW330,294,262,294,4DUP(330)DW294,294,330,294,262,-1TIME2DW6DUP(1),2;曲2的时间DW2DUP(1,1,2)DW12DUP(1),4FREG3DW330,392,330,294,330,392,330,294,330,330,392,330,294,262,294,330,392,294曲3的频率DW262,262,220,196,220,262,294,332,262,-1TIME3DW3DUP(2),1,1,2,1,1,4;曲3的时间DW2DUP(2,2,1,1),4DW3DUP(2,1,1,1),4DSEGENDSCSEGSEGMENTassumecs:CSEG,ds:DSEG,es:DSEG,ss:SSEGINITPROC;初始化程序movax,dsegmovds,axmoves,axINITENDPMAINPROC;程序入口callINITRE:MOVDX,28BH;关闭扬声器MOVAL,89HOUTDX,ALMOVDX,28AHINAL,DXMOVDX,288HOUTDX,ALLEADX,INFO1;输出说明信息MOVAH,09HINT21HLEADX,INFO2INT21HLEADX,INFO3;;读取按键;根据不同的按键播放不同的曲INT21HLEADX,INFO4INT21HLEADX,INFO5INT21HLEADX,INFO8INT21HMOVAH,01HINT21HCMPAL,'1'子JEMUSIC1CMPAL,'2'JEMUSIC2CMPAL,'3'JEMUSIC3CMPAL,'0'JEEXITLEADX,INFO9MOVAH,09HINT21HJMPREMUSIC1:MOVSI,OFFSETFREG1MOVBP,OFFSETTIME1CALLPLAYJMPREMUSIC2:MOVSI,OFFSETFREG2MOVBP,OFFSETTIME2CALLPLAYJMPREMUSIC3:MOVSI,OFFSETFREG3MOVBP,OFFSETTIME3CALLPLAYJMPREEXIT:MOVDX,28BHMOVAL,89HOUTDX,AL;无效选择,输出错误提示;指向曲1的表;指向曲2的表;指向曲3的表;关闭扬声器MOVDX,28AHINAL,DXMOVDX,288H;输出欢迎使用信息,增加界面友好度OUT;输出欢迎使用信息,增加界面友好度LEADX,INFO7MOVAH,09HINT21Hmovax,4c00h;Theendoftheprogram,returntothesystemint21h;PLAY子程序,功能上面介绍过;取频率;看是否有效;;PLAY子程序,功能上面介绍过;取频率;看是否有效;无效就退出;读取时间;保存时间CMPBX,-1JEL0MOVCX,DS:[BP]MOVDL,CLADDDL,30HMOVAH,02HINT21HMOVDX,0FH0F4240HMOVAX,4240HDIVBXMOVBX,AXMOVDX,283HMOVAL,36HOUTDX,ALMOVDX,280HMOVAX,BXOUTDX,ALMOVAL,AHOUTDX,AL;计算计数初值,1M的十六进制为;设置计数器工作方式;输入计数初值;开扬声器MOV;开扬声器MOVAL,89HOUTDX,ALMOVDX,28AHINAL,DXNOTALMOVDX,288HOUTDX,ALROD:CALLDELAYLOOPRODMOVDX,28BHMOVAL,89HOUTDX,ALMOVDX,28AHINAL,DXMOVDX,288HOUTDX,ALCALLDELAY_OFFADDSI,2ADDBP,2JMPL1L0:RETPLAYENDPDELAYPROCPUSHAXPUSHBXPUSHCXPUSHDXMOVBX,09FHLL1:MOVCX,0FFFFHLOP:LOOPLOPDECBXJNZLL1POPDXPOPCXPOPBXPOPAXRETDELAYENDPDELAY_OFFPROCPUSHAXPUSHBXPUSHCXPUSHDXMOVBX,0FHLL2:MOVCX,0CFFFHLOP2:LOOPLOP2DECBX涎时;关扬声器;音节间延时;延时子程序;循环这么多次JNZLL2POPDXPOPCXPOPBXPOPAXRETDELAY_OFFENDPCSEGENDSENDMAIN五、试验结果截屏:初始界面:QiXn-i^sirriSDS,123.EMJCIHEREARE:36OHGS:tt.HfiPPVB1RTHDAVE.SHEEP0b[RHIERB.EXITPRESSTHEKE出TOSELECTSONG!如果按错了键,会出现如下界面:-Lvrricism50M20.EXE-Jn|XtHEBEABE3EOHGS:1.HAPPYBIRTHWVLsheefb.ElVEF!糙EMITPBESSTHEKEYTOSELECTSONG*&SELECTIONJp:HEHEAEE3SONGS:k.HAPP堂HlMHDfitfE.SHEErB«R]UERS-EXITpflESSIKEKEYTOSELECTGONGf如果选择正确,将出现如下界面:1masmSO123.EXE-口XTHEREfiRE3SONGS:1-HftPPS!BIBTHDflV2_SHEEP3.RIUEE0_EKITPRESSHIEKEVTOSELECTGONC!1112224112224112222411222pEWEtlRE3SONGS:sLhaftvbibthdav2-SHEIP3=RIUER0.EKITPRESSTHEKE?TOSELECTSONG?六,设计总结实验过程中碰到了很多的难题和障碍,我认识到平时基础知识的重要性,只有能够熟练的掌握才能在实验过程中得心应手,否则一步错则整个试验都会陷入困境,因而,严谨的态度是试验成功的重要保障!通过这次课程设计,我们对各个芯片有了进一步的了解,对各个芯片的功能有了更深刻的认识和体会,平时上课的理论知识只是停留在理论的层面,只有通过了这样的试验才能更好的体会到,做到了理论和实际的相结合,使理论知识真正运用到了实践中去。在课程设计过程中,同组人员之间相互合作,共同研究使我更加坚信了团体的力量。在团体的共同协作和努力下,任何的难题都可以被解决!我们大家在实验的时候都团结合作,遇到问题时候一起探讨,增强了我们的合作精神。二・电子时钟设计一•设计的任务和目的:通过设计,培养和提高解决工程具体问题,动脑动手的技术工作能力,还要逐步建立科学正确的设计和科研思想,培养良好的设计习惯,牢固树立实事求是和严肃认真的工作态度。具体要求任务如下:1、中断工作原理,定时计数原理,并行通信原理工作原理。2、掌握8259芯片,8254芯片,8255芯片功能,结构。3、掌握8259芯片,8254芯片,8255芯片的编程。4、能运用所提到的芯片,设计系统并进行程序开发,满足用户需求。2.设计要求1、总体内容:设计一电子时钟,能在数码管上显示时间并计时。2、接口设计:根据题目和所用的接口电路芯片设计出完整的接口电路,并在实验系统上完成电路的连接和调试通过.3、程序设计:要求画出程序框图,设计出全部程序并给出程序设计说明和程序注释。4、前期完成的实验有:8259A中断控制器实验,8254定时计数器实验,8255并行接口实验。二概要设计2.1电路原理与主要芯片功能2.1.1电路原理首先利用程序硬性规定分、秒的起始时间为零。然后通过8254计时器分频,并将以分得的频率接通8259中断控制器,进而通过CPU响应可屏蔽中断达到按秒计时的效果。具体做法是将四个七段管显示器接到两片可并行接口8255芯片上,以此来控制七段管显示器的位操作以及段操作。并为之在数据段开辟一处空间,专门存放将要显示的数位代码。8254计时器将由PC机给定的频率加以分频,得到的新频率加到8259中断控制器的中断请求输入端。主程序为此可屏蔽中断设置专门

的中断向量码°CPU获取此中断向量码后转向待需解决的程序进行操作。而这个程序便是整个主程序的心脏。通过它将使电子钟的显示时以秒为进位,达到秒、分的增加。8255主要功能8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。用+5V单电源供电,能在以下三种方式下工作:方式0―基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式。8255的内部结构及引脚如图2.1所示:该厂j<PL3-P5JJ1oDsD1O7654012该厂j<PL3-P5JJ1oDsD1O765401230L2^PA^cGNDipcpc'pc'pcpcpcpc'pc'FBPBPBB:1(地)A012545678901一3■"Tf"-3Tr00_9JIJI1-11111111-二5528O98765432100-87654321

r+3333313-3313-11-22232222245d7s^76543

AAAAT-EO1254567CBbbeb

fppp^rddddddddvppppp1I.作方式控制iejCl」1I.作方式控制iejCl」按位F4W象位控制F8259主要功能中断控制器8259是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU传送中断类型号。8259A的内部结构和引脚如图2.3所示:INTA1INTRD■-■WR——fASCS读/■写电擀*TCASO~CAS1~CAS2-■~SPEN缓联螃冲器

妣较器,|■断优光寄存器RD■-■WR——fASCS读/■写电擀*TCASO~CAS1~CAS2-■~SPEN缓联螃冲器

妣较器,|■断优光寄存器级分<=CSR-'析器◎中断话求I器IRE.;-^-IRO一一囱—[EG—IR5v-IRS-r-IR?ICWlx祖始比:CW2A命母寄:CW3:CW4Z春器组|中断奇命器'IMR)1-0CW1'0CW20CW3操作命令寄存器组SR^U7654321O

cwmddddddddCASO——CAS1——G2-ID——95282S272625242322212O191817'1615图2.3内部结构和引脚8259的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1-OCW3分别写入初始化命令寄存器组和操作命令寄存器组。OCW1-OCW3各命令字格式如图2.4所示,其中OCW1用于设置中断屏蔽操作字,OCW2用于设置优先级循环方式和中断结束方式的操作命令字,OCW3用于设置和撤销特殊屏蔽方式、设置中断查询方式以及设置对8259内部寄存器的读出命令。

AO1>71D504JD302O1JDOM7M6XI5M41AO1>71D504JD302O1JDOM7M6XI5M41"1也1MlNLQ071?5D402L>1DCRISLoIo1211LO<W>J中断结束命令011将豚HOIIOJ循环优先枚的一艘E5自此循环100在自劾E口LK筋箱环优先收ooo在自明JECTL下殳位植环优先权111僧环优先枳的我耕曲L*■令110设苴仇先权特席福环010无皴AO

m07OS1D504U302O1EQESMM3MMQ|1P|RRRLS|11「无效可l^lRR可i^lSROX::无泄10更位特殊屏般II设暨符睬肿蔽s不查为。华I:允许查询1011OCW38254主要功能8254是Intel公司生产的可编程间隔定时器。是8253的改进型,比8253具有更优良的性能。8254具有以下基本功能:•有3个独立的16位计数器;•每个计数器可按二进制或十进制(BCD)计数;每个计数器可编程工作于6种不同工作方式;每个计数器允许的最高计数频率为10MHz;•8254有读回命令,除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。•计数脉冲可以是有规律的时钟信号,也可以是随机信号。计数初值公式为n=fCLKi:fOUTi,其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频

PJJUIAGAIR甘娜蜥it螂!■—CLKO■—GATED一►OLT—CLK:**PJJUIAGAIR甘娜蜥it螂!■—CLKO■—GATED一►OLT—CLK:**—GATE:一・■OUH■—CLK2v—GATE?一►OUT?D:——D6—D;—D4——刖——D2——D1——DO—CLK0—om——GATED——GND——1242!3j42120682541?7ISS17g1610ljn1412I——VCC—RDCS——A1——A0——CLK2—on?—GAIE2——CLK1——GAIE1——OLT上图是8254的内部结构框图和引脚图,它是由与CPU的接口、内部控制电路和三个计数器组成。8254的工作方式如下述:方式0:计数到0结束输出正跃变信号方式。方式1:硬件可重触发单稳方式。方式2:频率发生器方式。方式3:方波发生器。方式4:软件触发选通方式。方式5:硬件触发选通方式。8254的控制字有两个:一个用来设置计数器的工作方式,称为方式控制字;另一个用来设置读回命令,称为读回控制字。这两个控制字共用一个地址,由标识位来区分。当读回控制字的D4位为0时,由该读回控制字D1〜D2位指定的计数器的状态寄存器内容将被锁存到状态寄存器中。状态字格式如图2.6所示:

D7D6D5D4D3D2D1D0计数器迭择幽与梏式盗样工作掀选择计数码削部00-计数器。01一计敬器110—计数器211-读出控制字林志00一朔存计数值。1一读驾怵g位1。一读,驾高8位11一先淤写低8位再博写商8位000—林。001-^1010-^2011—方式310。4101一林50一二进制散1一十进制数图2.68254状态字格式三程序接线图及流程图3.1实验接线图系统的连线图主要由五个部分构成。8259中断控制器、8255并口控制器、8254定时计数器、键盘及数码管显示单元、开关及LED显示单元构成。如下图所示:芯片8254系统总线芯片8255LED数码管

图3.4实验接线图3.2主程序流程图主程序的流程图是对整个程序的逻辑的图象表示。首先是设置8254、8255、8259的各个端口地址。接着初始化各个芯片,开始计时,并通过8259中断控制时间的正确显示。在整个过程中都在检测是否有铵键响应。有则停止,没有则返回继续执行。图3.3系统实现流程图四电子钟设计源程序;*********用两个74LS373进行数码管的动态显示;一个做段(要显示的笔画)选,一个做位选PORTSEQU211H;数码管显示地址(选管)PORTBEQU210H;数码管显示内容控制;*********在8253的定时中断中,通过8255的8个PA口,3个PB口进行扫描PAEQU220H;8255CS选择信号端TC0EQU230H;8253CS选择信号端;*********数据段DATASEGMENTCOUNT1DB12;扫描键盘中断口标志CMt^码管COUNT2DB13;延世13次中断标志KREPDB0;防止连击标志,krep=0:无键按下KSHAKEDB0;键盘防抖KFLAGDB0;功能键标kflag=1,2,3--key(A\B\C)pressed,4--key(F)pressedSYMBLDB0;显示标志位0--displaybufer,1--displaytempFIRSTDB0;修改标志位check2digit0--hight,1--lowENTERDB0;在缓冲区里有新的数字?有则为1TABLDW57FH,5BFH,5DFH,5EFH,5FEH,5FDH,5FBH,5F7HDW67FH,6BFH,6DFH,6EFH,6FEH,6FDH,6FBH,6F7HDW37FH,3BFH,3DFH,3EFH,3FEH,3FDH,3FBH,3F7H;键盘扫描码ASCIDB"0123456789ABCDEFGMPRWXYS";键盘顺序码MASEGDB"THEKEY_PREESEDISERROR!",13,10,'$';按键出错提示字符串NUMERRDB13,10,"THEENTEREDDIGITISERROR,INPUTAGAIN!",13,10,'$';无效时间提示字符串LED8DBDBPOINTDWORDERDWBUFERDBTEMPDBSELECTDBOLDSEGDWOLDOFFDWDATAENDS3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H77H,7CH,39H,5EH,79H,71H,80H,76H,38H,05CH;显示编码表011H,0EH,12H,12H,0H,13H;hh:mm:ss;'HELLOo'-atstarts;LED初始显示状态6DUP(0);时间缓存区124,8,10H,20H0;保持初始中断向量段地址0;保存偏移地址代码段********************

CODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATAMAIN:MOVAX,DATA段)MOVDS,AXMOVDX,PORTBMOVAL,00OUTDX,AL;熄灭所有数码管MOVAH,35H;保存原来的中断向量MOVAL,11INT21HMOVOLDSEG,ESMOVOLDOFF,BXMOVAX,SEGKEYLED;写入新的中断向量MOVDS,AXLEADX,KEYLED;取偏移地址MOVAL,11;IRQ3中断向量类型号MOVAH,25HINT21H;写入IRQ3中断向量STIMOVAX,DATA;CSH数据段MOVDS,AXMOVES,AX;CSH堆栈段(inHDYmovsb要重新设定堆栈MOVDX,PA+3;8255控制字MOVAL,10010000B;PA口输入,PB口输出OUTDX,ALMOVPOINT,OFFSETTEMP;输入HCQINAL,21H;读8259中断寄存器ANDAL,0F7H;11111011bOUT21H,AL;开IRQ3MOVDX,TC0+3;8253定时寄存器初始化MOVAL,01010110B;xuanTD1,xieyigediZJ,gongzuofangshi3OUTDX,ALMOVDX,TC0+1;TD1,weidingshiqifuchuzhiMOVAL,5;LS393OUT8M/8K,T1OUT200HZOUTDX,AL;tc1low8=10STEP:MOVAH,1INT16HJZSTEPMOVDX,OLDOFFMOVAX,OLDSEGMOVDS,AXMOVAL,11;按任意键退出;恢复IRQ3中断向量

MOVAH,25HINT21H;重新写入原来的IRQ3的中断向量地址MOVAH,4CHINT21H;***********************中断子程序,进行键盘扫描及显示*********************KEYLEDPROCFAR;每72ms进入一次键盘扫描程序PUSHAX;寄存器A压栈STI;开中断DECCOUNT1;-1,到72ms的话要扫描键盘JZSCANK;到72ms的话进行键盘扫描JMPDISP;否则进行显示SCANK:MOVCOUNT1,12;72ms初始化数字,为下次扫描键盘准备DECCOUNT2;72*13ms=1s?N扫描JNZKSCAN;去扫描键盘MOVCOUNT2,13;恢复count2,为下次读实时时间准备;*******通过BIOS功能调用读系统时间,并处理后的ASCII数值放入BUFER缓冲区★★★★CX16位从高到低没四位分别存放时的高低位分的高低位☆☆☆☆☆READT:MOVAH,2;读BIOS中系统的时间INT1AH;(CH:CL)=时:分,(DH:DL)=秒:1/100秒MOVAX,CX;放到AX中,MOVDI,OFFSETBUFER;DI指向时间缓冲区MOVCL,4★★★★每次都低四位的值ROLAX,CL;循环左移,使得小时高位现在为最低位MOVBL,AL;保存到BL中ANDBL,0FH;处理,得到小时的高位MOV[DI],BL;将小时的高位放入缓冲区中INCDIROLAX,CL;小时的低位处理,放入缓冲MOVBL,ALANDBL,0FHMOV[DI],BLINCDIROLAX,CL;分钟的高位处理,放入缓冲区MOVBL,ALANDBL,0FHMOV[DI],BLINCDIROLAX,CL;分钟的低位处理,放入缓冲区MOVBL,ALANDBL,0FHMOV[DI],BLINCDI

MOVAX,DX;秒的高位处理,放入缓冲区ROLAX,CL;★★★★DX存放秒的数值MOVBL,ALANDBL,0FHMOV[DI],BLINCDIROLAX,CL;秒的低位处理,放入缓冲区MOVBL,ALANDBL,0FHMOV[DI],BL;**********键盘扫描KSCAN:MOVCOUNT1,12;SMJPCXduanMOVDX,PA+1;利用线路翻转法扫描键盘MOVAL,0;PB口输出低电平OUTDX,ALMOVDX,PA;读PA口INAL,DXCMPAL,0FFH;AL=0FFH?是的话没有按键,否则有键按下JNEPRE;不相等,说明有键按下MOVKREP,0;按键被释放,置KREP=0★★★★JMPDISP;无键按下,停止扫描,继续显示;***********判断是否进行过防抖处理,如果KREP为0且有键按下,则下次中断扫描键盘要防抖动PRE:CMPKSHAKE,1JESCAN;已经进行过防抖处理?MOV'KSHAKE,1JMPDISP;没有进行过防抖处理,则设立防抖处理标志,并跳出进行显示;***************判断是否是重复按键,防止误操作SCAN:CMPKREP,1;是否有键按下?JNESCAN1;有键按下转移到SCAN1JMPDISP;没有,上次按键已被释放SCAN1:MOVKREP,1;另一键按下,置标志位KREPanotherkeyispressed★★★★置KREP=0为0才进行按键处理MOVKSHAKE,0;清重复按键及防抖标志MOVCX,3;有键按下,扫描列三次SOMEKEYPREESED,SCANCOMOVBL,0FEH;PB口一位置0。逐次从低位到高位'0'FROMLOWBITTNEXT:MOVAL,BLMOVDX,PA+1OUTDX,ALMOVDX,PA;写?日(一位为0)OUTINAL,DX^PA

CMPAL,0FFH;如果PA=FF,这一列无键按下JNEkeyonROLBL,1;扫描下一列LOOPnextJMPDISP;一次循环扫描结束onecirclescanendKEYON:ANDBL,7MOVAH,BL;组合键码ax=pressedkeycodeefect:leadi,tabl;查表得到键码地址searchpressedkey'locCLD;清除方向标志MOVCX,24repneSCASW;★★★★与TABL里的特征码进行比较相等则jel1得到特征码jel1JMPerr;提示出错NOTHINGFOUNDl1:SUBDI,2;★★★★减去处理后。1自加的部分(读ASCII有用到)SUBdi,offsettabl;★★★★得到TABL中的相对位置SHRDI,1;逻辑右移DI/2^★★★因为TABL的地址是双字节LEDS段时单字节所以要除以2使得相互匹配。MOVAL,ASCI[DI];得到键码getpressedkey'ascii;*************宏,将bufEr中的内容移动到TEMP中去BUFMOVMACROMOVsi,offsetbuferMOVdi,offsettempMOVCX,6CLDrepMOVSBMOVSYMBL,1;symbl=1,displaythetempendmMOVDL,ALMOVAH,2INT21H;得到按键,并在屏幕上显示相应的ASCII;键盘处理子程序,处理各个按键;KFLAG------有键按下标志,如果有键按下为1;FIRST——上次有键按下?;SYMBL——显示内容选择,1时显示TEMP,0时显示BUFER内容KA:CMPAL,'A';按下A键?调整小时jneKBMOVKFLAG,1MOVFIRST,0;判断修改高位CMPSYMBL,0;判断显示bufer/tempjneN1;如果显示TEMP,不要capyBUFER内容到TEMPBUFMOV

N1:MOVTEMP,10H;★★★★HH=--按键提示作用MOVTEMP+1,10HJMPDISPKB:CMPAL,'B';按下B键?调整分钟N2:JNEKCMOVKFLAG,2MOVFIRST,0CMPSYMBL,0JNEN2BUFMOVMOVTEMP+2,10H[★★★★MM=..按键提示作用KC:MOVTEMP+3,10HJMPDISPCMPAL,'C';按下C键?调整秒N3:JNEKFMOVKFLAG,3MOVFIRST,0CMPSYMBL,0JNEN3BUFMOVMOVTEMP+4,10H[★★★★SS=..按键提示作用KF:MOVTEMP+5,10HJMPDISPCMPAL,'F';按下F键?结束修改K4:JNEK4MOVKFLAG,4MOVSYMBL,0JMPREFCMOSCMPAL,'9';symbl=0,displaybufer;★★★★按下的数字键?小于等于9时做具体调时数字JBECHECKJMPDISPCHECK:MOVDI,OFFSETTEMPANDAL,0FHCMPKFLAG,1;分、秒的哪一个JNEMMHH:CMPFIRST,0★★★★KFLAG标志的值用来具体判断调节时、;从高到低修改两个数码管FIR:JEFIRINCDIMOVFIRST,0MOVENTER,1JMPH12MOVFIRST,1;enter=1thereisentereddigitintempH12:MOV[DI],ALTOC\o"1-5"\h\zJMPDISPMM:CMPKFLAG,2JNESS0ADDDI,2CMPFIRST,0;从高到低修改两个数码管JEFIR1INCDIMOVFIRST,0MOVENTER,1JMPM12FIR1:MOVFIRST,1M12:MOV[DI],ALJMPDISPSS0:CMPKFLAG,3JEYESJMPDISPYES:ADDDI,4;从高到低修改两个数码管TOC\o"1-5"\h\zCMPFIRST,0JEFIR2INCDIMOVFIRST,0MOVENTER,1JMPS12FIR2:MOVFIRST,1S12:MOV[DI],ALJMPDISP;**********写入新时间******************REFCMOS:CMPENTER,1;★★★★是否有新时间写入?ENTE=1;则才写入新时间JNEDONTLEADI,TEMP;修改时间MOVAH,[DI]MOVCL,4SHLAH,CLINCDIMOVAL,[DI]ANDAL,0FHORAH,ALCMPAH,24HJBHOKJMPSHOWERR;提示出错HOK:INCDIMOVBH,[DI];M1

SHLBH,CLINCDIMOVBL,[DI];M2ANDBL,0FHORBH,BLCMPBH,60H;MM<=60?JBMOKJMPSHOWERRMOK:INCDIMOVDH,[DI];S1SHLDH,CLINCDIMOVDL,[DI];S2ANDDL,0FHORDH,DLCMPDH,60H;SS<=60?JBSOKJMPS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论