微机原理与接口技术课程设计-倒计时(2)

2019-03-09 17:44

图4 8255A工作方式控制字格式

方式0为基本的输入输出方式;方式1为选通式输入/输出;方式3为双向选通输入/输出方式。

2) C口置位/复位控制字

8255A的C口置位/复位控制字的格式如图5

图5 8255A的C口置位/复位控制字 3.2 八段共阴数码管

一般8段LED显示器的内部结构和引脚如图6(a)所示。每段都是一个发光二极管,通过点亮不同的字段,可以显示0,1,?,9和A,B,?F。其内部各发光二极管之间的连接方法有共阴极和共阳极两种,如图6(b)和图6(c)所示。

(a)结构和引脚 (b)共阴极接法 (c)共阳极接法

图6 八段LED显示器

(1) 共阴极接法:把发光二极管的阴极连在一起构成公共阴极。使用时公共阴极

接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不点亮。实验中使用的数码管为共阴极接法;

(2) 共阳极接法:把发光二极管的阳极连在一起构成公共阳极。使用时公共阳极

接+5V。这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。

表1 8段LED显示字形段码 字型 共阴极字形代码 字型 共阴极字形代码 字型 共阴极字形代码 0 1 2 3 4 5 4. 功能电路 4.1 数码管显示电路

图7 显示连接电路

3FH 06H 5BH 4FH 66H 6DH 6 7 8 9 A B 7DH 07H 7FH 6FH 77H 7CH C D E F 灭 39H 5EH 79H 71H 00H 实验箱上有四个LED显示器,本实验利用PC口的最高两位选中X4和X3两个数码管,即进行位锁存;

八段数码管为阳极LED器件。要让A段点亮,要求PB0输出高电平“1”;要使B段熄灭,要求从PB1输出低电平“0”。其余各段以此类推。要使LED上显示0-9十个数字,需要按照如下段码表来驱动数码管的八段LED:

表2 8段数码管段码表

显示字符 八段代码 0 3FH 1 06H 2 5BH 3 4FH 4 66H 5 6DH 6 7DH 7 07H 8 7FH 9 6FH 4.2 开关与LED灯控制电路

图8 开关与LED灯控制电路

设置8255的A端口工作在方式0下,作为输出端,电路连接如上图,在倒计时到0的时候LED灯从左到右接着再从右往左依次点亮,实现跑马灯功能。开关K1为复位开关,在倒计时过程中置K1为“1”可以实现退出当前倒计时,置K1为“0”时又开始重新倒计时。开关K0为暂停开关,在倒计时过程中置K0为“1”可以暂停倒计时,置K0为“0”时,数码管接着当前的显示数据执行递减,并且在暂停过程中数码管始终显示暂停时的数据。 三. 程序模块及流程图 1. 8255A初始化

程序开始时对8255A进行初始化,A组和B组控制工作在方式0,因此方式字中的D6D5和D2为0。A口为输出,因此D4为0;C口高4位为输出,因此D3为0,低4位为输入,因此D0为1;B口为输出,因此D1为0。根据程序设计要求,8255A的方式控制字为1000 0001B,即81H。 2. 显示程序模块

根据方式控制字和连线可知,B口连接数码管的A~Dp进行段锁存,C口的高4位连接X4~X1进行位锁存。显示程序如下:

DIS PROC NEAR ;数码管显示子程序 PUSH AX ;保护现场 PUSH DX

MOV SI,3000H ;找到存数的缓冲区 MOV AL,0BFH ;1011 1111B,选中X3数码管 MOV DX,MY8255_C ;选中PC口,进而选中数码管 OUT DX,AL

MOV AL,[SI] ;取出缓冲区中存放的键值 XLAT

;查表指令,将以BX为基地址,AL为位移量的字节存储单元中的数赋给AL

MOV DX,MY8255_B ;写入数码管A~Dp OUT DX,AL

CALL DALLY1 ;调用延时函数

MOV AL,7FH ;0111 1111B,选中X4数码管 MOV DX,MY8255_C ;选中PC口,进而选中数码管 OUT DX,AL

MOV AL,[SI+1] ;取出缓冲区中存放的键值 XLAT

MOV DX,MY8255_B ;写入数码管A~Dp OUT DX,AL

CALL DALLY1 ;调用延时函数 POP AX POP DX DIS ENDP

3. 延时程序模块

控制一个循环程序循环N次以到达延时的目的。具体语句如下:

DALLY: PUSH CX PUSH AX

MOV CX,0FFFFH A1: MOV AX,4FFFH A2: DEC AX JNZ A2

LOOP A1 POP AX POP CX RET

;保护现场

;自减 ;计数循环

程序循环次数为N=(FFFF+1)*(4FFF+1),延时时间为N*n(n为程序语句执行时间) 4. 控制程序模块

控制程序有暂停和复位,其中暂停可以用一个循环程序来实现,当暂停键拨下时,循环程序会进入死循环状态,直至暂停键拨回。复位则只需按条件跳转至输入初始时间的程序语句处即可。C口低4位为输入,读入开关状态,判断“0”和“1”状态进行控制。

程序代码如下:

PAUSE: CALL DIS MOV DX,MY8255_C IN AL,DX

;调用显示子程序

;C口低4位为输入 ;读入C口的最低位的状态

TEST AL,01H ;0000 0001B

JNZ PAUSE ;最低位为1暂停倒计时 RESET1: MOV DX,MY8255_C ;C口低4位为输入 IN AL,DX

TEST AL,02H ;0000 0010B

JNZ RESET2 ;第2位置1后执行RESET2 DEC TIME ;减1倒计时 MOV CL,TIME CMP CL,0FFH

;当从初始值减到0后继续减1则值为0FFH,说明计数结束

JNZ DISPY ;倒计时未到0,继续倒计时 JMP OUTPUT1 ;跳到流水灯点亮 ;重新开始倒计时 RESET2: JMP SHURU

5. LED灯点亮程序模块

当程序运行至倒计时结束的语句时启动点亮LED灯程序。A口连接LED显示单元的D15~D8,通过A口送入的数据控制LED灯的点亮情况。

程序代码如下:

OUTPUT1: PUSH CX MOV CX,7 MOV LA,80H P4: MOV AL,LA

MOV DX,MY8255_A OUT DX,AL CALL DALLY ROR AL,1 MOV LA,AL LOOP P4

MOV CX,8

MOV LB,01H P5: MOV AL,LB

MOV DX,MY8255_A OUT DX,AL CALL DALLY ROL AL,1 MOV LB,AL LOOP P5

JMP prompt

;点亮流水灯,流水灯0灭1亮 ;循环计数初值

;流水灯从左往右依次点亮

;通过A口输出控制LED点亮 ;不进位的循环右移

;流水灯从右往左依次点亮

;不进位的循环左移

;流水灯显示结束跳转到prompt


微机原理与接口技术课程设计-倒计时(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:岩土工程勘察中如何运用土工试验资料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: