倒计时数字钟解析.docx

上传人:b****5 文档编号:6650355 上传时间:2023-01-08 格式:DOCX 页数:22 大小:183.11KB
下载 相关 举报
倒计时数字钟解析.docx_第1页
第1页 / 共22页
倒计时数字钟解析.docx_第2页
第2页 / 共22页
倒计时数字钟解析.docx_第3页
第3页 / 共22页
倒计时数字钟解析.docx_第4页
第4页 / 共22页
倒计时数字钟解析.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

倒计时数字钟解析.docx

《倒计时数字钟解析.docx》由会员分享,可在线阅读,更多相关《倒计时数字钟解析.docx(22页珍藏版)》请在冰豆网上搜索。

倒计时数字钟解析.docx

倒计时数字钟解析

合肥学院

计算机科学与技术系

 

微机原理与接口技术

课程设计报告

2008~2009学年第1学期

 

课程

微机原理与接口技术

课程设计名称

倒计时数字钟

学生姓名

昌飞霞

学号

0604032012

专业班级

网络工程专业(06网工2)

指导教师

肖连军老师

2009年2月

一、题意分析及解决方案

1.题义与需求分析

用STARES598PCI单板开发机设计一个接口与七段LED显示器,显示一个倒计时数字钟,显示初值为60分00秒,每隔一秒改变一次显示值,60秒为一分钟,LED显示器显示分、秒的动态值。

根据题目要求需要考虑以下几方面问题:

1初值的设置及输入问题倒计时时需要从一个固定的值开始倒计时,这个初值

需要用输入一个输入设备输入。

2接口设计当初值设置完毕,应将时间信息传送到外设中,即设计CPU与外设

之间传送信息的接口。

3动态值的显示从初始值开始每隔一秒就要动态的改变这个初值,并且把这个

值用显示设备显示出来。

4显示设备为了使用者能够清楚方便的使用该产品,倒计时数字钟要把每隔

一秒后相应数值动态的显示出来,这样才会使得设计出来的产品有应用价值。

5一秒的控制倒计时钟需要每隔一秒改变一下显示值,所以需要一个操作来

控制一秒这个固定延时。

需要注意的是,在选择芯片或选择其它元器件时,应当考虑所选器件在设计中所起的实验效果、产品成本、产品可靠性、可行性以及使用的难易程度等等,这都是我们在设计过程中需要考虑的因素。

2.解决问题的方法与思路

1)硬件部分

①初值的设置及输入问题

倒计时钟是从初值开始一秒一秒的倒计时,可以使用一组八位二进制逻辑开关作为输入设备。

需要输入的有秒个位、秒十位、分个位、分十位、时个位、时十位,用K7~K5来选择要输入的是哪位,000时表示设置的是秒个位,001时设置的是秒十位,010时设置的是分个位,011时设置的是分十位,100时设置的是时个位,101时设置的是时十位。

K4~K1用来表示需要设置位的具体值,0000~1001分别表示十进制数的0~9。

K8作为主控开关,为1时表示需要设置初值,为0时不需设置初值及开始倒计时。

②接口设计

接口芯片是CPU与外设之间的界面,一方面要接收CPU进行输入/输出所发出的一系列信息,另一方面又要与外设交换数据以及一些联络信号等。

为增加本设计的灵活性,在接口的选择上要求是可编程的输入/输出接口,而可编程的输入/输出接口又分为可编程并行接口(8255A)和可编程串行接口(8251A)。

8255A芯片是一种可编程通用并行接口芯片,它有24条可编程的I/O引脚,采用40脚双列直插式封装,单一+5V电源,全部输入/输出均与TTL电平兼容。

在8255A中有A、B、C三个并行输入/输出端口,其功能全部由程序设定,每个端口都有自己的特点。

A口、B口通常作为独立的I/O端口使用,C口也可以作为一般的I/O端口使用,但当A口、B口作为应答式的I/O端口使用时,C口分别以来为A口、B口提供应答控制信号。

