设计数码管电子表
数字逻辑电路(数电)课程设计_电子秒表_VHDL实现(含完整源代码!!)

电子科技大学UNIVERSITY OF ELECTRONIC SCIENCE AND TECHNOLOGY OF CHINA数字逻辑设计实验报告实验题目:电子秒表学生姓名:指导老师:一、实验内容利用FPGA设计一个电子秒表,计时范围00.00 ~ 99.00秒,最多连续记录3个成绩,由两键控制。
二、实验要求1、实现计时功能:域值范围为00.00 ~ 99.00秒,分辨率0.01秒,在数码管上显示。
2、两键控制与三次记录:1键实现“开始”、“记录”等功能,2键实现“显示”、“重置”等功能。
系统上电复位后,按下1键“开始”后,开始计时,记录的时间一直显示在数码管上;按下1键“记录第一次”,次按1键“记录第二次”,再按1键“记录第三次”,分别记录三次时间。
其后按下2键“显示第一次”,次按2键“显示第二次”,再按2键“显示第三次”,数码管上分别显示此前三次记录的时间;显示完成后,按2键“重置”,所有数据清零,此时再按1键“开始”重复上述计时功能。
三、设计思路1、整体设计思路先对按键进行去抖操作,以正确的得到按键信息。
同时将按键信息对应到状态机中,状态机中的状态有:理想状态、开始状态、3次记录、3次显示、以及其之间的7次等待状态。
因为需要用数码管显示,故显示的过程中需要对数码管进行片选和段选,因此要用到4输入的多路选择器。
在去抖、计时、显示的过程中,都需要用到分频,从而得到理想频率的时钟信号。
2、分频设计该实验中有3个地方需要用到分频操作,即去抖分频(需得到200HZ时钟)、计时分频(需得到100HZ时钟)和显示分频(需得到25kHZ时钟)。
分频的具体实现很简单,需首先算出系统时钟(50MHZ)和所需始终的频率比T,并定义一个计数变量count,当系统时钟的上升沿每来到一次,count就加1,当count=T时就将其置回1。
这样只要令count=1~T/2时clk=‘0’,count=T/2+1~T时clk=‘1’即可。
数字式秒表设计

1 设计目的1、培养理论联系实际的正确设计思想,训练综合运用已经学过的理论和生产实际知识去分析和解决工程实际问题的能力。
2、学习较复杂的电子系统设计的一般方法,提高基于模拟、数字电路等知识解决电子信息方面常见实际问题的能力,由学生自行设计、自行制作和自行调试。
3、进行基本技能训练,如基本仪器仪表的使用,常用元器件的识别、测量、熟练运用的能力,掌握设计资料、手册、标准和规范以及使用仿真软件、实验设备进行调试和数据处理等。
4、培养学生的创新能力。
2 设计要求1.秒表由2位七段LED显示器显示,其中1位显示“s”,二位显示“0.1s”,显示分辩率为0.1 s;2.计时最大值为9.9s;3.计时误差不得超过1s;具有清零、启动计时、暂停计时及继续计时等控制功能;4.主要单元电路和元器件参数计算、选择;5.画出总体电路图;6.安装自己设计的电路,按照自己设计的电路,在通用板上焊接。
焊接完毕后,应对照电路图仔细检查,看是否有错接、漏接、虚焊的现象。
7.调试电路8.电路性能指标测试9.提交格式上符合要求,内容完整的设计报告3总体设计3.1 工作流程图图 1 工作流程图图1中1单元为用集成与非门74LS00构成的基本RS 触发器。
属低电平直接触发的触发器,有直接置位,复位的功能。
图1中2单元为集成与非门74LS00构成的单稳态触发器,它的职能是为计数器提供清零信号。
图1中555定时器构成了多谐振荡器,是一种性能较好的时钟源。
图1中4单元74LS160构成的计数器/分频器图1中5单元译码显示单元3.2 原理图:图1为电子秒表的原理图,按功能可分为5个单元电路进行分析。
其中单元1为基本RS 触发器; 单元2为单稳态触发器; 单元3为时钟发生器; 单元4为计数器和分频器; 单元5为译码显示单元。
基本RS 触发器单稳态触发器译码显示器555定时器计数/分频器图2 原理电路图本电路中使用两个基本RS触发器提供置位、复位、和清零信号,555定时器提供时钟脉冲信号,三块74LS160作为译码/分频单元,有效、简洁地完成了秒表所具备的所有功能(清零、启动计时、暂停计时及继续计时)。
LED数码管数码表+proteus元件库对照

