1.3 完整的程序清单和相关注释。
.model small .386
data segment
num db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh data ends code segment
assume cs:code,ds:data BEGIN: mov si,0 mov ax,data mov ds,ax lea bx,num
count:mov cx,6 mov ah ,00000001b
scan:mov al,[bx+si] ;字形处理 mov dx,200h out dx,al
mov al,ah;字位处理 mov dx,201h out dx,al call delay shl ah,1 loop scan add si,1 cmp si,10 jnz count sub si,10 jmp count
delay proc near push cx mov cx,0 lop: loop lop pop cx ret
delay endp code ends end BEGIN
1.4 实验数据及结果分析
完成了0到9的八个数码管依次顺序显示,每次的显示都有一定的延迟,当
显示完数字9以后就再次从0开始。
1.5 实验过程中遇到的问题,以及解决办法
遇到的问题:显示的时候一开始很难延迟。
解决的方案:通过构造一个延迟函数来完成,在延迟函数中一直重复进行某一个动作,用计数器的倒计时来完成延迟的功能,由于需要调用新的函数,而且需要一个计数器的支持,所以需要将cx压入栈中。
1.6 实验总结
熟悉了汇编语言的相关语言,也熟悉了软件与接线板的操作。通过入栈压栈的方式,完成对于延迟操作的函数构造。同时,也实践了mov al,[bx+si] mov dx,200h out dx,al的字形处理,和mov al,ah mov dx,201h out dx,al的字为命令的语句熟悉。
实验2 小键盘按键识别实验
1.1 实验目的
掌握用软件方法识别行列式键盘按键的原理和方法。
1.2 实验原理、内容,接线图,程序流程图,必要时附上实验步骤和电路原理图。
当实验板上的小键盘有键按下时,将其对应的键号( 16进制数0-F)显示在七段数码管上。
实验系统提供了一个16按键的小键盘,采用行列式4×4键盘,形成矩阵结构,如图3-10所示。通常,该键盘矩阵的行线和列线分别与8255并行接口的两个端口连接,通过程序的检测和判断来识别按键操作。当需要检测某键按下时,依次给1、2、3、4行线输出低电平,某键按下时,相应的行和列上的两条线短路,即相应的列线被拉成低电平,其他列线维持高电平。程序通过并口读回4根列线的值,根据行线列线为0的状态即可判断出该按键的键号(即位置)。
图6 4X4键盘原理图
实验接线图如图7所示,将8255端口A的PA0-PA3与4个行线KL0-KL3连接,将8255端口B的PB0-PB3与4个列线KR0-KR3连接,设置选择8255 A组、B组端口为方式0(基本输入输出方式)工作,且端口A方向为输出,用来控制行线,端口B方向为输入,用来读入列线值。编写汇编程序,根据送出的行线值和读入的列线值来判断出该按键的位置,并将其键号在数码管上显示出来。
图7 小键盘按键识别实验接线图
流程图如下:
图8 小键盘按键识别实验程序流程图
1.3 完整的程序清单和相关注释。
.model small .386
DATA SEGMENT
rowport dw 200h colport dw 201h
controlport dw 203h ;控制字 led_cs dw 210h char
3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h table dw 0fefeh dw 0fefdh dw 0fefbh dw 0fef7h dw 0fdfeh dw 0fdfdh dw 0fdfbh dw 0fdf7h dw 0fbfeh dw 0fbfdh dw 0fbfbh dw 0fbf7h dw 0f7feh dw 0f7fdh dw 0f7fbh dw 0f7f7h DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA START:
begin:mov ax,data mov ds,ax mov dx,controlport mov al,10000010b
out dx,al;8255初始化 L1: call kb1 mov bh,ah mov bl,al call delay call kb1 cmp bl,al jnz begin cmp bh,ah jnz begin mov ax,bx call disp call delay
db