8251A芯片是一种可编程通用串行接口芯片,是通用的同步异步接收/发送器,它的作用是把计算机的并行数据转换成串行数据发送出去,把接收到的外部串行数据转换成并行数据送入计算机内部,它可以通过编程选用同步/异步通信方式,它具有独立的发送器和接收器,能够以单工、半双工或全双工方式进行通信,并提供相应的控制信号。

如果采用8251A作为计时时钟的输入/输出接口,那么就需要把计算机的并行数据转换成串行数据发送出去,把接收到的外部串行数据转换成并行数据送入计算机内部,这个过程是需要时间的,所以从时间效率方面来说并没有8255A芯片合适;另外,可编程并行接口(8255A)的是数据传输速度快,虽然使用的通信线多,但是传输距离并不算远,所以在解决接口问题时,采用可编程并行接口(8255A)是比较合适的。

采用8255A作为计时时钟的输入/输出接口,那么8255A的三个端口设置如下:

PA口工作与方式0,作为输出口,其PA0~PA3分别与外设的位选码相连,用以确定显示的是秒还是分的值;PB口工作与方式0,作为输出口,其PB0~PB7分别与外设相连,作为段选线;PC口用来为PA口、PB口提供应答控制信号。

③显示设备

倒计时钟的显示问题可以通过LED数码管来解决,LED是发光二级管(Light-EmittingDiode)的简称,它是将七个发光管进行组合,排列成数字图形8,再根据需要控制七个管的亮与灭,即可显示出定义数字在本设计中采用7段数字发光二级管,做为终端显示,因为它的成本低,可靠性高,从显示的效果上来说也可以满足显示计时时钟的需要。

2)软件部分(汇编语言编写程序)

①动态值控制问题

该部分可通过软件编程来实现。

首先将秒个位减一判断结果是否小于0,如果小于0则置秒个位为9,否则直接显示。

再将秒十位减一判断结果是否小于0,如果小于0则置秒十位为5,否则直接显示。

同理再判断分个位、分十位、时个位、时十位直到减为00:

00:

00。

②一秒的控制

可以通过做N次空操作来实现。

可以先将循环部分每句程序的时钟周期从参考资料中查到再相加,算出该部分运行的时间T。

最后用1S除以T就得到了N。

二、硬件设计

1.选择芯片8255A

1)8255A在本设计中的作用

PA口、PB口作为作为输出口,PA口的低4位与LED显示器的位选信号LED0到LED3相连作为位选码的输出口,高4位禁止。

PB口与LED0~LED3的段选信号相连作为段选码的输出口。

PC口与逻辑开关相连把读入的二进制数送8086CPU。

PA、PB、PC三口均工作在方式0状态。

PC0~PC7与逻辑开关K1~K8相连。

当控制程序运行到读开关变量时,逻辑开关状态经PC口送8086CPU。

PA0~PA3与LED0~LED3相连当控制呈现运行至显示16进制数时送出位选码选中相应位,对应的七段LED显示器显示16进制数的字型,PB0~PB3与LED的段选信号相连,对显示位进行控制。

在使用8255A前首先要对它进行初始化设置,设置它的方式选择控制字。

2)8255A的功能分析

图2-18255A的内部框图

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

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

A口有三种工作方式:

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

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

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

8255有三种工作方式。

方式0:

基本输入输出,端口与外设之间无联络信号,只能使用无条件传送方式输入输出数据;方式1:

是选通输入输出方式,PC口用作联络信号;方式2:

双向数据传送方式,仅A口有此功能。

本设计用到工作方式0。

表2-18255A的操作功能

A1A0

操作

数据传送方式

00100

读A口

A口数据→数据总线

00101

读B口

B口数据→数据总线

00110

读C口

C口数据→数据总线

01000

写A口

数据总线数据→A口

01001

写B口

