倒计时数字钟解析.docx
《倒计时数字钟解析.docx》由会员分享,可在线阅读,更多相关《倒计时数字钟解析.docx(22页珍藏版)》请在冰豆网上搜索。
![倒计时数字钟解析.docx](https://file1.bdocx.com/fileroot1/2023-1/8/7a3e533a-4e05-43d5-8916-fc26d4c5d2bf/7a3e533a-4e05-43d5-8916-fc26d4c5d2bf1.gif)
倒计时数字钟解析
合肥学院
计算机科学与技术系
微机原理与接口技术
课程设计报告
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
V
输入高电平电压VIH
VCC
2.0
V
输出低电平电压VOL(数据端口)
IOL=2.5MA
0.45
V
输出低电平电压VOL(外围端口)
IOL=1.7MA
0.45
V
输出高电平电压VOH(数据端口)
IOR=-400MA
2.4
V
输出高电平电压VOH(外围端口)
IOH=-200MA
2.4
V
达林顿驱动电流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
;*********************