倒计时钟课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

合肥学院
计算机科学与技术系
课程设计报告
2008 ~2009 学年第一学期
课程微机原理
课程设计名称倒计时数字钟
学生姓名田元
学号0604032038
专业班级06网工二班
指导教师肖连军
2009-2-15
倒计时数字钟
一. 题义分析及解决方案:
设计一个接口与七段LED显示器,显示一个倒计时时钟,显示初值为60分00秒,每隔一秒改变一次显示值,60秒为一分钟,LED显示器显示分、秒的动态值。

1 题义需求分析:
根据题意设计一个接口和七段LED显示器,本设计能显示一个具有固定初值的倒计时钟,能每隔固定时间间隔(1s),动态刷新显示值,并且能用LED显示器显示分秒的动态值,需要解决如下问题:
1).选择怎样的接口问题?
2).显示设备的选择问题?
3).初值的设置和输入问题?
4).计数值与显示码的转换及动态值显示问题?
5).相关芯片与译码器的选择问题?
2解决问题方法及思路:
1)硬件部分:根据七段LED显示器的硬件结构,为减少器件的使用量,可以选择芯片8255A,将七段LED显示器与8255A的两个八位并行输出口连接,比如使用8255的A口和B口。

其中,A口用于位选,确定选择哪一个显示灯;B口用于段选择,通过改变B口中的段码,使得显示灯能够显示出相应的时间数字。

8255与七段LED显示器采用的共阴极的接法。

2)软件部分:根据题义要求,可以设立一个段码表和一个显示缓冲区,以动态刷新的方式,显示四位数字表示的时间。

前者存放的是共阴极方式下数字0---9的段码;后者存放的是显示初值。

设置好8255的工作方式后,运行显示程序,将缓冲区中的数字通过LED灯显示出来。

为消除串码和闪烁,应让每位数字显示2~5毫秒后,关闭显示,之后再显示下一个数字。

四位数字显示完成后,将缓冲区中的时间减少一秒,重复显示,直到时间减少到00分00秒。

二.硬件选择分析
1、8255芯片:并行输入/输出接口
1) 8255的功能分析:
(1)芯片8255在本设计中主要用于选择位码和输出段码,同时也减少了器件数量。

Intel 公司生产的可编程并行接口芯片8255A
已广泛应用于实际工程中,例如8255A 与A/D、D/A 配合构成
数据采集系统,通过8255A 连接的两个或多个系统构成相互之
间的通信,系统与外设之间通过8255A 交换信息,等等,所有
这些系统都将8255A 用作为并行接口。

(2)、8255引脚图:8255是可编程并行接口,内部有3个相互独立的8位数据端口,即A口、B口和C口。

三个端口都可以作为
输入端口或输出端口。

A口有三种工作方式:即方式0、方式
1和方式2,而B口只能工作在方式0或方式1下,而C口通
常作为联络信号使用。

8255的工作只有当片选CS效时才能进
行。

而控制逻辑端口实现对其他端口的控制。

2)芯片选择——8255与8253的比较:
8255:
RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口
均被置成输入方式。

CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。

RD:读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写8255。

D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU
执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和
状态信息也通过数据总线传送。

PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。

PB0~PB7:端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。

PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。

端口C可以通过工作方式设定而分成
2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与
端口A和端口B配合使用,可作为控制信号输出或状态信号输入端
口。

8253:
8253具有3个独立的16位计数器,6种不同的工作方式。

计数寄存器用来寄存计数初值,计数工作单元为16位减1计数器,它
的初值便是计数寄存器内容,计数单元对CLK脉冲计数,每出现一个
CLK脉冲,计数器减1,当减为零时,通过OUT输出指示信号表明计数
单元已为零。

当作为定时器工作时,每当计数单元为零时,计数寄存器
内容会自动重新装入计数单元,而且CLK输入是均匀的脉冲序列,
于是OUT输出频率是降低了的(相对于CLK信号频率)脉冲序列。

当作为计数器工作时,表明只关心在CLK端出现(代表事件)的脉冲个
数,当CLK端出现了规定个数的脉冲时,OUT输出一个脉冲信号
3) 8255A的引脚信号
(1). 与外设相连的
图2-1 8255A内部结构框图
PA7~PA0:A口数据信号线。

PB7~PB0:B口数据信号线。

PC7~PC0:C口数据信号线。