数据总线数据→B口

01010

写C口

数据总线数据→C口

01011

写控制口

数据总线数据→控制口

3)8255A的技术参数

①与外设相连的

PA7~PA0:

A口数据信号线。

PB7~PB0:

B口数据信号线。

PC7~PC0:

C口数据信号线。

②与CPU相连的

RESET:

复位信号。

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

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

D7~D0:

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

CS:

片选信号。

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

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

RD:

读信号。

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

WR:

写信号。

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

A1、A0:

端口选择信号。

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

规定:

A1、A0为00时,选中A端口;

A1、A0为01时,选中B端口;

A1、A0为10时,选中C端口;

A1、A0为11时,选中控制口。

③参数说明:

输入最低电压:

min=-0.5V,max=0.8V

输入最高电压:

2.0V

输出最低电压:

0.45V

输出最高电压:

2.4V

8255A的方式控制字

D7D6D5D4D3D2D1D0

1

0

0

0

1

0

0

1

1:

工作方式A口方式0输出B口方式0输出

C口高4位输入C口低4位输入

图2-28255A的方式控制字表

方式0的工作特点:

这种方式通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。

通道的功能为:

两个8位通道:

通道A和B。

两个四位通道:

通道C高4位和低四位,任何一个通道可以作输入/输出,输入是不锁存的,输出是锁存的,在方式0时各个通道的输入/输出可有16种不同的组合。

D7D6D5D4D3D2D1D0

0

X

X

X

写入位编码

写入内容

写入位编码0写入0

D0-D7000-1111写入1

图2-38255A的置位/控制字表

8255主要用作数据的输入输出端口,电源为5V,输入最低电压:

-0.5V~0.8V,输入最高电压:

2.0V,输出最低电压:

0.45V,输出最高电压:

2.4V。

8255的达林顿驱动电流最大4.0mA

表2—28255A技术参数

8255A技术参数

测试条件

规范值

单位

输入低电平电压VIL

0.8

-0.5

输入高电平电压VIH

VCC

2.0

输出低电平电压VOL(数据端口)

IOL=2.5MA

0.45

输出低电平电压VOL(外围端口)

IOL=1.7MA

0.45

输出高电平电压VOH(数据端口)

IOR=-400MA

2.4

输出高电平电压VOH(外围端口)

IOH=-200MA

2.4

达林顿驱动电流IOAR

-4.0

-1.0

mA

电源电流   ICC

120

mA

输入负载电流 IIL

IIN=0~VCC

I/O

mA

输出浮动电流 IOF

VOR=0.45~VCC

I/O

mA

2.选择芯片LED

1)LED在本设计中的作用

LED为发光二极管(Light-EmittingDiode),在本设计中采用7段数字发光二级管,做为终端显示,主要是作为动态显示计时的秒个位、秒十位、分个位、分十位、时个位、时十位的值。

2)LED的功能分析

LED发光二级管,采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。

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

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

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

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

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

图2-4LED数码管内部结构

表2-3LED显示管段选码编码表

dp

g

f

e

d

c

b

a

显示数码

二进制编码

0

0

1

1

1

1

1

1

0

3FH

0

0

0

0

0

0

1

1

1

O6H

0

1

0

1

1

0

1

1

2

5BH

0

1

0

0

1

1

1

1

3

4FH

0

1

1

0

0

1

1

0

4

66H

0

1

1

0

1

1

0

1

5

6DH

0

1

1

1

1

1

0

1

6

7DH

0

0

0

0

0

1

1

1

7

07H

0

1

1

1

1

1

1

1

8

7FH

0

1

1

0

1

1

1

1

9

6FH

(1)静态:

数码管显示过程持续得到信号,与数码管接口的I/O口线为专用。

特点是无闪烁,元器件多,占I/O线多,无须扫描,节省CPU时间,编程简单。

(2)动态:

数码管显示过程轮流得到信号,与各数码管接口的I/O口线为共用。

