资源描述
微机原理与接口技术课程设计报告 设 计 题 目: 数字钟设计 学 院 名 称: 信息工程学院 专 业: 通信工程 班 级: 组 员: 指导 教师 : 王老师 2011年1月5日星期三 摘要:微机原理及接口技术是一门应用性、综合性、实践性较强的课程,没有实际的有针对性的设计环节,我们就不能很好的理解和掌握所学的技术知识,更缺乏解决实际问题的能力。所以通过有针对性的课程设计,会使我们学会系统地综合运用所学的理论知识,提高我们在微机应用方面的开发与设计本领,系统的掌握微机硬软件设计方法。通过课程设计实践,不仅要培养我们的实际动手能力,检验我们对本门课学习的情况,更要培养我们在实际的工程设计中查阅专业资料、工具书或参考书,掌握工程设计手段和软件工具,并能用设计报告表达设计思想和结果的能力。培养我们实事求是和严肃认真的工作态度。通过设计过程,要求我们熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使我们得到微机开发应用方面的初步训练。集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计,我们要熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。关键词:数字钟 时间显示 定时器设计目的:设计一种多功能数字钟,该数字钟具有基本功能和扩展功能两部分。其中,基本功能部分的有准确计时,以数字形式显示时、分、秒的时间 。扩展功能部分则具有:定时控制和复位功能。数字钟的电路也是由主体电路和扩展电路两部分构成,在电路中,基本功能部分由主体电路实现,而扩展功能部电路实现。这两部分都有一个共同特点就是它们都要用到振荡电路提供的256Hz脉冲信号。 为了使电路简单所设计的电路不具备校秒的功能。并且要用数码管显示时、分、秒, 初始时间由程序设定,通过控制按键进行计时。设计内容:通过设计数字钟,掌握8253芯片和微机接口原理和方法;熟悉汇编程序设计;熟悉编译环境;剖析实验箱、绘制原理电路并仿真、设计程序完成软硬件设计。总体设计:根据设计要求,初步思路如下:1)计时单元由定时/计数器8253的通道0来实现。定时采用硬件计数和软件技术相结合的方式,即通过8253产生一定的定时时间,然后再利用软件进行计数,从而实现24小时制定时。8253定时时间到了之后产生中断信号,8253在中断服务程序中实现时、分、秒的累加。2)时间显示采用实验平台上的6个LED数码管分别显示时、分、秒,采用动态扫描方式实现。3)校时通过键盘电路和单脉冲产生单元来输入。按键包括校时键、加1和减1键等。系统硬件设计主要利用微机实验平台上的电路模块。硬件电路主要由键盘电路、单脉冲产生单元、8253定时计数器、8255并行接口单元、LED显示电路和按键等等。系统的硬件电路设计框图如图1所示。微机系统82558253单脉冲发生电路数码管显示电路按键硬件电路设计框图如图1硬件设计:1、 LED数码管显示电路如图2 如图2 LED数码管是实现显示电路的器件2、8253计时器和8255并行通信接口结构框图如图所示3、5 所示3为8253定时器为计数器控制电路的3、按键显示电路如图所示4如图4 按键的作用是实现数字钟定时和计数的如图5所示为8255并行接口结构图4、CPU模块结构电路如图6所示6 为CPU电路实现软件运行和向控制端送信号的5、硬件整体电路图如图7所示程序流程图及清单:1)主程序如图所示(二)系统初始化 开始数码管扫描输出2)LED数码管显示框图开始初始化显示参数关闭所有参数取显示数据显示六位LED数码管关闭所有显示返回如图(三)数码管显示子程序3)按键扫描显示 开始初始化地址参数输出列扫描信号列扫描信号移位读入行信号该列有键入返回六列扫描完 如图(四) 按键扫描子程序框图4)计数器流程框图如图(五)所示保护现场秒单元+1N秒单元=60?秒单元清零,分单元+1分单元清零,小时单元+1分单元=60?时单元=24?小时单元=0显示时分秒恢复现场中断返回NNYYY仿真过程及结果:1、在按键没有按下的情况下,由于初始给它设定了时间如“82-55-08” 则开始只显示82-55-08,仿真电路图如下图(一)所示:2、在按键按下的情况下,在初始设定的时间下由秒个位开始变化,到十向秒十位加一,等到秒十位变为六十时向分为加一,以此类推到时位,完成数字中的变化。此仿真电路图如下图(二)所示。如图(一)所示电路图如图(二)所示电路图设计心得:两个星期的课程设计很快就结束了,想想每天在实验室的努力,看着自己两个星期的努力成果,心里感到格外的欣慰。从最初的无从下手,到分析设计,到编程调试,一步步走来,知识一点一滴的积累,最终完成了这份另自己满意的作品。在设计的过程中,我也遇到了一些困难,例如,在将键盘输入的值转换成显示数据的时候,我重复调用子程序GetKey,却没有得到我想要的结果,经过一系列的探索和修改,我在调用子程序GetKey前先调用了子程序TestKey,如果键盘有输入,再转入GetKey执行,结果完全正确。在设计定时器的时候也遇到了一些问题,由于实验箱的故障,输出的时间频率和真正的时间频不等,简单地将计数器的计数初值增大,必定会超出计数器的计数范围。我翻阅了相关的书本,在老师的帮助下成功解决了这个问题。解决方法是采用两个计数器串联的方式。 在克服一个又一个困难的过程中,巩固了我所学的理论知识,还培养我的实际动手能力,还培养我在实际的工程设计中查阅专业资料、工具书或参考书,掌握工程设计手段和软件工具,并能用设计报告表达设计思想和结果的能力。当然,我所完成的这个作品仍不完美。例如,缺乏人机互动功能,在修改时间的时候秒针停止计时。这些问题有待我在今后的学习过程中进一步完善。参考文献:1、王让定、朱莹、叶富乐等编著微机原理与接口技术第二版,清华大学出版社出版,2007.112、IBM-PC汇编语言程序设计 清华大学出版社出版,2001附录:源代码程序:DATA SEGMENT LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H X DW ? Y DW ? Z DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,46H ;0100 0110 8255 MOV AL,82H ;1000 0010 A方式0输出 B方式0输入 C输出 OUT DX,AL ;向8255写控制字 NEXT: MOV X,08 ;记录按键次数 MOV Y,53 MOV Z,82 LEA SI ,LED MOV AL,00010111B ;定时器0方式0 OUT 4EH,AL ;向8253写控制字 MOV AL,255 ;计数初值为1 MOV DX,48H ;计数器0的端口地址 OUT DX,AL REPEAT0: REPEAT1: CALL CONVER ;显示子程序 MOV DX,42H IN AL,DX ;将PB中的值输入到AL PB的值取决于PB7 CMP AL,0FEH JZ NEXT TEST AL,80H ;判断计数是否结束 TEST 相与但不改变相应的值 JNZ REPEAT1 REPEAT2: CALL CONVER MOV DX,42H IN AL,DX CMP AL,7EH JZ NEXT TEST AL,80H JZ REPEAT2 INC X ;计数结束,按键次数加1 CMP X,60 JNZ NEXT1 MOV X,0 INC Y NEXT1: CMP Y,60 JNZ NEXT2 MOV Y,0 INC Z NEXT2: CMP Z,24 JNZ NEXT3 MOV Z,0 NEXT3: CALL CONVER ;显示子程序 JMP REPEAT0 ;重新初始化定时器,为下一次按键准备 CONVER PROC MOV AX,X MOV CL,10 DIV CL ;按键次数除以10,商是次数的十位,存在AL中,余数是次数的各位,存在AH中 MOV BX,AX ;AH:BH AL:BL MOV AL,02H OUT 44H, AL ;向8255端口C的Pc0置1 使显示管1工作 MOV BP,BX AND BP,0FFH ;清除余数,保留商 MOV AL,SI+BP ; 使显示管显示相应的值 OUT 40H,AL ;将商的值显示 通过PA CALL DELY MOV AL, 01H ;0000 0010 OUT 44H, AL ;点亮各位led 置8255的Pc1为0 XCHG BH,BL ;交换商和余数 MOV BP,BX AND BP,0FFH ;清除商,保留余数 MOV AL,SI+BP OUT 40H,AL ;将余数的值显示 通过PA CALL DELY MOV AX,Y MOV CL,10 DIV CL ;按键次数除以10,商是次数的十位,存在AL中,余数是次数的各位,存在AH中 MOV BX,AX ;AH:BH AL:BL MOV AL,20H OUT 44H, AL ;向8255端口C的Pc0置1 使显示管1工作 MOV BP,BX AND BP,0FFH ;清除余数,保留商 MOV AL,SI+BP ; 使显示管显示相应的值 OUT 40H,AL ;将商的值显示 通过PA CALL DELY MOV AL, 10H ;0000 0010 OUT 44H, AL ;点亮各位led 置8255的Pc1为0 XCHG BH,BL ;交换商和余数 MOV BP,BX AND BP,0FFH ;清除商,保留余数 MOV AL,SI+BP OUT 40H,AL ;将余数的值显示 通过PA CALL DELY MOV AX,Z MOV CL,10 DIV CL ;按键次数除以10,商是次数的十位,存在AL中,余数是次数的各位,存在AH中 MOV BX,AX ;AH:BH AL:BL MOV AL,80H OUT 44H, AL ;向8255端口C的Pc0置1 使显示管1工作 MOV BP,BX AND BP,0FFH ;清除余数,保留商 MOV AL,SI+BP ; 使显示管显示相应的值 OUT 40H,AL ;将商的值显示 通过PA CALL DELY MOV AL, 40H ;0000 0010 OUT 44H, AL ;点亮各位led 置8255的Pc1为0 XCHG BH,BL ;交换商和余数 MOV BP,BX AND BP,0FFH ;清除商,保留余数 MOV AL,SI+BP OUT 40H,AL ;将余数的值显示 通过PA CALL DELY RET CONVER ENDP DELY PROC PUSH CX MOV CX,1000 L: LOOP L POP CX RET DELY ENDPCODE ENDS END START
展开阅读全文