4)8255A的端口录址及操作功能表:
表2-1 8255A 端口录址及操作功能
(1)8255A 的方式控制字:
| | | | | | | 特征位 00方式0 1输入 1输入 0方式0 1输入
1输入 01方式1 0输出 0输出 1方式1 0输出 0输出 10方式2
图2-2 8255A 的方式控制字
8255A 方式选择字
(2)8255A 的置位/复位控制字
D0~ D7 000~111 0写入0 1写入1 图
2-3 8255A 的端口置位/复位控制字格式
(3)8255A 的主要技术参数分析
8255A 技术参数表
表2-2 8255A的技术参数表
由上可知:8255A的达林顿驱动电流最大值为4.0mA。

5)8255在本实验中的作用:
1)8255作为可编程接口芯片实现了外设(LED数码管显示器,逻辑开关)与8086之间的数据传输,解决了两者之间的速度不匹配的矛盾,具有数据缓冲功能。

2)8255的A口工作与方式0,作为输入口,其PA0~PA7分别与逻辑开关的K1~k8相连,其中开关量k8用于判断是否修改时间(若为0不修改,若为1则修改),K6~k7用于判断修改哪一位,K1~k4为要修改的值;B口工作与方式0,作为输出口,其PB0~PB7分别与LED数码管显示器的八段a.b.c.d.e.f.g.dp相连,C口作为输出口,其PC0~PC3L分别与LED 数码管显示器的ED3~LED0相连,作为位选。

6)CPU接口(数据总线缓冲器和读/写控制逻辑)
(1)数据总线缓冲器
这是一个8位双向三态缓冲器,三态是由读/写控制逻辑控制的。

这个缓冲器是8255A与CPU数据总线的接口。

所有数据的
输入/输出,以及CPU用输出指令向8255A发出的控制字和用输入
指令从8255A读入的外设状态信息,都是通过这个缓冲器传递的。

(2)读/写控制逻辑
它与CPU的6根控制线相连,控制8255A内部的各种操作。

控制线RESET用来使8255A复位。

和地址线A1及A0用于芯片选
择和通道寻址。

控制线和用来决定8位内部和外部数据总
线上信息传送的方向,即控制把CPU的控制命令或输出的数据送
到相应的通道,或把状态信息或输入数据送到CPU。

8255A的读/
写控制逻辑的作用,是从CPU的地址和控制总线上接受输入的信
号,转变成各种命令送到A组或B组控制电路进行相应的操作。

7 )与CPU相连的
RESET:复位信号。

当信号来时,所有寄存器都被清除。

同时三个数
据端口被自动置为输入端口。

D7~D0:它们是8255A的数据线
和系统总线相连。

CS:片选信号。

在系统中,一般根据全部接口芯片来分配若于低位地
址(比如A5、A4、A3)组成各种芯片选择码,当这几位地址
组成某一个低电平,于8255A被选中。

只有当有效时,读信
号写才对8255进行读写。

RD:读信号。

当此信号有效时,CPU可从8255A中读取数据。

WR:写信号。

当此信号有效时,CPU可向8255A中写入数据。

A1、A0:端口选择信号。

8255A内部有3个数据端口和1个控制端口,
共4个端口。

规定当A1、A0为00时,选中A端口;为01
时,中B端口;为10时,选中C端口;为11时,选中控制
口。

2选择器件LED:
1)芯片在本设计中的作用:LED发光二极管在本设计中采用7段数字发光
二极管,作为终端显示。

显示时间的分秒。

2) LED的功能分析:物理构造:LED发光二级管,采用砷化镓、镓
铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。

3)工作原理:当在发光二极管PN结上加正向电压时,PN结势垒降低,载流子的扩散运动大于漂移运动,致使P区的空穴注入到N区,N区的电子注
入到P区,这样相互注入的空穴与电子相遇后会产生复合,复合时产生的能量
大部分以光的形式出现。

4)数字成像:将七个发光管进行组合,排列成数字图形8,再根据需要控制七个管的亮与灭,即可显示出定义数字。

有段选码和位选码确定数字1~8的输出并在延时程序中保持复位。

它是一种当外加电压超过额定电压时发生击穿,并因此而产生可见光的器件。

这种数码管是有7段或8段笔画显示器组成一个字符而形成的。

