三型键盘显示控制器实验板教师实验指导汇编.docx

上传人:b****3 文档编号:26919706 上传时间:2023-06-24 格式:DOCX 页数:70 大小:354.34KB
下载 相关 举报
三型键盘显示控制器实验板教师实验指导汇编.docx_第1页
第1页 / 共70页
三型键盘显示控制器实验板教师实验指导汇编.docx_第2页
第2页 / 共70页
三型键盘显示控制器实验板教师实验指导汇编.docx_第3页
第3页 / 共70页
三型键盘显示控制器实验板教师实验指导汇编.docx_第4页
第4页 / 共70页
三型键盘显示控制器实验板教师实验指导汇编.docx_第5页
第5页 / 共70页
点击查看更多>>
下载资源
资源描述

三型键盘显示控制器实验板教师实验指导汇编.docx

《三型键盘显示控制器实验板教师实验指导汇编.docx》由会员分享,可在线阅读,更多相关《三型键盘显示控制器实验板教师实验指导汇编.docx(70页珍藏版)》请在冰豆网上搜索。

三型键盘显示控制器实验板教师实验指导汇编.docx

三型键盘显示控制器实验板教师实验指导汇编

清华大学微型计算机实验系统

三型键盘显示实验板

教师用实验指导

(汇编部分)

 

清华大学科教仪器厂

2008年8月

 

实验板介绍

一、实验板原理:

实验板由可编程并行接口8255、6个数码管,16键小键盘组成。

通过一个20芯扁平电缆与主实验台相连。

该实验板可以和TPC-2003A+、TPC-USB+、TTC-2实验系统配套使用。

原理图如下:

图18255及20芯电缆信号

图2数码显示

图316键键盘

实验板上的20芯接口插座提供数据总线信号D0-D0,控制信号IOR、IOW,低位地址A0、A1等,实验时通过20芯扁平电缆与主实验台相连。

这些信号在实验板上都有插线孔引出,也可以用自锁紧导线直接连到实验台上。

8255与数码管之间的连线已经接好,8255的PA0-PA7接数码管的段码a-dp,PB0-PB5接数码管的位码0-5,实验时不用再接线。

8255的PC0-PC7和键盘的行0-行3、列0-列3分别有插线孔引出,实验时需自己连线。

 

实验一8255并行口键盘扫描实验

一、实验目的

1、掌握8255A编程原理。

2、了解键盘阵列结构,学会读取按键的方法。

二、实验容

按图4接线,8255C口接键盘(8255的C0~C3接键盘的列0~列3,C4~C7接键盘的行0~行3),片选CS接大板上地址译码输出的288h~28fh。

用20芯扁平电缆连接实验板与主实验台上的20芯扩展插座。

图4键盘扫描实验原理图

8255端口A地址为:

288H

端口C地址为:

28AH

控制口地址为:

28BH

编程使得在键盘阵列上每按一个键后,微机屏幕上有相应字符显示出来,按“E”退出程序。

三、编程指南

1.识别键盘上的闭合键,通过采用行扫描法或行翻转法:

★行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值;如果列值中有某位为低电平,则表明行列交点处的键被按下;否则扫描下一行,直到扫完全部的行线为止。

★行反转法识别闭合键时,要将行线接一个并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作在输入方式;程序通过输出端口向全部行线上送低电平,然后读取列线的值;如果此时有某一键被按下,则必定会使某一列线值为零,程序再对两个并行端口进行方式设置,使行线工作在输入方式,列线工作在输出方式,并且将刚才读到的列线值从列线所接的并行端口输出,再读取行线上的值;那么,在闭合键所在的行线上的值必定为零。

这样,当一个键被按下时,必定可以读到一对唯一的行值和列值。

在我们提供的程序中就采用行反转法来识别键盘按键。

2.在程序设计时,将各个键对应的代码(列值,行值)放在一个表中,程序通过查表来确定具体按下的为哪一个键。

四、参考流程

主程序流程图:

 

键盘扫描子程序流程图:

(见下页图)

 

五.参考程序:

key.asm

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

;*8255薄膜按键实验*;

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

ioportequ0cc00H-280H

a8255equioport+288H;8255A口

b8255equioport+289H;8255B口

c8255equioport+28aH;8255C口

k8255equioport+28bH;8255控制口

