1、三型键盘显示控制器实验板教师实验指导汇编清华大学微型计算机实验系统三型键盘显示实验板教师用实验指导(汇编部分)清 华 大 学 科 教 仪 器 厂2008年8月实验板介绍一、实验板原理:实验板由可编程并行接口8255、6个数码管,16键小键盘组成。通过一个20芯扁平电缆与主实验台相连。该实验板可以和TPC-2003A+、TPC-USB+、TTC-2实验系统配套使用。原理图如下: 图1 8255及20芯电缆信号 图2 数码显示图3 16键键盘 实验板上的20芯接口插座提供数据总线信号D0-D0,控制信号IOR、IOW,低位地址A0、A1等,实验时通过20芯扁平电缆与主实验台相连。这些信号在实验板上
2、都有插线孔引出,也可以用自锁紧导线直接连到实验台上。8255与数码管之间的连线已经接好,8255的PA0-PA7接数码管的段码a-dp,PB0-PB5接数码管的位码05,实验时不用再接线。8255的PC0-PC7和键盘的行0行3、列0列3分别有插线孔引出,实验时需自己连线。实验一 8255并行口键盘扫描实验一、 实验目的1、掌握8255A编程原理。2、了解键盘阵列结构,学会读取按键的方法。二、 实验容按图4接线,8255C口接键盘(8255的C0C3接键盘的列0列3,C4C7接键盘的行0行3),片选CS接大板上地址译码输出的288h28fh。用20芯扁平电缆连接实验板与主实验台上的20芯扩展插
3、座。图 4 键盘扫描实验原理图8255端口A地址为:288H端口C地址为: 28AH控制口地址为: 28BH编程使得在键盘阵列上每按一个键后,微机屏幕上有相应字符显示出来,按“E”退出程序。三、 编程指南1 识别键盘上的闭合键,通过采用行扫描法或行翻转法:行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值;如果列值中有某位为低电平,则表明行列交点处的键被按下;否则扫描下一行,直到扫完全部的行线为止。行反转法识别闭合键时,要将行线接一个并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作在输入方式;程序通过输出端口向全部行线上送低电平,然后读取列线的值;如果此时有某一
4、键被按下,则必定会使某一列线值为零,程序再对两个并行端口进行方式设置,使行线工作在输入方式,列线工作在输出方式,并且将刚才读到的列线值从列线所接的并行端口输出,再读取行线上的值;那么,在闭合键所在的行线上的值必定为零。这样,当一个键被按下时,必定可以读到一对唯一的行值和列值。在我们提供的程序中就采用行反转法来识别键盘按键。2 在程序设计时,将各个键对应的代码(列值,行值)放在一个表中,程序通过查表来确定具体按下的为哪一个键。 四、参考流程主程序流程图:键盘扫描子程序流程图:(见下页图)五参考程序: key.asm;*;* 8255薄膜按键实验 *;*; ioport equ 0cc00H-28
5、0H a8255 equ ioport+288H ;8255 A口 b8255 equ ioport+289H ;8255 B口 c8255 equ ioport+28aH ;8255 C口 k8255 equ ioport+28bH ;8255控制口data segment table1 dw 0770h,0B70h,0D70h,0E70h,07B0h,0BB0h,0DB0h,0EB0h dw 07D0h,0BD0h,0DD0h,0ED0h,07E0h,0BE0h,0DE0h,0EE0h ;键盘扫描码表 char db 0123456789ABCDEF ;字符表mes db 0ah,0dh,
6、PLAY ANY KEY IN THE SMALL KEYBOARD! ,0ah,0dh db IT WILL BE ON THE SCREEN! END WITH E ,0ah,0dh,$ key_in db 0hdata endsstacks segment stack ;堆栈空间 db 100 dup (?)stacks endscode segment assume cs:code,ds:data,ss:stacks,es:datastart: cli mov ax,data mov ds,ax mov es,ax参考程序:(接上页) mov ax,stacks mov ss,ax m
7、ov dx,offset mes ;显示提示信息 mov ah,09 int 21h main_key: call key ;get a char in (key_in) and display it cmp byte ptr key_in,E jnz main_key mov ax,4c00h ;if (dl)=E return to EXIT! int 21h ;退出key proc nearkey_loop: mov ah,1 int 16h jnz exit ;pc键盘有键按下则退出 MOV DX,k8255 mov al,81h out dx,al mov dx,c8255 mov
8、al,0fh out dx,al in al,dx ;读行扫描值 and al,0fh cmp al,0fh jz key_loop ;未发现有键按下则转 call delay ;delay for amoment mov ah,al MOV DX,k8255 mov al,88h out dx,al mov dx,c8255 mov al,ah or al,0f0h out dx,al in al,dx ;读列扫描值 and al,0f0h cmp al,0f0h jz key_loop ;未发现有键按下则转 mov si,offset table1 ;键盘扫描码表首址 mov di,off
9、set char ;字符表首址 mov cx,16 ;待查表的表大小key_tonext: cmp ax,si ;cmp (col,row) with every word jz key_findkey ;in the table dec cx jz key_loop ;未找到对应扫描码 add si,2 inc di jmp key_tonextkey_findkey: mov dl,di mov ah,02 int 21h ;显示查找到的键盘码 mov byte ptr key_in,dlkey_waitup: MOV DX,k8255 mov al,81h out dx,al mov d
10、x,c8255 mov al,0fh out dx,al in al,dx ;读行扫描值 and al,0fh cmp al,0fh jnz key_waitup ;按键未抬起转 call delay ;delay for amoment retexit: mov byte ptr key_in,E retkey endpdelay proc near push ax ;delay 50ms-100ms mov ah,0 int 1ah mov bx,dxdelay1: mov ah,0 int 1ah cmp bx,dx jz delay1 mov bx,dxdelay2: mov ah,0
11、 int 1ah cmp bx,dx jz delay2 pop ax retdelay endpcode endsend start实验二 8255控制数码管显示实验(一)一、实验目的1、了解七段数码管(LED)显示数字的原理。2、掌握用一个8255控制数码管显示数字的技术。二、实验容静态显示:电路原理如图5。8255CS接地址译码输出的288h28fh。用20芯扁平电缆连接实验板与主实验台上的20芯扩展插座。8255的A口(PA0PA6)与七段数码管的段码输入端a,8255的B口(PB0PB5)与位码驱动输入端已连好,不用再接线。编程从主机键盘输入一位十进制数字(09),在七段数码管上显示
12、出来。图 5 数码管显示4. 三、编程提示1、 实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的相应段亮,位码加反相驱动器,位码输入端高电平选中。 2、七段数码管的字型代码表如下表:显示字形gefdcba段码001111113fh1000011006h21010115bh310011114fh4110011066h511011016dh611111017dh7000011107h811111117fh911011116fh3、静态显示参考流程图4、静态显示参考程序: (程序名:LED1.ASM);*;* 键盘输入数据(0-9)控制LED数码管显示 *;* 2008年8月为
13、三型键盘显示板修改 *;*data segmentioport equ 0cc00h-0280hio8255a equ ioport+288hio8255b equ ioport+289hio8255c equ ioport+28ahio8255k equ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1 db 0dh,0ah,Input a num (0-9),other key is exit:,0dh,0ah,$data endscode segment assume cs:code,ds:datastart:
14、mov ax,data mov ds,ax mov dx,io8255k ;使8255的A口B口为输出方式 mov ax,80h out dx,al mov dx,io8255b mov al,0ffh out dx,alsss: mov dx,offset mesg1 ;显示提示信息 mov ah,09h int 21h mov ah,01 ;从键盘接收字符 int 21h cmp al,0 ;是否小于0 jl exit ;若是则退出 cmp al,9 ;是否大于9 jg exit ;若是则退出 sub al,30h ;将所得字符的ASCII码减30H mov bx,offset led ;
15、bx为数码表的起始地址 xlat ;求出相应的段码 mov dx,io8255a ;从8255的A口输出段码 out dx,al jmp sss ;转SSSexit: mov ah,4ch ;返回 int 21hcode ends end start实验三 8255控制数码管显示实验(二)一、实验目的1、了解七段数码管(LED)显示数字的原理。2、掌握只用一个8255控制同时显示多位数字的技术。二、实验容动态显示1:接线同实验二,编程在数码管上显示5、6两位数字。三、动态显示1参考流程 四、 动态显示1参考程序:(程序名:LED2.ASM);*;* LED数码管实验 *;* 动态显示“56”
16、*;*data segmentioport equ 0cc00h-0280hio8255b equ ioport+289h ;8255B口io8255k equ ioport+28bh ;8255控制口io8255a equ ioport+288h ;8255A口led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 6,5 ;存放要显示的个位和十位bz dw ? ;位码data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,
17、io8255k ;将8255设为A口输出 mov al,80h out dx,al mov di,offset buffer1 ;设di为显示缓冲区loop2: mov bh,02lll: mov byte ptr bz,bh push di dec di add di, bz mov bl,di ;bl为要显示的数 pop di mov al,0 mov dx,io8255b out dx,al mov bh,0 mov si,offset led ;置led数码表偏移地址为SI add si,bx ;求出对应的led数码 mov al,byte ptr si mov dx,io8255a
18、;自8255A的口输出 out dx,al mov al,byte ptr bz ;使相应的数码管亮 mov dx,io8255b out dx,al mov cx,3000delay: loop delay ;延时 mov bh,byte ptr bz shr bh,1 jnz lll mov dx,0ffh mov ah,06 int 21h je loop2 ;有键按下则退出 mov dx,io8255b mov al,0 ;关掉数码管显示 out dx,al mov ah,4ch ;返回 int 21hcode ends end start实验四 8255控制数码管显示实验(三)一、实
19、验目的1、了解七段数码管(LED)显示数字的原理。2、掌握只用一个8255控制同时显示多位数字的技术。二、实验容动态显示2:接线不变,编程在数码管上循环显示000000999999计数值。三、动态显示2参考流程 四、动态显示2参考程序 LED.ASM;*;* LED段位控制显示实验(I/O) * ;*; ioport equ 0cc00h-280h PORTSEG EQU ioport+289H ;数码管端口地址,段码地址 PORTBIT EQU ioport+288H ;数码管端口地址,位码地址 P8255 EQU ioport+28bHdata segment BIT1 DB 0 ;1段显
20、示数字 BIT2 DB 0 ;2段显示数字 BIT3 DB 0 ;3段显示数字 BIT4 DB 0 ;4段显示数字 BIT5 DB 0 ;5段显示数字 BIT6 DB 0 ;6段显示数字 LED DB 3FH,06,5BH,4FH,66H,6DH,7DH,07,7FH,6FH ;LED段码表,1,2,3,4,5,6,7,8,9,0 MES DB DISPLAY THE LEDS,PRESS ANY KEY TO EXIT!,0AH,0DH,$data endsstacks segment stack ;堆栈空间 db 100 dup (?)stacks endscode segment ass
21、ume cs:code,ds:data,ss:stacks,es:datastart:.386 cli mov ax,data mov ds,ax mov es,ax mov ax,stacks mov ss,ax MOV DX,OFFSET MES ;显示提示 MOV AH,09 INT 21Hloop1: mov dx,p8255 mov al,80h out dx,al ;设置8255A口、B口为输出方式 mov cx,300loop2: call DISP_proc ;调用显示程序 loop loop2 call CHG_proc ;调用计数子程序 mov ah,1 int 16h j
22、z loop1 ;按任意键退出 mov ax,4c00h int 21h ;退出DISP_proc proc near ;显示子程序 pusha push ds ;保存寄存器值 MOV AX,DATA MOV DS,AX MOV DI,OFFSET BIT1 ;获取显示段起始地址 MOV CL,01 ;设置显示位码DIS1: MOV AL,DI ;获取显示数字 MOV BX,OFFSET LED ;获取段码表起始地址 XLAT ;获取待显示数字的段码 MOV DX,PORTSEG OUT DX,AL ;输出显示数据,段码 MOV AL,CL MOV DX,PORTBIT OUT DX,AL ;
23、输出显示数据,位码,打开显示 PUSH CX MOV CX,65500 ;显示时间延迟DELAY: LOOP DELAY POP CX CMP CL,20H ;段码显示完否,6位 JZ exit INC DI SHL CL,1 MOV AL,00 OUT DX,AL ;关闭显示 JMP DIS1 ;显示下一段码exit: MOV DX,PORTBIT MOV AL,00 OUT DX,AL ;关闭显示 pop ds popa ;恢复寄存器值 retDISP_proc endpCHG_proc proc near push cx INC BIT1 ;1段数字自增 CMP BIT1,10 ;进位否
24、 JL QUIT ;不进位则退出 MOV BIT1,0 ;进位,1段数字清零 INC BIT2 ;进位,2段数字自增 CMP BIT2,10 JL QUIT MOV BIT2,0 ;进位,2段数字清零 INC BIT3 ;进位,3段数字自增 CMP BIT3,10 JL QUIT MOV BIT3,0 ;进位,3段数字清零 INC BIT4 ;进位,4段数字自增 CMP BIT4,10 JL QUIT MOV BIT4,0 ;进位,4段数字清零 INC BIT5 ;进位,5段数字自增 CMP BIT5,10 JL QUIT MOV BIT5,0 ;进位,5段数字清零 INC BIT6 ;进位,
25、6段数字自增 CMP BIT6,10 JL QUIT MOV BIT6,0 ;进位,6段数字清零QUIT: pop cx ;恢复寄存器值 retCHG_proc endpcode endsend start实验五 8255控制数码管显示实验(四)一、实验目的1、了解七段数码管(LED)显示数字的原理。2、掌握只用一个8255控制同时显示多位数字的技术。 3、学习用8253(4)中断定时的方法。二、实验容动态显示3:实验板接线不变,利用主实验台上8253定时中断制作电子钟,在数码管上显示分、秒。增加8253接线如图6:将主实验台上8253(4) CLK0 接 1MHZ,GATE0 和 GATE1
26、接5V,OUT0 接 CLK1,OUT1 接 IRQ,8253CS接 280H287H。 图 6 8253 接线图 三、动态显示3 参考流程:四、 动态显示3参考程序 LED3.ASM;386以上微机适用;纯dos下才能使用;tasm4.1或以上编译;*;* LED段位控制计时显示实验(中断) *;*; ioport equ 0cc00h-280H TIM_CTL EQU ioport+283H ;8253端口地址,控制端口 TIMER0 EQU ioport+280H TIMER1 EQU ioport+281H MODE03 EQU 36H ;8253端口数据 MODE12 EQU 74H
27、 io8255k EQU ioport+28bH ;8255端口地址,控制端口 PORTSEG EQU ioport+288H ;8255B口,段码地址 PORTBIT EQU ioport+289H ;8255A口,位码地址 int_vect EQU 73H ;中断0-7的向量为:08h-0fh,中断8-15的向为:70h-77h irq_mask_2_7 EQU 011111011b ;中断掩码,中断0-7时从低至高相应位为零,中断8-15时;第2位为零 irq_mask_9_15 equ 011110111b ;中断0-7时全一,中断8-15时从低至高相应位为零 ioport_cent equ 0d000h ;tpc 卡中9054芯片的io地址data segment csreg dw ? ipreg dw ? ;旧中断向量保存空间 MESS DB 8253A TIMER0 IN MOD
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1