如下图:
(a)(b) (c)
(d)
图2-4 LED结构图
LED显示管段选码编码表
表2-3 LED显示管段选码编码表
5)LED的技术参数分析
LED发光二极管的压降一般为1.5-2.0V,其工作电流一般取10-20Ma,发光二极管可应用于直流驱动电路、交流驱动电路和脉冲驱动电路。

由于8255A的最大驱动电流为4.0mA,而LED的工作电流一般为10-20mA,所以需要加一个驱动器74LS244。

3、74LS244芯片:
1)74LS244在本设计中的作用:
(1)数据的缓冲驱动,传递地址和数据信号。

(2)是数据总路线收发器,也是三态的总线收发器。

具有八个输
入引脚和八个输出引脚,两个使能端。

当它的使能端为有效低电平
时,输出端就能将输入信息放大输出。

2)74LS244的逻辑图及真值表
2-574LS244逻辑图表2-4 74LS244真值表
3)74LS244的主要技术参数
表2-5 74LS244的主要技术参数
4、开关
1)开关的作用:
本次设计需要用七位开关置数来修改时间。

2)开关功能的分析:注:由于本程序后来改进加入了时的倒计,所以下面
的开关是针对有时、分、秒的设计
开关K4~K1位设置输入的时间数字(0~15),K7~K5用来控制对不时间的
时分秒位数的修改,k8控制程序的运行与否,仅当K8为1时即程序停
止运行时才可以修改时间。

3)逻辑开关及其编码
图2-6逻辑开关表2-6逻辑开关逻辑编码表
开关高电平:+5V、低电平:0V
三.硬件总逻辑图及其说明
图3-1 硬件总逻辑图
AD0~AD19经锁存器分别送往总线收发器和地址译码器。

经总线收发器将低八位数据与8255的八位数据线相连地址线A1、A2与8255的A0、A1相连,即偶地址有效。

控制总线RD、WR、RESET分别与8255相应的控制信号线连接。

片选信号CS0与8255的CS信号连接,则8255的端口地址为04A0~04A6。

8255的PA口用于存放位选码,使用的是高四位,分别连接到四个七段LED显示器上。

使用的是共阴极接法。

PB口用于存放段选码,八位全部连接到八个二极管的阳极上。

所以,PA口中的信号是“0”才能表示选中了该位七段LED显示器,而PB口中信号为“1”表示使该二极管发光,否则,不发光。

四.控制程序设计
1、控制程序设计思路说明:
程序框架是一个主程序用于设置8255的工作方式;一个显示程序用于显示当前的时值、分值和秒值,在其中还设置了一个小的程序用于延时,以稳定显示的数值。

采用动态刷新的方式将六位数字显示一遍。

每遍约20秒的时间,显示约50次可使得时间约为一秒。

然后将时间减少一秒,再次将时间显示出来。

如此循环,直到时间减少到00时00分00秒为止。