共阳极数码管的公共阳极接+5V,当各段阴极上的电平为“0”时,该段点亮,电平为“1”时,该段熄灭。
CRYSTAL 晶振
元件名称 中文名 说明
7407 驱动门
1N914 二极管
74Ls00 与非门
74LS04 非门
74LS08 与门
74LS390 TTL 双十进制计数器
LED数码码管:
7SEG-MPX4-CC 四个公阴二极管显示器 1234 是阴公共端
7SEG-MPX8-CC 八个公阴二极管显示器 12345678 是阴公共端
7SEG-MPX4-CA 四个公阳二极管显示器 1234 是阳公共端
7SEG-MPX8-CA 八个公阳二极管显示器 12345678 是阳公共端
RESISTORS.LIB 包括 电阻
FAIRCHLD .LIB 包括FAIRCHLD 半导体公司的分立器件
LINTEC.LIB 包括 LINTEC公司的运算放大器
NATDAC.LIB 包括 国家半导体公司的数字采样器件
NATOA.LIB 包括 国家半导体公司 的运算放大器
TECOOR.LIB 包括TECOOR公司的 SCR 和TRIAC
INDUCTOR3 可调电感
JFET N N沟道场效应管
JFET P P沟道场效应管
LAMP 灯泡
LAMP NEDN 起辉器
LED 发光二极管
METER 仪表
MICROPHONE 麦克风
MOSFET MOS管
MOTOR AC 交流电机
MOTOR SERVO 伺服电机
BELL 铃,钟
BVC 同轴电缆接插件
BRIDEG 1 整流桥(二极管)
74ls147引脚图管脚图和功能真值表

74ls147引脚图管脚图和功能真值表优先编码器是当多个输入端同时有信号时,电路只对其中优先级别最高的输入信号进行编码。
常用的集成优先编码器IC有10线-4线、8线-3线两种。
10线-4线优先编码器常见的型号为54/74147、54/74LS147,8线-3线优先编码器常见的型号为54/74148、54/74LS148。
下面我们以TTL中规模集成电路74LS147为例介绍8421→BCD码优先编码器的功能。
10线-4线8421 BCD码优先编码器74LS147的真值表见表3.5。
74LS147的引脚图如图3.5所示,其中第9脚NC为空。
74LS147优先编码器有9个输入端和4个输出端。
某个输入端为0,代表输入某一个十进制数。
当9个输入端全为1时,代表输入的是十进制数0。
4个输出端反映输入十进制数的BCD 码编码输出。
74LS147优先编码器的输入端和输出端都是低电平有效,即当某一个输入端低电平0时,4个输出端就以低电平0的输出其对应的8421 BCD编码。
当9个输入全为1时,4个输入出也全为1,代表输入十进制数0的8421 BCD编码输出。
表3.5 74LS147的真值表数字电路CD4511的原理(引脚及功能)CD4511是一个用于驱动共阴极 LED (数码管)显示器的 BCD 码—七段码译码器,特点:具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流。
可直接驱动LED显示器。
CD4511 是一片 CMOS BCD—锁存/7 段译码/驱动器,引脚排列如图 2 所示。
其中a b c d 为 BCD 码输入,a为最低位。
LT为灯测试端,加高电平时,显示器正常显示,加低电平时,显示器一直显示数码“8”,各笔段都被点亮,以检查显示器是否有故障。
BI为消隐功能端,低电平时使所有笔段均消隐,正常显示时, B1端应加高电平。
另外 CD4511有拒绝伪码的特点,当输入数据越过十进制数9(1001)时,显示字形也自行消隐。
电子秒表