datasegment

table1dw0770h,0B70h,0D70h,0E70h,07B0h,0BB0h,0DB0h,0EB0h

dw07D0h,0BD0h,0DD0h,0ED0h,07E0h,0BE0h,0DE0h,0EE0h;键盘扫描码表

chardb'0123456789ABCDEF';字符表

mesdb0ah,0dh,'PLAYANYKEYINTHESMALLKEYBOARD!

',0ah,0dh

db'ITWILLBEONTHESCREEN!

ENDWITHE',0ah,0dh,'$'

key_indb0h

dataends

stackssegmentstack;堆栈空间

db100dup(?

stacksends

codesegment

assumecs:

code,ds:

data,ss:

stacks,es:

data

start:

cli

movax,data

movds,ax

moves,ax

 

参考程序:

(接上页)

movax,stacks

movss,ax

movdx,offsetmes;显示提示信息

movah,09

int21h

main_key:

callkey;getacharin(key_in)anddisplayit

cmpbyteptrkey_in,'E'

jnzmain_key

movax,4c00h;if(dl)='E'returntoEXIT!

int21h;退出

keyprocnear

key_loop:

movah,1

int16h

jnzexit;pc键盘有键按下则退出

MOVDX,k8255

moval,81h

outdx,al

movdx,c8255

moval,0fh

outdx,al

inal,dx;读行扫描值

andal,0fh

cmpal,0fh

jzkey_loop;未发现有键按下则转

calldelay;delayforamoment

movah,al

MOVDX,k8255

moval,88h

outdx,al

movdx,c8255

moval,ah

oral,0f0h

outdx,al

inal,dx;读列扫描值

andal,0f0h

cmpal,0f0h

jzkey_loop;未发现有键按下则转

movsi,offsettable1;键盘扫描码表首址

movdi,offsetchar;字符表首址

movcx,16;待查表的表大小

key_tonext:

cmpax,[si];cmp(col,row)witheveryword

jzkey_findkey;inthetable

deccx

jzkey_loop;未找到对应扫描码

addsi,2

incdi

jmpkey_tonext

key_findkey:

movdl,[di]

movah,02

int21h;显示查找到的键盘码

movbyteptrkey_in,dl

key_waitup:

MOVDX,k8255

moval,81h

outdx,al

movdx,c8255

moval,0fh

outdx,al

inal,dx;读行扫描值

andal,0fh

cmpal,0fh

jnzkey_waitup;按键未抬起转

calldelay;delayforamoment

ret

exit:

movbyteptrkey_in,'E'

ret

keyendp

delayprocnear

pushax;delay50ms--100ms

movah,0

int1ah

movbx,dx

delay1:

movah,0

int1ah

cmpbx,dx

jzdelay1

movbx,dx

delay2:

movah,0

int1ah

cmpbx,dx

jzdelay2

popax

ret

delayendp

codeends

endstart

实验二8255控制数码管显示实验

(一)

一、实验目的

1、了解七段数码管(LED)显示数字的原理。

2、掌握用一个8255控制数码管显示数字的技术。

二、实验容

静态显示:

电路原理如图5。

8255CS接地址译码输出的288h~28fh。

用20芯扁平电缆连接实验板与主实验台上的20芯扩展插座。

8255的A口(PA0~PA6)与七段数码管的段码输入端a~g,8255的B口(PB0~PB5)与位码驱动输入端已连好,不用再接线。

编程从主机键盘输入一位十进制数字(0~9),在七段数码管上显示出来。

图5数码管显示

4.

三、编程提示

1、实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的相应段亮,位码加反相驱动器,位码输入端高电平选中。

 

2、七段数码管的字型代码表如下表:

显示字形

g

e

f

d

c

b

a

段码

0

0

1

1

1

1

1

1

3fh

1

0

0

0

0

1

1

0

06h

2

1

0

1

0

1

1

5bh

3

1

0

0

1

1

1

1

4fh

4

1

1

0

0

1

1

0

66h

5

1

1

0

1

1

0

1

6dh

6

1

1

1

1

1

0

1

7dh

7

0

0

0

0

1

1

1

07h

8

1

1

1

1

1

1

1

7fh

9

1

1

0

1

1

1

1

6fh

3、静态显示参考流程图

4、静态显示参考程序:

(程序名:

LED1.ASM)

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

;*键盘输入数据(0-9)控制LED数码管显示*

;*2008年8月为三型键盘显示板修改*

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

datasegment

ioportequ0cc00h-0280h

io8255aequioport+288h

io8255bequioport+289h

io8255cequioport+28ah

io8255kequioport+28bh

leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh

mesg1db0dh,0ah,'Inputanum(0--9),otherkeyisexit:

',0dh,0ah,'$'

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,io8255k;使8255的A口B口为输出方式

movax,80h

outdx,al

movdx,io8255b

moval,0ffh

outdx,al

sss:

movdx,offsetmesg1;显示提示信息

movah,09h

int21h

movah,01;从键盘接收字符

int21h

cmpal,'0';是否小于0

jlexit;若是则退出

cmpal,'9';是否大于9

jgexit;若是则退出

subal,30h;将所得字符的ASCII码减30H

movbx,offsetled;bx为数码表的起始地址

xlat;求出相应的段码

movdx,io8255a;从8255的A口输出段码

outdx,al

jmpsss;转SSS

exit:

movah,4ch;返回

int21h

codeends

endstart

 

实验三8255控制数码管显示实验

(二)

一、实验目的

1、了解七段数码管(LED)显示数字的原理。

2、掌握只用一个8255控制同时显示多位数字的技术。

二、实验容

动态显示1:

接线同实验二,编程在数码管上显示5、6两位数字。

三、动态显示1参考流程

 

四、动态显示1参考程序:

(程序名:

LED2.ASM)

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

;*LED数码管实验*

;*动态显示“56”*

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

datasegment

ioportequ0cc00h-0280h

io8255bequioport+289h;8255B口

io8255kequioport+28bh;8255控制口

io8255aequioport+288h;8255A口

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

buffer1db6,5;存放要显示的个位和十位

bzdw?

;位码

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,io8255k;将8255设为A口输出

moval,80h

outdx,al

movdi,offsetbuffer1;设di为显示缓冲区

loop2:

movbh,02

lll:

movbyteptrbz,bh

pushdi

decdi

adddi,bz

movbl,[di];bl为要显示的数

popdi

moval,0

movdx,io8255b

outdx,al

movbh,0

movsi,offsetled;置led数码表偏移地址为SI

addsi,bx;求出对应的led数码

moval,byteptr[si]

movdx,io8255a;自8255A的口输出

outdx,al

moval,byteptrbz;使相应的数码管亮

movdx,io8255b

outdx,al

movcx,3000

delay:

loopdelay;延时

movbh,byteptrbz

shrbh,1

jnzlll

movdx,0ffh

movah,06

int21h

jeloop2;有键按下则退出

movdx,io8255b

moval,0;关掉数码管显示

outdx,al

movah,4ch;返回

int21h

codeends

endstart

 

实验四8255控制数码管显示实验(三)

一、实验目的

1、了解七段数码管(LED)显示数字的原理。

2、掌握只用一个8255控制同时显示多位数字的技术。

二、实验容

动态显示2:

接线不变,编程在数码管上循环显示000000-999999计数值。

三、动态显示2参考流程

四、动态显示2参考程序LED.ASM

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

;*LED段位控制显示实验(I/O)*;

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

ioportequ0cc00h-280h

PORTSEGEQUioport+289H;数码管端口地址,段码地址

PORTBITEQUioport+288H;数码管端口地址,位码地址

P8255EQUioport+28bH

datasegment

BIT1DB0;1段显示数字

BIT2DB0;2段显示数字

BIT3DB0;3段显示数字

BIT4DB0;4段显示数字

BIT5DB0;5段显示数字

BIT6DB0;6段显示数字

LEDDB3FH,06,5BH,4FH,66H,6DH,7DH,07,7FH,6FH;LED段码表,1,2,3,4,5,6,7,8,9,0

MESDB'DISPLAYTHELEDS,PRESSANYKEYTOEXIT!

',0AH,0DH,'$'

dataends

stackssegmentstack;堆栈空间

db100dup(?

stacksends

codesegment

assumecs:

code,ds:

data,ss:

stacks,es:

data

start:

.386

cli

movax,data

movds,ax

moves,ax

movax,stacks

movss,ax

MOVDX,OFFSETMES;显示提示

MOVAH,09

INT21H

loop1:

movdx,p8255

moval,80h

outdx,al;设置8255A口、B口为输出方式

movcx,300

loop2:

callDISP_proc;调用显示程序

looploop2

callCHG_proc;调用计数子程序

movah,1

int16h

jzloop1;按任意键退出

movax,4c00h

int21h;退出

DISP_procprocnear;显示子程序

pusha

pushds;保存寄存器值

MOVAX,DATA

MOVDS,AX

MOVDI,OFFSETBIT1;获取显示段起始地址

MOVCL,01;设置显示位码

DIS1:

MOVAL,[DI];获取显示数字

MOVBX,OFFSETLED;获取段码表起始地址

XLAT;获取待显示数字的段码

MOVDX,PORTSEG

OUTDX,AL;输出显示数据,段码

MOVAL,CL

MOVDX,PORTBIT

OUTDX,AL;输出显示数据,位码,打开显示

PUSHCX

MOVCX,65500;显示时间延迟

DELAY:

LOOPDELAY

POPCX

CMPCL,20H;段码显示完否,6位

JZexit

INCDI

SHLCL,1

MOVAL,00

OUTDX,AL;关闭显示

JMPDIS1;显示下一段码

exit:

MOVDX,PORTBIT

MOVAL,00

OUTDX,AL;关闭显示

popds

popa;恢复寄存器值

ret

DISP_procendp

CHG_procprocnear

pushcx

INCBIT1;1段数字自增

CMPBIT1,10;进位否

JLQUIT;不进位则退出

MOVBIT1,0;进位,1段数字清零

INCBIT2;进位,2段数字自增

CMPBIT2,10

JLQUIT

MOVBIT2,0;进位,2段数字清零

INCBIT3;进位,3段数字自增

CMPBIT3,10

JLQUIT

MOVBIT3,0;进位,3段数字清零

INCBIT4;进位,4段数字自增

CMPBIT4,10

JLQUIT

MOVBIT4,0;进位,4段数字清零

INCBIT5;进位,5段数字自增

CMPBIT5,10

JLQUIT

MOVBIT5,0;进位,5段数字清零

INCBIT6;进位,6段数字自增

CMPBIT6,10

JLQUIT

MOVBIT6,0;进位,6段数字清零

QUIT:

popcx;恢复寄存器值

ret

CHG_procendp

codeends

endstart

实验五8255控制数码管显示实验(四)

一、实验目的

1、了解七段数码管(LED)显示数字的原理。

2、掌握只用一个8255控制同时显示多位数字的技术。

3、学习用8253(4)中断定时的方法。

二、实验容

动态显示3:

实验板接线不变,利用主实验台上8253定时中断制作电子钟,在数码管上显示分、秒。

增加8253接线如图6:

将主实验台上8253(4)CLK0接1MHZ,GATE0和GATE1接+5V,OUT0接CLK1,OUT1接IRQ,8253CS接280H~287H。

图68253接线图

三、动态显示3参考流程:

 

四、动态显示3参考程序LED3.ASM

;386以上微机适用

;纯dos下才能使用

;tasm4.1或以上编译

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

;*LED段位控制计时显示实验(中断)*;

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

ioportequ0cc00h-280H

TIM_CTLEQUioport+283H;8253端口地址,控制端口

TIMER0EQUioport+280H

TIMER1EQUioport+281H

MODE03EQU36H;8253端口数据

MODE12EQU74H

io8255kEQUioport+28bH;8255端口地址,控制端口

PORTSEGEQUioport+288H;8255B口,段码地址

PORTBITEQUioport+289H;8255A口,位码地址

int_vectEQU73H;中断0-7的向量为:

08h-0fh,中断8-15的向为:

70h-77h

irq_mask_2_7EQU011111011b;中断掩码,中断0-7时从低至高相应位为零,中断8-15时

;第2位为零

irq_mask_9_15equ011110111b;中断0-7时全一,中断8-15时从低至高相应位为零

ioport_centequ0d000h;tpc卡中9054芯片的io地址

datasegment

csregdw?

ipregdw?

;旧中断向量保存空间

MESSDB'8253ATIMER0INMOD

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

当前位置:首页 > 小学教育 > 其它课程

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

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