汇编语言与接口技术实验报告开课实验室:实验中心微机原理与接口技术实验室2014年12月1 日学院计算机科学教育软件学院年级、专业、班姓名成绩课程名称汇编语言与接口技术实验项目名称显示与键盘实验指导老师签名古鹏一、实验要求1.硬件实验十六八段数码管显示利用实验仪提供的显示电路,动态显示一行数据.2.硬件实验十七键盘扫描显示实验在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。
实验程序可分成三个模块。
①键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。
②显示模块:将显示单元的内容在显示器上动态显示。
③主程序:调用键输入模块和显示模块。
二、实验目的1. 硬件实验十六八段数码管显示1.了解数码管动态显示的原理。
2.了解用总线方式控制数码管显示2. 硬件实验十七键盘扫描显示实验1、掌握键盘和显示器的接口方法和编程方法。
2、掌握键盘扫描和LED八段码显示器的工作原理。
三、实验电路及连线1. 硬件实验十六八段数码管显示连线连接孔1 连接孔2 1 KEY/LED_CS CS0位选通信号段码输出(0x004数据总线2. 硬件实验十七键盘扫描显示实验连线连接孔1 连接孔21 KEY/LED_CS CS0四、使用仪器、材料计算机一台Wave6000试验仪五、实验程序、过程1.硬件实验十六八段数码管显示代码:OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口data segmentLEDBuf db 6 dup(?) ; 显示缓冲Num db 1 dup(?) ; 显示的数据DelayT db 1 dup(?)LEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hdata endscode segmentassume cs:code, ds:dataDelay proc nearpush ax ; 延时子程序push cxmov al, 0mov cx,axloop $pop cxpop axretDelay endpDisplayLED proc nearmov bx, offset LEDBufmov cl, 6 ; 共6个八段管 mov ah, 00100000b ; 从左边开始显示DLoop:mov dx, OUTBITmov al, 0out dx,al ; 关所有八段管 mov al, [bx]mov dx, OUTSEGout dx,almov dx, OUTBITmov al, ahout dx, al ; 显示一位八段管push axmov ah, 1call Delaypop axshr ah, 1inc bxdec cljnz DLoopmov dx, OUTBITmov al, 0out dx,al ; 关所有八段管retDisplayLED endpStart proc nearmov ax, datamov ds, axmov Num, 0MLoop:inc Nummov ch,Nummov ah,0mov cl,6mov bx,offset LEDBufFillBuf:mov si, offset LEDMapmov al,chand al,0fhadd ax,simov si,axmov al,[si] ; 数据转换成显示码mov [bx], al ; 显示码存入显示缓冲inc bxinc chdec cljnz FillBufmov DelayT,20DispAgain:call DisplayLED ; 显示dec DelayTjnz DispAgainjmp MLoopStart endpcode endsend start实验运行拍照:实现了自己名字拼音首字母显示HJP2.硬件实验十七键盘扫描显示实验代码:OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN_KEY equ 08001h ; 键盘读入口data segmentLEDBuf db 6 dup(?) ; 显示缓冲Num db 1 dup(?) ; 显示的数据DelayT db 1 dup(?)LEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h KeyTable: ; 键码定义db 16h, 15h, 14h, 0ffhdb 13h, 12h, 11h, 10hdb 0dh, 0ch, 0bh, 0ahdb 0eh, 03h, 06h, 09hdb 0fh, 02h, 05h, 08hdb 00h, 01h, 04h, 07hdata endscode segmentassume cs:code, ds:dataDelay proc nearpush ax ; 延时子程序push cxmov al, 0mov cx,axloop $pop cxpop axretDelay endpDisplayLED proc nearmov bx, offset LEDBufmov cl, 6 ; 共6个八段管mov ah, 00100000b ; 从左边开始显示DLoop:mov dx, OUTBITmov al, 0out dx,al ; 关所有八段管mov al, [bx]mov dx, OUTSEGout dx,almov dx, OUTBITmov al, ahout dx, al ; 显示一位八段管push axmov ah, 1call Delaypop axinc bxdec cljnz DLoopmov dx, OUTBITmov al, 0out dx,al ; 关所有八段管retDisplayLED endpTestKey proc nearmov dx, OUTBITmov al, 0out dx, al ; 输出线置为0mov dx, IN_KEYin al, dx ; 读入键状态not aland al, 0fh ; 高四位不用retTestKey endpGetKey proc nearmov ch, 00100000bmov cl, 6KLoop:mov dx, OUTBITmov al, ch ; 找出键所在列not alout dx, alshr ch, 1mov dx, IN_KEYin al, dxnot aland al, 0fhjne Goon_ ; 该列有键入dec cljnz KLoopmov cl, 0ffh ; 没有键按下, 返回 0ffh jmp Exit1Goon_:dec clshl cl, 2 ; 键值 = 列 X 4 + 行mov ch, 4LoopC:test al, 1jnz Exit1shr al, 1inc cldec chjnz LoopCExit1:mov dx, OUTBITmov al, 0out dx, almov ch, 0mov bx, offset KeyTablemov al, [bx] ; 取出键码mov bl, alWaitRelease:mov dx, OUTBITmov al, 0out dx, al ; 等键释放mov ah, 10call Delaycall TestKeyjne WaitReleasemov al, blretGetKey endpStart proc nearmov ax, datamov ds, axmov LEDBuf, 0ffh ; 显示 8.8.8.8.mov LEDBuf+1, 0ffhmov LEDBuf+2, 0ffhmov LEDBuf+3, 0ffhmov LEDBuf+4, 0mov LEDBuf+5, 0MLoop:call DisplayLED ; 显示call TestKey ; 有键入?je MLoop ; 无键入, 继续显示 call GetKey ; 读入键码and al, 0fh ; 显示键码mov ah, 0mov bx, offset LEDMAPadd bx, axmov al, [bx]mov LEDBuf+5, aljmp MLoopStart endpcode endsend start实验运行拍照:六、实验小结:本次实验学会了如何使用LED显示字符,按照说明修改代码,还实现了显示自己名字的拼音首字母,挺有意思的。
七、参考资料《汇编语言与接口技术》。