特点是有闪烁,元器件少,占I/O线少,必须扫描,花费CPU时间,编程复杂(有多个LED时尤为突出)。

3)LED的技术参数

消耗功率PM=150mW

最大工作电流IFM=100mA

正常工作电流IF=40mA

正向压降VF≤1.8V

燃亮电压为5V

共阴极LED的PM=300mW,IFM=200mA,IF=60mA,VF≤1.8V,VR≥5V,发红光。

发光颜色有:

红色光、黄色光、绿色光、红外光等。

发光二极管应用电路有四种,即直流驱动电路、交流驱动电路、脉冲驱动电路、变色发光驱动电路。

表2-4LED技术参数

PCW

IF

Vr

Ir

If

^P

对应型号

散射颜色

BT235-2

70

25

5

≥1.5

≤2.5

200

SEL-10

红色

BT1441529

100

40

5

≥0.5

≤2.5

565

绿色

BT1341529

100

40

5

≥0.5

≤2.5

585

蓝色

3.选择芯片逻辑开关

1)逻辑开关在本设计中的作用

4位开关作为倒计时的初始值的设定,3位开关作为位选,1位作为主控开关。

开关K4~K1位设置输入的时间数字(0~9),K7~K5用来控制对时分秒位数的修改,k8控制程序的运行与否,仅当K8为1时即程序停止运行时才可以修改时间。

表2-5开关设置的位

K5K6K7

对应的操作

000

修改秒的个位

001

修改秒的十位

010

修改分的个位

011

修改分的十位

100

修改时的个位

101

修改时的十位

表2-6开关编码表

K4K3K2K1

数字

0000

0

0001

1

0010

2

0011

3

0100

4

0101

5

0110

6

0111

7

1000

8

1001

9

2)逻辑开关的功能分析

逻辑电平开关可以进行简单的高电平和低电平信号的输入。

在8255A可编程并行口的实验中,它作为一种简单的输入设备,当开关拨上时为1,拨下时为0。

3)逻辑开关的技术参数

当K接VCC=+5V时为1,接地时输出为0。

4、硬件总逻辑图及其说明

图2-5硬件总逻辑图

PC机的AD0~AD19经数据总线与8255A的D0~D7相连,地址线A1、A0与8255的A0、A1相连,即偶地址有效。

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

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

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

使用的是共阴极接;PB口用于存放段选码,八位全部连接到八个二极管上;PC口用作信号输入。

三、控制程序设计

1.控制程序设计思路说明

本课程设计用到了6片LED显示器,分别显示倒计时时钟的秒个位、秒十位、分个位、分十位、时个位、时十位。

为节省硬件,所以采用动态扫描显示方式,每次只使一位LED显示器公共端的电平有效,因而每次只有一位LED显示器发光。

但由于人眼的视觉暂留的效应,只要间隔的时间足够短,则依次从右向左显示时就感觉是6位LED是同时点亮一样。

用8255的PA口接LED显示器的公共端作位选择,用PB口接LED的各片的发光二极管作段选择的控制,用PC口接二进制开关作初始值的控制输入。

同时要解决每隔一秒变化一次显示的问题,所以需要一个时间控制定时。

在本程序中用了一个延时子程序来完成这个功能的。

在LED显示器上显示的数字是从0~9共十个字符,将其相应的转换代码存入一个缓冲区中,用查表转换的方式来控制编程调用。

2.控制程序流程图

图3-1程序流程图

图3-2显示子程序流程图

3.控制程序

.MODELTINY

PCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA&32BITRAM板卡上的8237提供基地址)

Vendor_IDEQU10EBH;厂商ID号

Device_IDEQU8376;设备ID号

.STACK100

.DATA

IO_Bit8_BaseAddressDW?

msg0DB'BIOS不支持访问PCI$'

msg1DB'找不到StarPCI9052板卡$'

