北邮微机原理与接口技术2Word下载.docx

上传人:b****6 文档编号:21606375 上传时间:2023-01-31 格式:DOCX 页数:25 大小:131.60KB
下载 相关 举报
北邮微机原理与接口技术2Word下载.docx_第1页
第1页 / 共25页
北邮微机原理与接口技术2Word下载.docx_第2页
第2页 / 共25页
北邮微机原理与接口技术2Word下载.docx_第3页
第3页 / 共25页
北邮微机原理与接口技术2Word下载.docx_第4页
第4页 / 共25页
北邮微机原理与接口技术2Word下载.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

北邮微机原理与接口技术2Word下载.docx

《北邮微机原理与接口技术2Word下载.docx》由会员分享,可在线阅读,更多相关《北邮微机原理与接口技术2Word下载.docx(25页珍藏版)》请在冰豆网上搜索。

北邮微机原理与接口技术2Word下载.docx

11110100

F4

3

11110001

F1

4

00111001

39

5

11011001

D9

6

11011101

DD

7

01100001

61

8

11111101

FD

9

11111001

F9

A

01111101

7D

b

10011101

9D

C

11001100

CC

d

10110101

B5

E

11011100

DC

F

01011100

5C

H

00111101

3D

L

10001100

8C

多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环依次点亮多个数码管,利用人眼的视觉暂留现象,只要扫描的频率足够大,将看不到闪烁现象。

实验证明,在扫描显示过程中,每一位显示延迟1ms是最佳选择。

在代码中,Show这个过程是来显示数码管的。

主程序流程图:

图7主程序流程图

源代码:

CODE(070141.asm)

;

FILENAME:

070141.asm

AUTHOR:

XIAO,Zhiqing(No.13,Cl.07105)

DATE:

20091216

DESCRIPTION:

display070141onseventubesarray

macro:

myOut(WARNING:

itmaychangethevalueofAL)

it'

sstronglyrecommendedthatdatabeAL

myOutMACROportAddr,data

PUSHDX

MOVDX,portAddr

MOVAL,data

OUTDX,AL

POPDX

ENDM

