微机原理及应用课程设计---可调计时器设计.docx_第1页
微机原理及应用课程设计---可调计时器设计.docx_第2页
微机原理及应用课程设计---可调计时器设计.docx_第3页
微机原理及应用课程设计---可调计时器设计.docx_第4页
微机原理及应用课程设计---可调计时器设计.docx_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

摘 要本设计主要采用元器件有8253计数器、8088cpu、8255a接口芯片、74ls138译码器、6位七段led数码管以及8*2键盘,此可调计时器用6位七段led数码管可显示时、分、秒,并按正常时间显示方式工作。如果显示有误差可以通过键盘上的按键分别对数显时、分、秒这行调节校准,并且可以根据实际情况进行清零复位。关键词:硬件电路,软件电路,计时器目 录一、概述 3二、硬件电路设计 42.1构建简单微机系统的思路 42.2确定组成各部件的芯片 52.3.存储器芯片,接口芯片与系统总线的连接 52.4接口芯片与外围设备的连接 52.5 8255a芯片基本资料 72.6 8253计数器工作原理 102.7 8088 cpu 的引脚功能 132.8 74ls138工作方式152.9显示电路的连接162.10 led显示器的工作方式 172.11硬件接线图 19三、软件设计框图20四、源程序21课程设计体会 33附录1 34附录2 35参考文献 36可调计时器设计一、概述课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要环节。设计的目1)进一步建立微机系统概念、加深对系统程序理解和认识,提高微机系统的应用水平。2)进一步学习和掌握汇编语言程序的编写和应用的方法,通过较大规模程序的编写,提高编写汇编语言的水平和学习程序调试方法。3)进一步熟悉接口、熟悉键盘控制和七段数码管及其他芯片的使用。设计要求1) 画出8255a与键盘显示器的链接图;2)画出程序框图并编写程序完成如下功能: 6位七段led数码管可显示时、分、秒,并按正常时间显示方法工作 通过定义键盘的字母键,可对计时器进行调整。使a键进入修改时钟的状态;按b键可修改“秒”,秒位闪动,按数字键输入;按c键可修改“分”,分位闪动,按数字键输入;按d键可修改“时”,时位闪动,按数字键输入;按e键退出修改时钟状态;按f键清零复位。二、硬件电路设计2.1 构建简单微机系统的思路 微型计算机由微处理器,存储器,接口电路以及连接在这些部件上的总线组成。微处理器,存储器和所有io设备之间的信息交换都通过总线进行。总线包括地址总线,数据总线和控制总线,他们始于cpu或终于cpu,现代微机大部分都是这种以总线为中心的结构。8088cpu的地址数据总线ad15-ad0和地址状态总线a16/s3-a19/s6是复用的,必须通过地址锁存器把地址总线和数据总线分离。控制总线直接和8088cpu相连,这样8088cpu就工作在最小工作方式。 微型计算机及外围设备组成微型计算机系统的硬件,外围设备必须通过接口电路才能与系统总线相连,因此构建一个基于8088cpu的简单微型计算机系统就是工作于最小工作方式的8088cpu系统总线上挂上一定规模的存储器和接口电路,然后在把合适的外围设备连接到接口电路上。一个基于8088cpu的简单微型计算机系统框图如图所示。图中键盘与显示器作为外围设备通过接口芯片与系统总线相连。 ad0 . ad19 cpu wr rdm/io 锁存器 romram接口芯片键盘显示器译码器译码器2.2确定组成各部件的芯片选择芯片的原则是:要求芯片性能/性价比较高,市场可以买到。对于小型的微型计算机系统,程序存储器一般用eprom,随机存储器一般采用sram。接口有简单接口(例如74ls244,74ls273)和可编程接口(例如8255a),根据需要选择。2.3.存储器芯片,接口芯片与系统总线的连接存储器芯片,接口芯片与系统总线的连接就是如何把存储器芯片和接口芯片挂到系统的三类总线上。存储器芯片和接口芯片与数据总线的连接比较简单,因为是简单系统,对数据总线的负载能力没有特别的要求,所以只要把存储器芯片和接口芯片的数据引脚与数据总线相应各位作并联就可以。连接到芯片上的控制总线不多,常用的有io/.reset等信号,这些信号线也都是与各芯片的有关引脚做并联连接。存储器芯片,接口芯片与地址总线的连接原则上是一样的:低地址线与存储器芯片或接口芯片的地址引脚直接并联连接,用来作为芯片内部单元的选择,高位地址线经译码器译码后一般连接到芯片的片选端,作为芯片的选择。一般高位地址线的低位部分作为译码器的译码输入,高位部分则作为译码器译码的许可条件。由于8088cpu的端口地址采用独立编址方式,为了区分是存储器芯片地址还是接口芯片地址,一定要把io/信号参与到芯片的片选端控制。2.4接口芯片与外围设备的连接采用8255接口芯片作为8*2键盘与6位七段数码管显示器的接口。(1)8255接口芯片与8*2键盘的连接 8*2键盘是一种行列式键盘,如图2.4.1所示。图中有8行2列,8根行线与pa口相连,2根列线与pc口的pc7、pc6相连。按键设置在行、列交点处,行、列线分别连接到按键开关的两端。当列线通过上拉电阻接+5v时,就被钳位在高电平状态。键盘中有无按键按下是由行线送入全扫描字、列线读入行线状态来判断的。这就是:给行线所有i/o线均置成低电平,然后读入列线电平状态。如果有按键按下,总会有一根列线电平被拉置底电平,从而使列线输入不全为1。键盘中哪一个键按下是由行线逐行置低电平后,检查列线输入状态予以确定的。其方法是:依次给行线送低电平,然后查所有列线状态,如果全为l,则所按下之键不在此行。如果不全为1,则所按下之键必在此行。而且是在与0电平行线相交的交点上的那个键。键盘的工作方式采用编程扫描工作方式,即通过调用键盘子程序来响应键输入的要求,在键盘扫描子程序中完成下述功能:+52c6b3d7a4e805f19a1a2a3a4a5a6a7a8a1a2图2.4.11)判断键盘上有无键按下。其方法是先使pa7pa0=o,然后读pc7、pc6的状态,若为全l,则键盘中无键按下;若不全为1,则说明键盘中有键按下。2)去除按键的机械抖动影响。对于由机械触点构成的按键,由于机械触点的弹性作用,触点在闭合及断开瞬间有一个抖动过程,一般为510ms时间。为了消除抖动影响可作这样处理:当判断有键按下后,软件延时一段时间再判断键盘状态,如果仍为有键按下状态,则认为有一个确定的键按下,否则按键抖动处理。3)求按下键的键值及键号。键盘上的缚个键都对应一个键值。键值的组成:低8位为扫描该键时的行线输出值(pa7pa0),高8位为该键按下时的列线输入值(pc7、pc6为有效位,其余位令其为1),因而图示中各键值依次为7ffeh、7ffdh、7ffbh、7ff7h、7fefh、7fdfh、7fbfh、7f7fh、bffeh、bffdh、bffbh、bff7h、bfefh、bfdfh、bfbfh、bf7fh。本例中键盘中键号排列没有规律(见图2.4.1),不能通过对键值直接运算得到键号。因此必须先判断按下键是使pc7=0还是pc6=0,然后再查为零的列线上键按下时其8位键值中是否有一位为零,若为零则可得到键值。求按下键键值及键号的目的是使程序转到相应的地址去完成该键的操作。一般,对数字键就是直接将该号送到显示缓冲区进行显示,对功能键则必须先找到该功能键处理程序入口地址,并转去执行该键的命令。因此当键号求到后,还必须找到功能键处理程序入口。4)为保证键闭合一次cpu仅进行一次键功能操作。程序中需要等待键释放以后再将键号送累加器ah。键盘的工作方式还有定时扫描及中断工作方式,前者是一种定时中断,cpu响应中断后对键盘进行扫描,并在有键按下时转入键功能处理程序。中断工作方式只有在键盘按下时,才执行键盘扫描,并执行该键的功能程序。(2)led显示器的工作方式led显示器有静态和动态两种工作方式。led显示器工作在静态显示方式下,共阴极或共阳极连接在一起,然后接地或十5v;每位的段选线(a,b,g,h)与一个8位并行口相连。这样,只要在每一位的段选线上保持段选码电平,该位就能保持相应的显示字符。 在多位led显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位的io口控制,即控制段选码而共阴极点或共阳极点分别由相应的io线控制即控制位选码,这就是动态显示。2.5 8255a芯片基本资料2.5.1 8255a内部结构如图2.5.1所示图2.5.1 8255a内部结构 8255a3个8位数据接口,即接口a、接口b和接口c。使用者可以用软件使它们分别作为输入端口或输出端口。(1) 端口a:一个8位数据输入锁存器和一个8位数据输出锁存器/缓冲器,用来传送数据。数据输入均被锁存。(2) 端口b:一个8位数据输入缓冲器和一个8位数据输出锁存器/缓冲器,用来传送数据。数据输入时不被锁存,数据输出时被锁存。(3) 端口c:一个8位数据输入缓冲器和一个8位数据输出锁存器/缓冲器。用作输入端口时,数据不被锁存;而作为输出端口是,数据被锁存。 a组控制和b组控制 这两组控制电路一方面接收芯片内部总线上的控制字,一方面接收来自读/写控制逻辑电路的读/写命令,从而解决端口的工作方式和读/写操作。其中,a组控制电路控制端口a和端口c高4位(pc7-pc4)的工作方式和读/写操作:而b组控制电路控制端口b和端口c低4位(pc3-pc0)工作方式和读写操作。 读/写控制逻辑电路 读/写控制逻辑电路负责管理8255a的数据传输过程。它接收来自系统总线的信号a1,a0和控制总线信号reset、wr、rd,将这些信号组合后,得到a组控制部件和b组控制部件的控制命令,并将命令发给这两个部件,完成对数据、状态信息的传输。 数据总线缓冲器 这是个双向三态8位数据缓冲器,8255a通过它与系统数据总线相连。输入数据、输出数据、cpu发给8255a的控制字都是通过这个缓冲器传递的。2.5.2 8255的引脚信号 图2.5.2 8255的引脚信号如图所示与外部设备端相连的引脚(1) pa7-pa0:a端口的输入/输出引脚。(2) pb7-pb0:b端口的输入/输出引脚。(3) pc7-pc0:c端口的输入/输出引脚。 与cpu相连的引脚(1) reset:复位信号,低电平有效。当reset信号来到时,所有内部寄 存器都被清0,同时3个端口被自动设为输入端口。(2) d7-d0:8255a的数据线,和系统数据总线相连。(3) cs:芯片选择信号。只有当cs有效时,读出信号rd和写入信号wr才对8255a有效。(4) rd:读出信号。cpu通过in指令使rd有效,将数据或状态信息从8255a中读到cpu。(5) wr:写入信号。cpu通过out指令使wr有效,将数据或状态信息从cpu中写道8255a.(6) a1,a0:端口选择信号。8255a内部有3个数据端口和1个控制端口,共4个端口。规定a1,a0为00、01、10和11时,分别选中端口a、端口b、端口c和控制端口。2.5.3 8255的控制字 方式选择控制字(1) 方式选择控制字把a、b、c三个端口分为a、b两组来设定工作方式。a组包括端口a和端口c的上半部,b组包括端口b和端口c的下半部。(2) 端口a可工作于3种方式中的任何一种:端口b只能工作于方式0和方式1;而端口c除用作输入、输出口(方式0)外,通常用来配合端口a和端口b提供联络控制信号和状态信号。(3) 归在同一组的两个端口可分别作为输入端口或输出端口,不要求同为输入或输出。 端口c按位置位/复位控制字 (1) 端口c按位置位/复位控制字尽管是对端口c进行操作的,但此控制字必须写入控制口,而不写入端口c。 (2) 一个控制字只能完成端口c中某一位置的置1或置0,要对多位置1或置0,必须使用多个控制字。2.6 8253计数器工作原理8253可编程计数器/定时器的工作频率为02mhz,它有3个独立编程的计数器,每个计数器有三个引脚,分别为时钟clk、门控gate、计数器和计时结束输出out;每个计数器分别有6种工作方式。下面针对使用到的两种工作方式方式1和方式2的工作原理1进行简述。方式1:可编程单稳,即由外部硬件产生的门控信号gate触发8253而输出单稳脉冲。计数器装入计数初值后,在门控信号gate由低电平变高电平并保持时,计数器开始计数,此时输出端变成低电平并开始单稳过程。当计数结束时,输出端out转变成高电平,单稳过程结束,在out端输出一个单稳脉冲。硬件再次触发,out端可再次输出一个同样的单稳脉冲。单稳脉冲的宽度由装入计数器的计数初值决定。在wr信号的上升沿(cpu写控制字之后),输出端out保持高电平(若out原为低电平则变为高电平)。cpu写入计数值后,计数器并不马上开始计数,而要等到门控信号gate启动之后的下一个clk的下降沿才开始。在整个计数过程中,输出端out保持低电平,直至计数值至0,out变为高电平为止。方式2:速率发生器,其功能如同一个n分频计数器。其输出是将输入时钟按照n计数值分频后得到的一个连续脉冲。在该方式下,当计数器装入初始值开始工作后,输出端out将不断地输出负脉冲,其宽度为一个时钟周期的时间,而两个负脉冲间的时间脉冲个数等于计数器装入的计数初值。若计数初值为n,则每n个输入脉冲输出一个脉冲。当cpu写完控制字后,输出端out转变成高电平,计数器将立即自动开始对输入clk时钟计数。在计数过程中,out端始终保持高电平,直至计数器的计数值减到1时,out端才变为低电平,其保持的宽度为一个输入clk时钟周期的时间,然后输出端out恢复高电平,计数器重新开始计数。8253控制字格式为:其中:sc1 sc0为计数器选择位;rl1 rl0为计数器读写操作选择位,以确定计数器进行装入或读出是单字节还是双字节;m2 m1 m0为计数器工作方式选择位;bcd表示计数器计数方式选择位。8253的内部结构框图如图2.6.1所示;引脚如图2.6.2所示。图2.6.1 图2.6.28253内部可分为6个模块,每个模块的功能如下:1. 数据总线缓冲器及数据总线d0d7这是8253与cpu数据总线连接的8位双向三态缓冲器,是8253内部总线与cpu系统的8位数据总线之间的接口。cpu通过它写方式控制字到控制字寄存器,写计数初值到计数通道,读取计数通道的当前计数值。即数据总线缓冲器有三个基本功能:通过编程向8253写入确定8253工作方式的命令;向计数寄存器装入计数初值;读出当前计数值。2. 读/写控制逻辑及控制引脚这是8253内部操作的控制部分,按照cpu发来的读写信号及地址信号来控制对各个计数器的读写,以及对控制寄存器的写入。当片选信号为高电平时,数据总线缓冲器处于高阻状态。当片选信号有效时(低电平),cpu可以对8253某端口进行读/写操作。8253内部有3个独立的计数通道和1个控制字寄存器共4个端口,由a1和a0加以选择,但对控制字寄存器仅能进行写操作。各个端口的读/写操作的选择见表10. 1。 注意点是控制寄存器只能写入不能读出。 3. 控制字寄存器在初始化编程时,cpu写入方式控制字到控制字寄存器中,用以选择计数通道及其相应的工作方式。4. 计数通道0、计数通道1、计数通道23个计数通道内部结构完全相同。每个计数通道都由一个16位计数初值寄存器、一个16位减法计数器和一个16位计数值锁存器组成。3个计数通道操作完全独立。初始化编程时,虽然3个计数通道共用一个控制字寄存器端口地址,但cpu可以分别写3个方式控制字到控制字寄存器,分别选择各计数通道的工作方式。在写计数初值到计数通道或cpu读取计数通道到当前计数值时,各计数通道都有各自的端口地址。3个计数通道功能完全相同。在设定了计数通道的工作方式后,接着可向该计数通道装入计数初值,该计数初值先送到计数初值寄存器保存,在gate引脚为高电平时(方式0、2、3、4)或在gate上升沿触发下(方式1、2、3、5),计数初值寄存器中的值自动装入到减法计数器中。并启动计数器计数,减法计数器对clk时钟脉冲的下降沿进行减1计数(方式3不是减1计数),并把结果送入计数值锁存器中。当减1计数器减到0时,输出out信号,一次计数结束。计数初值寄存器的内容,在计数过程中保持不变。cpu读取计数通道当前计数值,实际上读取的是16位计数值锁存器的内容。在计数通道用作定时器时,可在该通道clk端输入一个频率精确已知的时钟脉冲,根据定时时间和公式:计数初值定时时间时钟周期,计算出计数初值(也称时间常数)。在计数通道用作计数器时,被计数的事件应以脉冲方式从clk端输入。各计数通道的clk输入和out信号输出之间的关系与门控信号gate有关,取决于工作方式。2.7 8088 cpu 的引脚功能8088 微处理器是一种准16 位机,其内部结构基本上与8086 相同,其引脚信号也与8086 基本相同,只有如下引脚的功能有所不同。(1) 8088 有8 根外部数据引脚而不是8086 的16 根,即ad7ad0,a15a8 为单一的地址线。这就导致对一个16 位数的存储器读写,总是需要二个总线周期才能完成。 (2) 8088 的第28 引脚存储器/io 控制信号为m/io ,即该信号为高电平时,是io 端口访问;为低电平时,是存储器访问。而8086 为m/io 刚好相反。 (3) 8088 与8086 的第34 引脚不同,8088 中只能进行8 位传输,所以bhe 信号就用不着了,改为ss0,ss0等效于s0,与m/io 、dt/r 组合决定最小模式下的总线操作,具体如表2.7.1所示,在最大模式下,该脚总为高电平。8088 cpu 的引脚如图2.7.1 所示。 表2.7.1 ss0、m/io 与dt/ r的组合及其含义m /iodt/ r0ss含义lll取指令llh读存储器lhl写存储器lhh无效状态hll发中断响应信号hlh读i/o 口hhl写i/o 口hhh暂停图2.7.1 8088cpu 的引脚图当把8088的mn/引脚接到+5v时,8088cpu工作于最小工作方式。所谓最小工作方式,就是系统中只有一个微处理器8088。在这种系统中所有的总线控制信号都直接由8088产生,系统中总线控制逻辑电路被减小到最小,这种方式适合于较小规模的应用。最小方式下,24-31引脚功能:(1)中断响应信号(输出,低电平有效)是cpu对外设的中断请求的回答信号。对于8088来说,信号实际是位于连续周期中的两个负脉冲,在每个中断响应周期的t2、t3和tw状态,为低电平。第一个负脉冲通知外围设备的接口,它发出的中断请求已经得到允许;外设接口收到第二个负脉冲后,将中断类型码送往数据总线。(2)ale地址锁存允许信号(输出,高电平有效)ale是cpu在每个总线周期的t1状态发出的,其有效电平表示当前在地址/数据复用线上输出的是地址信息,利用它的下降沿把地址信号和信号锁存在74ls373地址锁存器中。ale不能被浮置。(3)数据允许信号(输出,低电平有效,三态)有效表示cpu准备好接受和发送数据,是cpu提供双向数据收发器74ls245的选通信号,在每个访问存储器或访问i/o周期,或中断相应周期均有效。在dma下,被浮置为高阻态。(4)dt/数据收发信号(输出,三态)在系统使用双向收发器74ls245时,用其控制数据的传送方向。如果dt/为高电平,则进行数据发送,如果dt/为低电平,则进行数据接收.在dma下,被浮置为高阻态。(5)/io存储器/io控制信号(输出,三态)用于区分是访问存储器(低电平),还是访问i/o(高电平),通常/io被接至存储器或接口芯片的片选端。当dma时,被浮置为高阻态。(6)wr写信号(输出,低电平有效,三态)wr有效时,表示cpu正在执行存储器或访问存储器。在任何写周期,wr只在t2、t3、tw有效,在dma时,wr被浮置为高阻态。(7)hold总线保持请求信号(输入,高电平有效)它是系统中的其他总线主控部件向cpu发出的请求占用总线的申请信号。(8)hlda总线保持响应信号(输出,高电平有效)它是cpu对系统中其他总线主控部件向其请求总线使用权的响应信号。2.8 74ls138工作方式74hc138:74ls138 为3 线8 位译码器,共有 54/74s138和 54/74ls138 两种线路结构型式,其74ls138工作原理如下: 当一个选通端(g1)为高电平,另两个选通端(/(g2a)和/(g2b))为低电平时,可将地址端(a、b、c)的二进制编码在一个对应的输出端以低电平译出。74ls138的作用:利用 g1、/(g2a)和/(g2b)可级联扩展成 24 线译码器;若外接一个反相器还可级联扩展成 32 线译码器。 若将选通端中的一个作为数据输入端时,74ls138还可作数据分配器 图2.8.1用与非门组成的3线8位译码器74ls138图2.8.2 74ls138译码器内部电路71ls138有三个附加的控制端、和。当、时,输出为高电平(s1),译码器处于工作状态。否则,译码器被禁止,所有的输出端被封锁在高电平,如表3.3.5所示。这三个控制端也叫做“片选”输入端,利用片选的作用可以将多篇连接起来以扩展译码器的功能。2.9显示电路的连接 显示电路的连接如下图:在程序内设置8255的控制字d2-d1位分别为00,使b端口工作在方式0作为输出端,pb0-pb7分别对应连接数码管的a-dp。七段发光二极管为阳极led器件。要让a段点亮,要求pb0输出高电平“1”;要使b段熄灭,要求从pb1输出低电平“0”。其余各段以此类推。要使led上显示0-9十个数字,需要按照如下段码表来驱动数码管的七段led。显示字符0123456789七段代码3fh06h5bh4fh66h6dh7dh07h7fh6fh2.10 led显示器的工作方式led数码管是目前最常用的数字显示器,图a、b为共阴管和共阳管的电路,图c为两种不同出线形式的引出脚功能图。一个led数码管可用来显示一位09十进制数和一个小数点。小型数码管(0.5寸和0.36寸)每段发光二极管的正向压降,随显示光(通常为红、绿、黄、橙色)的颜色不同略有差别,通常约为22.5v,每个发光二极管的点亮电流在510ma。led数码管要显示bcd码所表示的十进制数字就需要有一个专门的译码器,该译码器不但要完成译码功能,还要有相当的驱动能力。图a 共阴连接(“1”电平驱动) 图b 共阳连接(“0”电平驱动)图c led数码管符号及引脚功能图led显示器有静态和动态两种工作方式led显示器工作在静态显示方式下,共阴极或共阳极连接在一起,然后接地或+5v;每位的段选线(a,b,g,h)与一个8位并行口相连。这样,只要在每一位的段选线上保持段选码电平,该位就能保持相应的显示字符。在多位led显示时,为了化简电路,降低成本,将所有位的断选线并联在一起,由一个8位的i/o口控制,即控制段选码而共阴极或共阳极点分别由相应的i/o线控制即控制位选码,这就是动态显示。4位led动态显示电路只需一个8位i/o口及一个4位i/o口,其中8个i/o控制段选码,4位i/o控制位选。进行4位字符显示时,采用扫描显示方式,即在每一瞬间只使某一位显示相应字符,在此瞬间,段选控制i/o口输出相应字符段选码,位选控制i/o口在该显示位送入选通电平(共阴极送低电平,共阳极送高电平),以保证该位显示相应字符。如此轮流,使每位显示该位应显示字符,并保持延迟一段时间(15ms),以造成视觉暂留效果。不断循环送出相应的段选码、位选码,就可以获得视觉稳定的显示状态。2.11硬件接线连接图见附录1附录2yyyyyf键标志?nnnnnyna键标志?b键标志?c键标志?d键标志?e键标志?修改时位时间清零?去掉键状态标志修改秒位时间修改分位时间显示扫描yyynnn有无压键?开 始8255a初始化送1s时间常数是功能键?根据a,b,c,d,e,f键设标志显示扫描放键?键?三、软件设计框图当按下启动按钮,程序开始运行,8255a进行初始化,并送入1秒的时间常数。程序运行时首先会判断是否有压键操作,如果没有压键操作,则重复显示扫描和判断操作。若有压键操作,程序会继续判断次压键是否是功能键,如果不是再继续判断是否是a键标志;如果是这执行“根据a,b,c,d,e,f键设标志”操作,执行完后,会执行询问是否放键的操作,放键则继续执行有无压键判断,如果不放键,则跳转至显示扫描操作。 在上述判断过程中如果压键不是功能键,则会判断该压键是否是a键标志。如果不是则跳转至判断有无压键的操作中,如果是a键标志,程序会继续判断是否是b键标志。如果是b键标志则修改秒位时间,如果不是则判断它是否是c键标志。如果是c键标志,则修改分位时间,如果不是就会就绪判断是否是d交标志。如果是d键标志,则修改时位时间,如果不是则继续执行判断是否是e键标志。如果是e键标志,则执行“去掉键状态标志”操作,如果不是则继续判断是否是f键标志。如果是f键标志,则执行清零操作,若果不是,则说明此压键是无效压键,则程序会跳转到是否有压键操作的判断中。在该程序段中,执行完修改秒、分、时的时间后均要执行是否需要执行放键的操作中去。四、源程序stack segment stackdw 64 dup(?)stack endsdata segment org 3500h table db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch, 39h,5eh,79h,71h buffer db 6 dup(0) function db 00h ;a键功能标志,若为ffh表示进入功能状态 havekey db 00h second db 59h ;初始时间 minute db 20h hour db 23h b set db 00h ;b键功能标志,若为ffh表示进入功能状态 c set db 00h ;c键功能标志,若为ffh表示进入功能状态 d set db 00h ;d键功能标志,若为ffh表示进入功能状态 bbcot db 00h ;b键闪动计数标志 cccot db 00h ;c键闪动计数标志 ddcot db 00h ;d键闪动计数标志 shu_zi db 00h ;数字键缓冲区data endscode segment assume cs:code,ds:data,ss:stackstart: mov ax,data mov ds,ax mov bx,offset table ;bx指向table七段代码表首址 mov di,offset buffer ;di指向显示缓冲区首址buffer mov si,offset second ;si指向时间区 mov al,88h out 63h,al ;8255a初始化a3: mov cx,00cfh ;设定的时间常数(约1s)a4: call keytest ;监测键盘 cmp havekey,0ffh jnz a6 call keyscan ;键盘扫描a6: call display ;显示数据 cmp function,0ffh jz a4 loop a4 mov al,second ;设定时间到,处理时间显示 add al,01h daa mov second,al mov second,60h jnz nd_hou mov secode,00h ;60s进分 mov al,minute add al,01h daa mov minute,al cmp minute,60h jnz nd_hou mov minute,00h ;60min进时 mov al,hour add al,01h daa mov hour,al cmp hour,24h jnz nd_hou mov hour,00h ;24h清零nd_hou: call dealjmp a3keyscan:mov havekey,00h ;havekey=00h置为无键 call display ;去抖动 call display call keytest ;再测是否有压键cmp havekey,0ffhjz begin1jmp ex1t1begin1: mov ah,0feh ;行扫描开始 nextkey:mov al,ah out 60h,al in al,62h and al,0c0h cmp al,80h ;判断是否a1线的键 jz find1 cmp al,40h ;判断是否a2线的键 jz brige rol ah,1 jmp nextkeybrige: jmp find2find1: push axa1: mov havekey,00h ;等待释放键 call display call keytest cmp havekey,0ffh jz a1 pop ax not ah cmp ah,01h jz key1 cmp ah,01h jz key15 cmp ah,04h jz key0 cmp ah,08h jz key14 cmp ah,10h jz key10 cmp ah,20h jz key13 cmp ah,40h jz key11 cmp ah,80h jz key12 jmp exit1key1: mov shu_zi,01h ;数字1键 jmp exitkey12: cmp function,0ffh ;功能键c,设置分 jnz c_out mov c_set,0ffh mov b_set,00h mov d_set,00hc_out: jmp exit1key0: mov shu_zi,00h ;数字0键 jmp exitkey15: call clean ;功能键f,清零 mov second,00h mov minute,00h mov hour,00h jmp exit1key11: cmp function,0ffh ;功能键b,设置秒 jnz b_out mov c_set,00h mov d_set,00hb_out: jmp exit1key13: cmp function,0ffh ;功能键d,设置时 jnz d_out mov c_set,00h mov b_set,00h mov d_set,0ffhd_out: jmp exit1find2: push axa2: mov havekey,00h ;等待释放键 call display call keytest cmp havekey,0ffh jz a2 pop ax not ah cmp ah,01h jz key9 cmp ah,02h jz key5 cmp ah,04h jz key8 cmp ah,08h jz key4 cmp ah,10h jz key7 cmp ah,20h jz key3 cmp ah,40h jz key6 cmp ah,80h jz key2 jmp exit1key9: mov shu_zi,09h ;数字9键 jmp exitkey5: mov shu_zi,05h ;数字5键 jmp exitkey8: mov sh

温馨提示

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

评论

0/150

提交评论