2、程序流程图
图4-1 总流程图
修改缓冲区子程序
图4-2 计时子程序流程图显示子程序
图4-3 显示子程序流程图
3、控制程序
.MODEL TINY
PCIBAR3 EQU 1CH ;8位I/O空间基地址(它就是实验仪的基地址, 也为DMA & 32 BIT RAM板卡上的8237提供基地址)
Vendor_ID EQU 10EBH ;厂商ID号
Device_ID EQU 8376 ;设备ID号
.STACK 100
.DA TA
IO_Bit8_BaseAddress DW ?
msg0 DB 'BIOS不支持访问PCI $'
msg1 DB '找不到Star PCI9052板卡$'
msg2 DB '读8位I/O空间基地址时出错$'
COM_ADD DW 00F3H ;控制口偏移量
PA_ADD DW 00F0H ;PA口偏移量
PB_ADD DW 00F1H ;PB口偏移量
PC_ADD DW 00F2H ;PC口偏移量
len db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码表
time db 00h,00h,00h,00h,04h,02h
len0 db 00h,40h,60h,20h,30h,70h
len1 db 09h,05h,09h,05h,03h,02h
.CODE
START: MOV AX,@DA TA
MOV DS,AX
NOP
CALL InitPCI
CALL ModifyAddress ;根据PCI提供的基地址,将偏移地址转化为实地址
;********************************************************************* MOV al,89h ;10001001b初始化工作方式控制字
MOV dx,COM_ADD ;工作方式寄存器端口地址
OUT dx,al
loop3: MOV dx,PC_ADD ;PC口端口地址
IN al,dx ;读入八位开关量
AND al,80h ;判断最高位K8是否为1
CMP al,80h ;为1时设置数据缓冲区初值
JE setlen
CALL display1 ;调用显示子程序,显示一秒
CALL alter ;调用数据缓冲区修改子程序
JMP loop3
setlen: MOV bx,offset time ;数据缓冲区送BX
MOV dx,PC_ADD ;PC口端口地址
IN al,dx ;读八位开关量
MOV ah,al ;AH=AL 保存数据,下面的操作会改变al的值
AND ax,0f70h ;选取5 6 7进行输入选择判断,并保留ah中的低四位
MOV si,offset len0
loop0: MOV cl,byte ptr [si]
CMP al,cl
JNE loop00
MOV byte ptr [bx],ah ;读入的开关量低四位存入缓冲
CALL display1 ;调用显示子程序
JMP loop3
loop00: INC si
INC bx
JMP loop0
;********************************************************************* display1 PROC ;显示子程序
PUSH si ;保护SI
PUSH dx ;保护DX
PUSH cx ;保护CX
PUSH bx ;保护BX
PUSH ax ;保护AX
PUSH di ;保护DI
MOV di,40h ;控制1s的计时
loop1: MOV si,offset time ;数据缓冲区首地址送SI
MOV cx,6
MOV ah,0feh ;设置位选选中秒的个位
loop2: MOV al,byte ptr [si] ;位移量
MOV bx,offset len ;查表转换
XLAT ;查数据段表,[al+bx]->al
MOV dx,PB_ADD ;PB口地址
OUT dx,al ;送段选码
MOV al,ah ;位选码AL
MOV dx,PA_ADD ;PA口地址
OUT dx,al
CALL delay ;调用延时子程序
MOV al,0ffh ;禁止显示
OUT dx,al
ADD si,1
ROL ah,1
LOOP loop2
DEC di ;控制显示一秒
JNE loop1
POP di
POP ax
POP bx
POP cx
POP dx
POP si
RET
display1 ENDP
;********************************************************************* alter PROC ;数据缓冲区子程序
PUSH si
PUSH ax
PUSH bx
PUSH dx
MOV si,offset time ;数据缓冲区首值送BX
MOV bx,offset len1
loop7:MOV ax,[si] ;缓冲区中的秒值取入ax
MOV dx,[bx]
SUB al,1
CMP al,-1
JG loop6
MOV al,dl
SUB ah,1
CMP ah,-1
JG loop6
MOV ah,dh
MOV [si],ax
INC si
INC si
INC bx
INC bx
JMP loop7
loop6:MOV [si],ax ;修改后的值再保存回缓冲区
POP dx
POP bx
POP ax
POP si
RET
alter ENDP
;********************************************************************* delay PROC ;延时子程序
PUSH cx
MOV cx,0ffffh
loop5:
LOOP loop5
POP cx
RET
delay ENDP
;********************************************************************* InitPCI PROC NEAR
MOV AH,00H
MOV AL,03H
INT 10H ;清屏
MOV AH,0B1H
MOV AL,01H
INT 1AH
CMP AH,0
JZ InitPCI2
LEA D X,msg0
InitPCI1: MOV AH,09H
INT 21H
JMP Exit
InitPCI2: MOV AH,0B1H
MOV AL,02H
MOV CX,Device_ID
MOV DX,Vendor_ID
MOV SI,0
INT 1AH
JNC InitPCI3 ;是否存在Star PCI9052板卡
LEA D X,msg1
JMP InitPCI1
InitPCI3: MOV DI,PCIBAR3
MOV AH,0B1H
MOV AL,09H
INT 1AH ;读取该卡PCI9052基地址
JNC InitPCI4
LEA D X,msg2
JMP InitPCI1
InitPCI4: AND CX,0FFFCH
MOV IO_Bit8_BaseAddress,CX
RET
InitPCI ENDP
ModifyAddress PROC NEAR
ADD COM_ADD,CX
ADD PA_ADD,CX
ADD PB_ADD,CX
ADD PC_ADD,CX
RET
ModifyAddress ENDP
Exit: MOV AH,4CH
INT 21H
END START
五.上机调试过程
1、硬件调试:本实验所用的硬件主要是实验箱和集成的七段LED显示板。

共有
四个七段LED显示器,采用的是共阴极接法,七段LED的共阴极接地,CE
端接低电平,七段LED的阳极接到八个模拟开关上。

改变开关量,则七段
LED显示出相应的数字。

将四个七段LED测试完后,全部正常。

硬件调试成
功。

2、软件调试:
1)此次实验的设备原因,在正式编程之前要加入一段设备的初始化程序,检查设备,读取设备的一些信息,然后是自己设计代码完成实验要求,2)来添加的新的任务中要求初始值可以通过逻辑开关随意设置,这就要对C口的PC0~PC7另外编写一段程序进行相应的判断和控制。

这些都不是很困难,关键是编写的程序既要完成些功能又要简短才行。

若程序太长,虽然可以编译并且链接成功,但显得很烦琐,看起来也很费力。

所以,修改的程序时尽量使用循环控制语句来完成的。

3)有太多的判断,再根据判断转去执行不同的操作,这就需要使用标号,但同样的标号如果使用太多就又会给程序产生逻辑上的混乱,所以我使用查表法将要判断的值存入缓冲区中,要判断时就于与缓冲区中的值比较,这样就使得程序简单明了。

有语法错误修改起来就比较容易了。

3、联机调试:在串口通讯成功时,打开程序文件,编译后连接,程序结构无问题
时连接成功,开始单步运行并调试,然后全速运行。

六.设计结果分析及问题讨论
1、课程设计结果及分析:成功的完成了倒计1S的显示及在时分秒之间的转换,
能循环倒计。

2、问题讨论:
1)8255的工作方式
2)程序的优化
3)输入及运行开关的设置与确定
3、收获,体会和建议:
在微机原理理论课程的学习结束以后,感到自己学到的知识非常片面,而课程设计就是一个很好的机会,不仅可以巩固书本上的内容,更可以让知识和应用结合起来。

事实证明这确实对我的学习产生了很大的帮助,从刚开始对理论知识的模糊到后来的逐渐清晰,这两周我收获了很多。

在刚拿到课题时,从学长口中得知要用到8255A芯片以及LED七段显示器,而自己并没有做太多的思考,于是在老师的第一次验收时发现自己根本不清楚为什么选择这些硬件。

后来比较了其他的一些芯片,才得出了结论。

本设计的上机实验历时两个星期,此外还包括许多预习工作。

由于课程设计涉及到的知识点比较多,所以我去图书馆查阅了很多有关自己的课题方面的资料。

不仅巩固了以前所学的知识,也收获了不少新的知识。

在上机实验的过程中,
也体会到了有强大的理论储备是基础,但在实践过程中自己动手操作又是另一回事。

通过本课题,使我们对8255及LED内部结构与及应用有了进一步的认识和理解,特别是8255A作为并行接口芯片其用途也很广泛,可以用于键盘接口,LED 显示器接口,打印机接口等。

同时通过对8255芯片的初始化程序的编写,也提高了自己的编程能力;此外通过上机调试,也锻炼了我们实际动手的能力,以及如何分析问题,解决问题的能力,为将来走向工作岗位做铺垫。

另外就是增强了我用汇编语言来编写程序的能力。

以前学习汇编语言时,学的很不扎实,直接导致了在实验过程在中编写程序很不顺利。

出现了诸多错误。

好在通过与同学讨论,以及查阅了大量的资料,纠正了错误。

使我对汇编语言实现了第二次的学习,更深一层的理解并掌握了汇编语言。

计算机语言,必须通过自己的亲自编写来对实际问题进行解决。

就比如说这次实验,虽然对汇编语言的指令及编写格式已经有了很透彻的了解,但是在实际编写过程中,却出现了不知如何表达的问题。

这种能力的强化是需要经常锻炼的。

本次课程设计正好给了我一次锻炼的机会,增强了我在理解的基础上,能编写汇编语言解决实际问题的能力。

做实验千万要细心,避免由于粗心造成的错误。

如果调试不出理想的结果,千万不能急躁,要从硬件到软件一步步仔细的检查,找到错误并纠正。

总之,做实验一定要戒急戒躁,一定要有耐心,要对自己的能力充满信息。

最后说说自己的一些小建议。

学校应多给学生这样的动手实践的机会,理论课和实践课应该保持想协调的教学效果。

多让学生分组讨论,共同完成某项实验,这样不仅可以使每个同学得到锻炼,同时也培养了学生的团队精神。

还有一定要谢谢老师的指导帮助,从而使我能顺利的完成课程设计,并受益匪浅。

设计者:田元
完成时间:2008年12月。

相关文档
最新文档