myDigitOut(WARNING:

myDigitOutMACROportAddr,data

PUSHBX

MOVBX,OFFSETSegLut

MOVAL,data

XLATSegLut

POPBX

myIn(WARNING:

myInMACROportAddr,data

INAL,DX

MOVdata,AL

DataSEGMENT

SegmentLookupTable

SegLutDB0EDH,21H,0F5H,0F1H,39H;

"

01234"

DB0D9H,0DDH,61H,0FDH,0F9H;

56789"

DB7DH,9DH,0CDH,0D5H,0DCH;

ABCDEF"

DB3DH,8CH;

HL"

Contentindexarraytoprint

ContentDB00H,07H,00H,01H,04H,01H

8255

PortAEQU0E800H

PortBEQU0E801H

PortCEQU0E802H

PortControlEQU0E803H

DataENDS

StackSEGMENTSTACK'

STACK'

DB100HDUP(?

StackENDS

CodeSEGMENT

ASSUMECS:

Code,DS:

Data,SS:

Stack

MainPROC

PUSHDS

XORAX,AX

PUSHAX

MOVAX,Data

MOVDS,AX

myOutPortControl,80H;

10000000Bmeans:

;

A--mode0,output

B--mode0,output

CHigh--output

CLow--output

view:

CALLShow

JMPview

RET;

unreachableinstruction

MainENDP

procShow

inputargumentlists:

POINT

ShowPROC

PUSHCX

PUSHSI

MOVBX,OFFSETContent

MOVCL,01H;

initialize

makeCL=00000001B,whichmeansenabletheleftmostdigit

MOVSI,0

nextDigit:

myOutPortB,CL;

selecttubes

MOVAL,BYTEPTR[BX+SI];

myDigitOutPortA,AL;

selectsegments

POPCX

ROLCL,1;

displaytheleftdigitnexttocurrentone

INCSI;

nextletter

CALLDelay

CALLCheckAndQuit

CMPSI,6

JNZnextDigit

POPSI

RET

ShowENDP

DelayPROC

MOVCX,0F000H

loopLabel:

NOP

LOOPloopLabel

DelayENDP

checkAndQuitPROC

MOVAH,0BH;

checkwhetheruserinputsomethingfromkeyboard

INT21H

ORAL,AL;

ifhedoes,thenreturntoDos

JZexitCheckAndQuit

myOutPortA,0;

myOutPortB,0;

MOVAX,4C00H

exitCheckAndQuit:

POPAX

checkAndQuitENDP

CodeENDS

ENDMain

经编译、连接、运行,显示正常,且能够成功返回DOS。

图8静态显示学号

2.2.2.动态显示HELLO

要求在数码管电路1-6位数码管上按下图所示的规律,动态显示字符串HELLO,当主机键盘按下任意键时结束。

利用实验一读入端口的功能,控制动态显示的速度。

第一屏

第二屏

第三屏

第四屏

第五屏

O

第六屏

图9HELLO显示次序

按照我的设计,该程序要像上一个程序(070141.asm)一样,通过更新显示的下标数组Content来改变数码管显示。

但是,实验指导要求使用以下方法:

REQUIREMENT(实验二8255A并行接口应用.pdf)

在数据段,按下列规律设置12个字型码:

MESGDB0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0

POINTDWMESG

……

POINT单元存放MESG单元的有效地址,程序取出POINT单元的内容→BX,然后用BX间址取数送数码管电路,扫描显示6个字符。

每过0.5s将POINT单元的内容加1,再将POINT单元的内容→BX,……。

POINT单元内容加1,使字符串显示的首地址向高地址移动一个单元,从而使6位字符串向“左”移动一位,实现动态显示。

为了满足实验指导书的要求,我改动了程序的结构,不再使用查表的方法。

图10动态显示HELLO流程图

在本程序中,拨码开关S0控制是否移动。

拨码开关往上拨,移动停止在第五屏;

否则移动。

拨码开关S1控制移动速度。

拨码开关往上拨,移动变慢;

拨码开关往下拨,移动变快。

源代码如下:

CODE(hello.asm)

Hello.asm

displayHelloonseventubesarray

USAGE:

S0:

UPstill,DOWNmove

S1:

UPslow,DOWNfast

MESGDB0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0;

HELLO"

POINTDWMESG

XUE9MODE

PortSwEQU0E8E0H

JIAO2MODE

PortSwEQU0EEE0H

SwStateDB0

switchers:

01H-'

1'

still,'

0'

move

02H-'

slow,'

fast

ViewIndexDB0

animation:

CALLReadSwState

TESTSwState,02H

JZfast

MOVCX,0500H

fast:

MOVCX,0200H

LOOPview

CALLUpdateViewIndex

JMPanimation

MOVBX,POINT

makeCL=00000001B,whichmeansenabletherightmostdigit

MOVCL,BYTEPTR[BX+SI];

myOutPortA,CL;

MOVCX,2000H

myOutPortA,00H

myOutPortB,00H

UpdateViewIndexPROC

TESTSwState,01H

JNZstillMode

INCPOINT

INCViewIndex

CMPViewIndex,7

JNZexitUpdateViewIndex

MOVPOINT,OFFSETMESG

MOVViewIndex,0

JMPexitUpdateViewIndex

stillMode:

MOVViewIndex,5

ADDPOINT,5

exitUpdateViewIndex:

RET

UpdateViewIndexENDP

ReadSwStatePROC

myInPortSw,SwState

POPAX

ReadSwStateENDP

经过编译、连接、运行,可以正常运行。

图11HELLO显示

2.2.3.回显小键盘输入

检测行时,往控制口(0EE03H)写控制字88H,使C口(0EE02H)低八位(列)输出,高八位(行)输入。

检测列时,往控制口(0EE03H)写控制字81H,使C口(0EE02H)高八位(行)输出,低八位(列)输入。

首先,我利用debug,获得了每个按键对应的比特,制成了下表。

根据下表,综合行值和列值,就可以知道按下了哪个键。

表3检测到的二进制数与按钮值对应表

测得键值

****0111

****1011

****1101

****1110

1110****

1101****

1011****

B

0111****

D

在本程序中,设置了防抖动功能和防重复识别功能。

当按下一个键后,一般情况下只会接收到一个值。

但是,如果长按一个键,就会收到下一个值。

这和普通PC键盘的体验相同,贴近广大用户的使用习惯。

CODE(recur.asm)

recur.asm

displayseventubesarrayaccordingtoinput

testAndSet(WARNING:

refNumandincNumshouldbeINSTANTnumber)

testAndSetMACROsrcData,refNum,incNum

LOCALexitTestAndSet

TESTsrcData,refNum

JNZexitTestAndSet

ORbuttonIndex,incNum

ORbuttonPressed,0FFH

exitTestAndSet:

NOP

SegLutDB0EDH,21H,0F4H,0F1H,39H;

DB7DH,9DH,0CCH,0B5H,0DCH,5CH;

DB3DH,8CH,00H;

'

H'

(10H)'

L'

(11H)'

(12H)

ContentDB12H,12H,12H,12H,12H,12H

buttonPressedDB0;

0FFHforpressed,00Hfornot.

buttonRowDB0

buttonColDB0

buttonIndexDB0

buttonEnableDW0000H

CHigh--o

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

当前位置:首页 > 高等教育 > 工学

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

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