计时时钟Word文件下载.doc
《计时时钟Word文件下载.doc》由会员分享,可在线阅读,更多相关《计时时钟Word文件下载.doc(18页珍藏版)》请在冰点文库上搜索。
![计时时钟Word文件下载.doc](https://file1.bingdoc.com/fileroot1/2023-4/30/4a4d5344-e4d4-444e-8790-0cdac8b659eb/4a4d5344-e4d4-444e-8790-0cdac8b659eb1.gif)
另外,可编程并行接口(8255A)的是数据传输速度快,虽然使用的通信线多,但是传输距离并不算远,所以在解决接口问题时,采用可编程并行接口(8255A)是比较合适的。
(2)时间的显示问题:
为实现计时时钟的显示,可选择芯片LCD或LED。
表1-2 LCD与LED的比较
LCD
液晶显示器,通过液晶和彩色过滤器过滤光源,在平面面板上产生图象,具有零辐射,低耗能,散热小,纤薄轻巧,精确还原图象,显示字符锐利,屏幕调节方便,可视角度小,响应时间过慢,亮度可对比度低等特点
LED
发光二极管,是由发光二极管排列组成的显示器件,它采用低电压扫描技术,具有耗电少,使用寿命长,成本低,亮度高,故障少,视角大,视角大,可视距离远的特点
通过分析和对比,LED显示器要较优于LCD显示器,因此本实验选择LED 来实现时间的显示
(3)秒钟的设计问题:
两种解决方案:
硬件实现、软件实现
(1)硬件分析:
可选择8253A芯片,8253A是一种定时准确、使用方便、灵活性大的可编程定时器/计数器,其定时的时间长度可以通过软件来设置,对芯片设置处置初值后,计数器开始工作,微处理器就可以去做其他工作,定时时间到,电路会产生一个信号,向微处理器提出中断请求,告诉处理器定时时间已到。
(2)软件分析:
为实现1秒长度的设定,可执行一个循环程序,通过循环次数和循环嵌套的层数来调节计时时间的长短,该方法的优点是不需要专用的硬件,从而成本低,方法简单灵活,使用起来也比较容易。
(3)最佳解决方案:
通过以上分析,硬件实现1秒的设定虽然较准确,但用软件来实现可以极大的节约成本,而且通过周密的计算循环的次数和循环嵌套的层数也可以将计时的准确度提高,所以在实现计时时间方面选择软件是比较好的方案。
1.2.2 软件部分:
初始值设置:
在程序中的数据段定义秒位数据second,分位数据minute,时位数据hour,初始值都设为00h,并在LED显示器上显示初值;
8255初始化:
设置8255的工作方式:
B口和C口都用于输出,且都工作于方式0;
计时:
从初值开始显示,当显示了1s时,秒位加1,并判断秒位是否为60,若不是,则直接显示时间;
若是,则将秒位置0,分位加1,接着判断分位是否为60,若不是,则直接显示;
若是,则将分位置0,时位加1,然后判断时位是否为25,若不是,则直接显示;
若是,则将时位置0,日期加1,并判断日期是否加到31,若是,则将日期清零,重新计时。
如此循环。
1秒时间的设定:
执行一个循环程序,通过循环次数和循环嵌套的层数来调节计时时间的长短,该循环次数处定为0100h。
2、硬件设计:
2.1 选择芯片8255:
2.1.1 芯片8255A在本设计设计中的作用:
8255是并行的I/0接口芯片,内部有三个相互独立的8位数据端口。
8255实现了外设与8086之间的数据传输。
8255的B口工作于方式0,作为输出口,其PB0~PB7分别与LED数码管显示器的显示器的八段a,b,c,d,e,f,g,dp相连,C口作为输出口,其PC7~PC0与LED数码管显示器的LED0~LED7相连,作为位选。
2.1.2芯片8255的功能分析:
(1)8255A是可编程并行接口,内部有3个相互独立的8位数据端口,即A口、B口和C口。
三个端口都可以作为输入端口或输出端口。
A口有三种工作方式:
即方式0、方式1和方式2,而B口只能工作在方式0或方式1下,而C口通常作为联络信号使用。
8255的工作只有当片选CS有效时才能进行工作。
而控制逻辑端口实现对其他端口的控制。
当8255工作于方式0时,即基本输入输出方式时,可将三个数据端口划分为四个独立的部分:
A口和B口作为两个8位端口,C口的高4位和低4位可以用作两个4位的输入输出口,各个端口都可独立地用作输入或输出。
(2)CPU接口:
数据总线缓冲器:
这是一个8位双向三态缓冲器,三态是由读/写控制逻辑控制的,它可与系统的DB直接相连,实现CPU和8255A之间的信息传送;
读写控制逻辑:
用于管理数据、控制字或状态字的传送,接收来自CPU的地址信息及一些控制信号,然后向A组、B组控制电路发送命令,控制端口数据的传送方向。
2.1.3 8255部分技术参数:
8255A的方式控制字:
(见图2-1)
图2-1 8255A的方式控制字
表2-1 8255A的部分技术参数
标识符
最小
最大
测试条件
输入低电平(VIL)
-0.5V
0.8V
输入高电平(VIH)
2.0V
5V
输出低电平(VOL)DB
0.45V
IOL=2.5mA
输出低电平(VOL)PER
0.45V
IOL=1.7mA
输出高电平(VOH)DB
2.4V
IOH=-400μA
输出高电平(VOH)PER
IOH=-200μA
驱动电流
-1.0mA
-4.0mA
REXT=750Ω,VEXT=1.5V
供应电流
120mA
IIL(INPUTLOADCURRENT
±
10μA
VIN=0V~5V
IOFL(Outputfloatleakage
VOUT=0.45~5V
技术参数分析:
8255A工作的最低输入电压-0.5~0.8V,最高输入电压是2.0~Vcc电压,从这两者之间的区域来看,逻辑电平的差值还是比较大的;
另外在数据总线上的逻辑电平是2.4V,输入的负载电流为在最大电流为±
10mA,电源的电流是120mA,驱动电流在-1.0mA~-4.0mA之间
2.1.4 8255与外设相连的逻辑图:
(见图2-3)
图2-3 8255与外设相连的逻辑图
PA7~PA0:
A口数据信号线;
PB7~PB0:
B口数据信号线;
PC7~PC0:
C口数据信号线。
2.2选择器件LED:
2.2.1 LED在本设计中的作用:
LED发光二级管(Light-EmittingDiode),在本设计中采用7段数字发光二级管,是作为终端用来显示计时时钟的分秒值用的。
2.2.2 LED功能分析:
LED发光二级管分为共阳极和共阴极两种,共阳就是7段的显示字码共用一个电源的正极,原理示意图如下:
(见图2-4)
图2-4 LED原理图
LED数码管采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。
从上图可以看出,要是数码管显示数字,有两个条件:
1、是要在VT端(3/8脚)加正电源;
2、要使(a,b,c,d,e,f,g,dp)端接低电平或“0”电平。
这样才能显示的。
将七个发光管进行组合,排列成数字图形8,再根据需要控制七个管的亮与灭,即可显示出定义数字。
2.2.3 LED技术参数:
表2-2 LED显示管段选码编码表
数字
DP
g
f
e
d
c
b
a
二进制编码(字形)
1
3FH
03H
2
5BH
3
4FH
4
66H
5
6DH
6
7DH
7
07H
8
7FH
9
6FH
A
77H
B
7CH
C
69H
D
5EH
E
79H
F
71H
表2-3 LED显示管参数
Pcw
If
Vr
Ir
P
对应型号
散射颜色
BT235—2
70
25
≥1.5
≤2.5
200
SEL—10
红
BT1441529
100
40
≥0.5
565
绿
BT1341529
585
蓝
LED技术参数说明:
通过以上所列出的LED技术参数,可以总结出发光二极管的压降一般为1.5~2.0V,即工作电压要求不高,而且构造简单,其工作电流一般取10~20mA为宜。
2.3 硬件总逻辑图及其说明:
2.3.1 实验与原理图的相关说明:
8086的8位数据线D7~D0与8255的D7~D0相连,地址线经74LS373锁存后其低位A0、A1分别与8255的A0、A1相连,其他地址线经74LS138译码后,其CS0接8255的片选CS8255引脚,其入口地址为34F0H~34F3H。
8255的A口PA0~PA6分别与逻辑开关的K1~K7相连,其中开关量K7用于判断是否修改时间,K5~K6用于判断修改哪一位,K1~K4为要修改的值;
B口作为段选;
C口作为位选。
2.3.2 实验组成原理图:
(见图2-6)
图2-6 实验组成原理图
3、控制程序设计:
3.1 控制程序思路说明:
(1)初始化8255A,设置其工作方式;
(2)设置初值,定义对应十六进制数的七段代码表及其时间区表
(3)显示计时并循环判断,当1秒时间到是则秒位加1计时显示。
(4)8255A芯片的相关地址如下:
端口地址:
34F3H
A口地址:
00F0H
B口地址:
00F1H
C口地址:
00F2H
3.2 流程图:
见图3-1
3.3 程序流程图的相关说明:
首先对8255进行初始化,然后开始读取开关量,判断是否要修改时间,若需修改,则判断需修改哪位,随后将该位对应的时间区数据修改为逻辑开关K1~K4对应的值,若不需要修改则继续显示并循环判断,当1秒时间到达时,则秒位加1计时显示。
3.4 控制程序:
.MODEL TINY
PCIBAR3 EQU 1CH ;
8位I/O空间基地址(它就是实验仪的基地址,也为DMA&
32BITRAM板卡上的8237提供基地址)
Vendor_ID EQU 10EBH ;
厂商ID号
Device_ID EQU 8376 ;
设备ID号
.STACK 100
.DATA
IO_Bit8_BaseAddress DW ?
msg0 DB '
BIOS不支持访问PCI$'
msg1 DB '
找不到StarPCI9052板卡$'
msg2 DB '
读8位I/O空间基地址时出错$'
COM_ADD DW 00F3H ;
控制口偏移量
PA_ADD DW 00F0H ;
PA口偏移量
PB_ADD DW 00F1H ;
PB口偏移量
PC_ADD DW 00F2H ;
PC口偏移量
.CODE
START:
MOV AX,@DATA
MOV DS,AX
NOP
CALL InitPCI
CALL ModifyAddress;
根据PCI提供的基地址,将偏移地址转化为实地址
MOVBX,OFFSETTAB ;
LED数码管的换码的偏移地址
MOVDX,COM_ADD;
8255初始化
MOVAX,90H
OUTDX,AX;
A口输入,B口输出,C口低位输出,且都工作于方式0
A1:
MOVCX,0100H ;
送一秒时间常数
A2:
MOVSI,OFFSETSECOND ;
读入秒变量的偏移地址
MOVDX,PA_ADD
INAX,DX ;
从A口读取开关量
PUSHCX ;
保存时间常数
MOVAH,AL
ANDAH,0F0H
CMPAH,70H ;
判断是否修改时间
JAREM3 ;
若等于0,不修改
CMPAH,00H
JZA3
CMPAH,10H
JZA4
CMPAH,20H
JZA6
CMPAH,30H
JZA7
CMPAH,40H
JZA9
CMPAH,50H
JZA11
CMPAH,60H
JZA13
JMPA14
A3:
MOVAH,[SI] ;
修改秒位低位
ORAL,AH
MOV[SI],AL
JMPD1
A4:
MOVAH,[SI] ;
修改秒位高位
ANDAH,0FH
MOVCL,04H
SHLAL,CL
CMPAL,60H ;
若修改值在0~5之间才能修改
JBA5
A5:
ORAL,AH
REM3:
JMPD1
A6:
MOVAH,[SI+1] ;
修改分位低位
ANDAL,0FH ;
禁止显示
MOV[SI+1],AL
JMPD1
A7:
MOVAH,[SI+1] ;
修改分位高位
CMPAL,60H
JBA8 ;
A8:
ORAL,AH
JMPD1
A9:
MOVAH,[SI+2] ;
修改时位低位
CMPAL,40H
JBA10 ;
若修改值在0~3之间才能修改
A10:
MOV[SI+2],AL
A11:
修改时位高位
CMPAL,30H
JBA12 ;
若修改值在0~2之间才能修改
A12:
JMPD1
A13:
MOVAH,[SI+3] ;
修改日位低位
MOV[SI+3],AL
A14:
MOVAH,[SI+3]
SHLAL,CL
MOV[SI+3],AL
D1:
MOVCX,0004H ;
分秒切换
MOVAH,0FEH;
位选码11111110
D2:
MOVAL,[SI] ;
把时间常数放入AL中
ANDAL,0FH;
取分/秒个位
PUSHCX
MOVCX,0002H
D3:
XLAT ;
换码
MOVDX,PB_ADD
OUTDX,AL ;
送段选码
MOVAL,AH
MOVDX,PC_ADD
送位选码,显示低位
ROlAH,1
PUSHCX
MOVCX,0FFFH ;
低位暂留时间
DELAY1:
NOP
NOP
LOOPDELAY1 ;
延时子程序
MOVAL,0FFH ;
位选码为11111111
OUTDX,AL ;
MOVAL,[SI]
SHRAL,04H
POPCX
LOOPD3
INCSI
POPCX
DECCX
JNZD2
DECCX
MOVDX,PA_ADD
JNZREM2
INAX,DX ;
MOVAH,AL
ANDAH,80H
CMPAH,80H ;
JNZREM
MOD1:
MOVSI,OFFSETSECOND ;
计时
MOVAL,[SI]
ADDAL,01H ;
秒位加1
DAA ;
压缩BCD码调整指令
MOV[SI],AL
CMPAL,60H
JNZREM
MOVAL,00H ;
秒位置00,分位加1
MOV[SI],AL
MOVAL,[SI+1]
ADDAL,01H
DAA
MOV[SI+1],AL
MOVAL,00H
MOV[SI+1],AL
MOVAL,[SI+2]
ADDAL,01H ;
时位加1
MOV[SI+2],AL
CMPAL,24H
时位置00,日位加1
MOV[SI+2],AL
MOVAL,[SI+3]
MOV[SI+3],AL
CMPAL,30H
MOV[SI+3],AL ;
重新计时
REM:
JMPA1
REM2