msg2DB'读8位I/O空间基地址时出错$'

COM_ADDDW00F3H;控制口偏移量

PA_ADDDW00F0H;PA口偏移量

PB_ADDDW00F1H;PB口偏移量

PC_ADDDW00F2H;PC口偏移量

lendb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码表

timedb00h,00h,00h,00h,04h,02h

len0db00h,10h,20h,30h,40h,50h;00:

秒个位,10:

秒十位,20:

分个位,30:

分十位,

len1db09h,05h,09h,05h,09h,09h

.CODE

START:

MOVAX,@DATA

MOVDS,AX

NOP

CALLInitPCI

CALLModifyAddress;根据PCI提供的基地址,将偏移地址转化为实地址

;*********************************************************************

MOVal,89h;10001001b初始化工作方式控制字

MOVdx,COM_ADD;工作方式寄存器端口地址

OUTdx,al

loop3:

MOVdx,PC_ADD;PC口端口地址

INal,dx;读入八位开关量

ANDal,80h;判断最高位K8是否为1

CMPal,80h;为1时设置数据缓冲区初值

JEsetlen

CALLdisplay1;调用显示子程序,显示一秒

CALLalter;调用数据缓冲区修改子程序

JMPloop3

setlen:

MOVbx,offsettime;数据缓冲区送BX

MOVdx,PC_ADD;PC口端口地址

INal,dx;读八位开关量

MOVah,al;AH=AL保存数据,下面的操作会改变al的值

ANDax,0f70h;选取567进行输入选择判断,并保留ah中的低四位

MOVsi,offsetlen0;ah=要设置的具体的值,al=对哪位进行设置

loop0:

MOVcl,byteptr[si]

CMPal,cl

JNEloop00;不是要修改的位

MOVbyteptr[bx],ah;读入的开关量低四位存入缓冲

CALLdisplay1;调用显示子程序

JMPloop3

loop00:

INCsi;指针指向下一个需要修改的位

INCbx;指针指向下一个需要修改的数值

JMPloop0

;*********************************************************************

display1PROC;显示子程序

PUSHsi;保护SI

PUSHdx;保护DX

PUSHcx;保护CX

PUSHbx;保护BX

PUSHax;保护AX

PUSHdi;保护DI

MOVdi,50h;控制1s的计时

loop1:

MOVsi,offsettime;数据缓冲区首地址送SI

MOVcx,6

MOVah,0feh;设置位选选中秒的个位

loop2:

MOVal,byteptr[si];位移量

MOVbx,offsetlen;查表转换

XLAT;查数据段表,[al+bx]->al

MOVdx,PB_ADD;PB口地址

OUTdx,al;送段选码

MOVal,ah;位选码AL

MOVdx,PA_ADD;PA口地址

OUTdx,al

CALLdelay;调用延时子程序

MOVal,0ffh;禁止显示

OUTdx,al

ADDsi,1;

ROLah,1;选中前一位进行操作

LOOPloop2

DECdi;控制显示一秒

JNEloop1;总共循环50h次每次是一个delay时间

POPdi

POPax

POPbx

POPcx

POPdx

POPsi

RET

display1ENDP

;********************************************************************

alterPROC;数据缓冲区子程序

PUSHsi

PUSHax

PUSHbx

PUSHdx

MOVsi,offsettime;数据缓冲区首值送BX

MOVbx,offsetlen1;将每位要借位后下一次的初值读入bx

loop7:

MOVax,[si];缓冲区中的秒值取入ax

MOVdx,[bx]

SUBal,1

CMPal,-1

JGloop6

MOVal,dl

SUBah,1

CMPah,-1

JGloop6

MOVah,dh

MOV[si],ax

INCsi

INCsi

INCbx

INCbx

JMPloop7

loop6:

MOV[si],ax;修改后的值再保存回缓冲区

POPdx

POPbx

POPax

POPsi

RET

alterENDP

;*********************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1