电子秒表概述此电子秒表,是在TND-MD教学系统上实现的,其计时精确度为0.01s。
所使用的芯片主要有8253定时计数器、8255A并行接口电路芯片、8259A中断控制器等。
通过系统中的开关键KK1和KK2可实现开始计时,暂停计时,继续计时,清零功能,用系统中的四片七段数码管将计得的时间以XXXX(秒百分秒,其中秒占两位,百分秒两位)的形式显示给用户。
计时准确度与现实时间相符。
一、设计要求按一下kk1开关启动,再按暂停,按kk2清零,周而复始。
最小计时单位0.01S,即可显示XXXX(秒百分之一秒)。
设计要求如下:(1)由键盘和8255作为输入部分(2)用七段数码管或液晶显示屏来显示时间(3)由8253和8259构成计时信号,通过中断完成启动计时、停止计时和动态刷新显示。
二、设计思想1、为了试验秒表的准确计时功能,此秒表精确到了0.01s,为了得到0.01s的时间脉冲,使用8253芯片来产生,又由于可以系统自动产生1.1932MHZ的时钟频率,因此可以通过设定计数初值为2E9c,并设定8253工作在方式3来获得所需的周期为10ms的时间脉冲软件操作:首先向8253的控制端口43H输入控制字B6H来设置计数器2计时,工作在方式3,循环计数,产生10ms的时间脉冲,然后再像计数器2端口42H输入计数初值2e9cH,先写入低八位数据,再写入高八位数据硬件操作:唐都仪器8253芯片的CLK接bus总线上的OPCLK系统时钟信号,频率为1.1932MHZ,GATE门信号接+5v电源,out引脚接8259芯片的IRQ72、为了驱动数码管,需使用8255芯片,通过设定控制字,用其PB端口来驱动段,PA 端口来驱动位,软件操作:向8255的控制端口63H输入控制字81H,使其三个端口都工作在方式0,PA(60H)端口的低四位用来驱动数码的位,PB端口(61H)用来驱动数码管的段,然后用E命令重新开辟一块内存区域,用来存放数码管0-9的字模3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH硬件操作:唐都仪器上的8255芯片的PA0~PA3引脚接数码管的X4~X1引脚,PB0~PB7引脚接数码管的0~DP引脚3、为了能够实现系统的中断调用,需使用8259芯片的IRQ2,IRQ6,IRQ7引脚,其中断向量分别为:0AH,0EH,0FH把三个中断服务程序的的入口地址分别填入这三个中断向量所指向的内存地址,IRQ2接KK1控制秒表的启动和暂停,IRQ6接KK2控制秒表的复位软件操作:IRQ2的中断向量乘以四得:0028H,然后向这个地址填入IRQ2服务程序的入口地址(mov [0028],IRQ2),然后向002a地址填入中断向量表的段地址:0000H,IRQ6的中断的首地址为:0038H,填入中断服务程序入口地址mov [0038],IRQ6,填入段地址mov [003a],0000H,IRQ7中断的首地址:003cH,填入中断服务程序入口地址:mov [003c],IRQ7,t 填入段地址:mov [003e],0000H..三、设计所用芯片及工作原理1、8255芯片工作原理接口电路在CPU和I/O设备之间起着信号的变换和传输的作用。
基于MC14433和TC7107的三位半数字电子表设计

1 引言随着电子技术的发展,电子行业经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。
何况在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。
数字电压表(Digital Voltmeter )简称DVM ,它是采用数字化测量技术,把连续的模拟量(直流或交流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。
由于数字式仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受青睐。
本次我们所做的课程设计就是基于数字电子技术和模拟电子技术的一个电子产品。
我们对自己的设计作品从各个角度分析了由A/D 转换器组成的数字电压表的设计过程及各部分电路的组成及其原理,并且分析了数模转换进而使系统运行起来的原理及方法。
通过自身实践提高了动手能力,也只有亲历亲为才能收获掌握到已经学过的知识。
其实也为建立节约成本的意识有些帮助,我们并没有采用单片机模块,而是直接采用A/D 转换,在MC1433系列找块带显示译码并带A/D 转换的片子并不难,相对于单片机有成本上的优势,但这里同时也牵涉几个问题:精度、位数、速度、还有功耗等不足之处,这些都要慎重考虑。
这些也是在这次实践中收获的吧!2 设计任务分析2.1设计说明 本题要求设计一个213位的数字电压表,213位是指个位、十位、百位的范围为0~9,而千位只有0和1两个状态,称为半位。
所以213数字电压表测量范围为0001~1999。
数字电压表主要部分是A/D 转换器,显示方法通常采用动态扫描(工作时四个数码管轮流点亮,利用人眼的视觉残留特性能够得到整体效果,当扫描频率过低时显示的数码会有闪烁感)方式,采用这种方式较为省电,但需要字形译码驱动电路和字位驱动电路。
任务要求:(1)直流电压测量范围(0~200V)(2)测量速度每秒为2~5次,任选(3)分辨率0.1mv(4)测量误差小于0.1%2.2方案分析1.根据题目利用所学过的知识通过上网或到图书馆查阅资料,设计出3个实现数字万用表的方案。
一款简单的数字电感电容表设计制作

一款简单的数字电感电容表设计制作本文介绍一款由555时基构成多谐振荡器构成的参数变换电路,反相器、晶振构成标准脉冲发生器,以及三个独立LED数码管组成的数显电路构成的简易数字电感电容表,经过测试电路数显直观、方便有效,精确度高,较好的解决了设计时因制作均衡电容、音箱分频电感产生误差导致音质受损的问题,值得电子发烧友们亲自动手操作一试。
一、数字电感电容表的工作原理数字电感电容表原理图1、参数变换电路:参数变换电路由555时基构成多谐振荡器,可把被测元件Lx/Cx转换成与元件参数成正比的脉宽。
然后把这具有特定脉宽的矩形作为门控信号,在脉宽时间内对一个已知周期的标准脉冲计数通过显示器就可以把脉宽(实际上是元件参数)显示出来。
测量电容时(这时波段开关在5、6、7位)是以Cx为定时元件的多谐振荡器,产生的矩形波经3脚输出,送到计数器的门控端,脉宽tw=CRcln2。
测量电感时(波段开关在1、2、3位),是以Lx为定时元件的多谐振荡器,刚接通电源时,V2(6)=Vcc,555的3脚输出低电平,7脚通地,电源经RL的Lx充电,随着充电的进行,V2(6),当达到V2(6)=1/3Vcc时,电路翻转,3脚输出高电平,7脚与地断开,因Lx电流不能突变,必将产生一个感生电动势使D1导通,Lx经D1、RL放电,V2(6),当达到V2(6)=2/3Vcc时,电路又翻转,5脚输出低电平,7脚又与地接通,Lx又开始充电,这样5脚输出占空比为1:1的方波,送到计数器的门控端。
这时脉宽为tw=Lx/RLln2。
2、标准脉冲发生器:该电路由反相器3、4和晶体构成,晶振频率为1MHz,标准脉冲周期为T=1s,以它作为计数器的计数脉冲。
3、计数、显示电路:显示器由三位LED数码管构成,计数器由MC14553三位动态扫描计数器为核心构成。
T=1s。
多功能电子表设计说明书

目录1 多功能电子表设计目的及意义2多功能电子表设计内容(1)总体设计方案简介(2)单元电路设计(3)总电路图(4)软件设计,编程思路,给出流程图,程序清单(附注释)(5)仿真结果3 结果分析4 设计总结5设计心得参考文献附录1.多功能电子表设计目的及意义1.1多功能电子表设计目的:目的:学生通过自己动手设计制作,将电子技术相关理论知识与制作实践相结合,提高学生的动手能力,加深对电子技术原理的理解,增加学习电子技术的兴趣,为今后投入电子技术的开发应用打好基础。
1.2多功能电子表设计意义:意义:2.多功能电子表的设计内容2.1总体设计方案简介1.功能简介及摘要多功能电子表是一种用数字显示秒﹑分﹑时的记时装置,与传统的机械钟相比,他具有走时准确﹑显示直观﹑无机械传动装置等优点,因而得到了广泛的应用:小到人们的日常生活中的电子手表,大到车站﹑码头﹑机场等公共场所的大型数显电子钟。
本课程设计要用通过简单的逻辑芯片实现数字电子钟。
要点在于用555芯片连接输出为一秒的多谐振荡器用于时钟的秒脉冲,用74LS160(10进制计数器)74LS00(与非门芯片)等连接成60和24进制的计数器,再通过七段数码管显示,构成了简单数字电子钟。
2.设计流程多功能电子表一般由振荡器、分频器、译码器、显示器等部分组成。
这些都是数字电路中应用最广泛的基本电路。
多功能电子表的基本计流程框图如下所示;图1 结构框图3.各部分功能说明1、振荡器振荡器是多功能电子表的核心,它的作用是产生一个频率标准,即时间标准信号,然后再由分频器分成秒脉冲,即“秒”时间脉冲。
因此正当其频率的精度与稳定度基本决定了多功能电子表的质量。
为了产生稳定的时间标准信号,一般采用石英晶体振荡器。
从多功能电子表的精度考虑,晶体振荡频率越高,秒针的时间精度越高。
但这会使振荡器的耗电量增大,分频器的级数也要增多,所以在确定频率时,应当天考虑这两方面因素,然后再选用石英晶体振荡器型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一设计数码管电子表一.实验要求:使用8253的两个计数器串连,作为微机系统的外扩定时源,以数码管电路作为外扩输出设备,采用中断方式编程,实现数码管电子表“具体要求如下:1.六位数码管分别显示时,分,秒。
2.初始时间由主机键盘输入。
3.主机按任意键停止计时返回DOS。
二:实验电路+5VQ2A0IORIOW8253CS 200H -207H(*注意:A1,A0用来选择8253内部三个计数器中的一个,它们分别与计算机地址线的低两位相连。
RD ,WR 用来控制8253的读写,它们分别与计算机的IOR ,IOW相连) 电路分析:从Q2出来的时钟频率为1MHZ ,为实现一秒钟调用一次中断,必须要每1000000次时钟调用一次中断。
我们同时将计数器0和计数器1的初值都设为1000,并将计数器0的输出OUT0作为计数器1的时钟,并将计数器1的输出OUT1连到B4端子上,这样就实现了每1000×1000=1000000次时钟调用一次中断。
三.8253控制字格式D7 D6 D5 D4 D3 D2 D1 D0四.程序清单:TITLE DISPTIMEDSEG SEGMENTINPUT_TIM DB 'Please input the current t ime.',13,10,'$' SHOW_TIM DB 'Time is as the follow.Press Ctr-C to exit.',13,10,'$'BAD_DATA DB 'Digits mush be between 0 and 9',13,10,'$' BAD_HRS DB 'Hour must be between 0 and 23',13,10,'$' BAD_MINS DB 'Minutes mush be between 0 and 59',13,10,'$' BAD_SECS DB 'Seconds mush be between 0 and 59',13,10,'$' CRLF DB 13,10,'$'ASK_HRS DB 'Hour(0-23):$' ASK_MINS DB 'Minute(0-59):$'ASK_SECS DB 'Second(0-59):$'USER DB 3,3 DUP(?)TIME DB 3 DUP(?)COUNT DW 1OLD0A DD ?TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH, 07H,7FH,6FH,77H,7CH,39H,5EH, 79H,71HDSEG ENDSSSEG SEGMENT STACK 'STACK' DB 256 DUP(?)SSEG ENDSCSEG SEGMENTASSUMECS:CSEG,SS:SSEG,DS:DSEG,ES:D SEGSTART PROC FARMOV AX,DSEGMOV DS,AXCALL GET_TIMECLICALL I8253 (初始化8253)CALL I8259 (初始化8259)CALL RD0A(读入原0A中断向量)CALL WR0A(写入新中断向量)ROTATE: CALL DISPLAY(只要不按键,就不断调用DISPLAY显示TIME变量中的时间)MOV AH,1INT 16H JZ ROTATE(按键输入后退出。
)CALL RESETMOV AH,4CHINT 21HRETSTART ENDP;*************************** *********(SERVICE为新的中断程序)SERVICE PROC NEARPUSH AXPUSH DSMOV AX,DSEGMOV DS,AXCALL CHANGE_TIME(函数CHANGE_TIME用以将时间增加一秒)MOV AL,20HOUT 20H,AL(送应答信号)POP DSIRETSERVICE ENDP;**************************** ********(此函数将保存在TIME变量中的时间显示在数码管上。
) DISPLAY PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIMOV SI,OFFSET TIME MOV BX,OFFSET TABLE MOV CL,4MOV AL,[SI]MOV AH,ALSAR AL,CLAND AH,00001111BXLAT OUT DX,ALMOV DX,200HMOV AL,01HOUT DX,ALMOV AL,0OUT DX,ALMOV AL,AHXLATMOV DX,201HOUT DX,ALMOV DX,200HMOV AL,02HOUT DX,ALMOV AL,0OUT DX,ALMOV AL,[SI+1]MOV AH,ALSAR AL,CLAND AH,00001111B XLATOUT DX,ALMOV DX,200HMOV AL,04HOUT DX,ALMOV AL,0OUT DX,ALMOV AL,AHXLATMOV DX,201HOUT DX,ALMOV DX,200HMOV AL,08HOUT DX,ALMOV AL,0OUT DX,ALMOV AL,[SI+2]MOV AH,ALSAR AL,CLAND AH,00001111B XLAT OUT DX,AL MOV DX,200H MOV AL,10H OUT DX,AL MOV AL,0OUT DX,AL MOV AL,AH XLATMOV DX,201H OUT DX,AL MOV DX,200H MOV AL,20H OUT DX,AL MOV AL,0OUT DX,ALPOP SIPOP DXPOP CXPOP BXPOP AXRETDISPLAY ENDP;*************************** *********I8253 PROC NEARMOV AL,00110100B MOV DX,20BHOUT DX,AL(设定8253的计算器0,写入时先低字节后高字节,方式2,二进制计数)MOV AX,1000MOV DX,208HOUT DX,ALMOV AL,AHOUT DX,AL(计数器0的初值设为1000。
) MOV AL,01110100BMOV DX,20BHOUT DX,AL(设定8253的计算器1,入时先低字节后高字节,方式2,二进制计数)MOV AX,1000MOV DX,209HOUT DX,ALMOV AL,AHOUT DX,AL(计数器1初值设为1000。
)RETI8253 ENDP;*************************** *******I8259 PROC NEARIN AL,21HAND AL,11111011B OUT 21H,ALIN AL,0A1HAND AL,11111101B OUT 0A1H,ALRETI8259 ENDP;********************************RD0A PROC NEARMOV AX,350AHINT 21HMOV WORD PTR OLD0A,BXMOV WORD PTR OLD0A+2,ESRETRD0A ENDPWR0A PROC NEARPUSH DSMOV AX,CSEGMOV DS,AXMOV DX,OFFSET SERVICEMOV AX,250AHINT 21HPOP DSRETWR0A ENDP ;**************************** ****RESET PROC NEARMOV DX,WORD PTR OLD0AMOV DS,WORD PTR OLD0A+2MOV AX,250AHINT 21H (恢复原来的中断向量)IN AL,0A1HOR AL,00000010BOUT 0A1H,AL (屏蔽用户中断)RETRESET ENDP;**************************** *******(函数GET_TIME的作用是接受用户输入的时间,并把它保存在6字节变量TIME中。
为了保证程序的严谨,如果输入的时间非法,则显示出错信息并要求重输。
)GET_TIME PROC NEARLEA DX,INPUT_TIM MOV AH,9INT 21H (提示输入时间)HOUR: LEA DX,ASK_HRSMOV AH,9INT 21H (提示输入小时)CALL INPUT_TIME (函数INPUT_TIME的功能是把用户输入的字符转化为时间值并存放在BL中如果输入的不是数字,那么让标志寄存器CF=1) JC HOUR (输入不是数字,重输)CMP BL,23HJNA HRS2 (如果输入的数字比24小,那么跳到HRS2去执行下面的内容;如果输入的数字大于等于24,那么要求重输。
对于分,秒的输入也按照此法处理。
)LEA DX,BAD_HRSMOV AH,9INT 21HJMP HOURHRS2: PUSH BXMIN: LEA DX,ASK_MINSMOV AH,9INT 21HCALL INPUT_TIMEJC MINCMP BL,59HJNA MIN2LEA DX,BAD_MINSMOV AH,9INT 21HJMP MINMIN2: PUSH BXSEC: LEA DX,ASK_SECSMOV AH,9INT 21HCALL INPUT_TIMEJC SECCMP BL,59HJNA SEC2LEA DX,BAD_SECSMOV AH,9INT 21HJMP SEC(以下程序段将输入的的时间保存在TIME变量中)SEC2: MOV SI,OFFSET TIME MOV [SI+2],BLPOP BXMOV [SI+1],BLPOP BXMOV [SI],BLRETGET_TIME ENDP;************************************(函数INPUT_TIME的功能是把用户输入的字符转化为时间值并存放在BL中;如果输入的不是数字,那么让标志寄存器CF=1)INPUT_TIME PROC NEARLEA DX,USERMOV AH,0AHINT 21HLEA DX,CRLFMOV AH,9INT 21HCMP USER+1,1JAE CONVERTMOV BL,0RETCONVERT: MOV CL,4MOV AL,USER+2CALL CHECKJC LEAVEAND AL,0FHMOV BL,ALCMP USER+1,2JB CLR_CFSHL BL,CLMOV AL,USER+3CALL CHECKJC LEAVEAND AL,0FHOR BL,ALCLR_CF: CLCLEAVE: RETINPUT_TIME ENDP;*************************** ********CHECK PROC NEARCMP AL,'0'JB ERRORCMP AL,'9'JA ERRORCLCRETERROR: LEA DX,BAD_DATAMOV AH,9 INT 21HSTCRETCHECK ENDP;*************************** ********(此函数将保存在TIME变量中的时间增加一秒)CHANGE_TIME PROC NEARPUSH AXPUSH CXPUSH DXPUSH SIMOV SI,OFFSET TIME MOV AL,[SI]MOV CH,ALMOV AL,[SI+1]MOV CL,ALMOV AL,[SI+2]MOV DH,AL(CH:CL:DH=时:分:秒) MOV AL,DHADD AL,1DAAMOV DH,ALCMP DH,60H JNE EXITCHG MOV DH,0MOV AL,CLADD AL,1DAAMOV CL,ALCMP CL,60H JNE EXITCHG MOV CL,0MOV AL,CHADD AL,1DAA MOV CH,ALCMP CH,24HJNE EXITCHGMOV CH,0 EXITCHG: MOV SI,OFFSET TIME MOV [SI],CHMOV [SI+1],CLMOV [SI+2],DHPOP SIPOP DXPOP CXPOP AXRETCHANGE_TIME ENDPCSEG ENDSEND START五.实验总结:1.由于与本实验相关的程序上学期编过(在屏幕上显示时间),所以这次实验我的程序中的主要部分是用的以前的,添加了将时间显示在数码管上的程序。