汇编实验-显示与键盘实验

合集下载

键盘显示程序设计实验

键盘显示程序设计实验

实验四键盘显示程序设计实验目的1、理解串行接口键盘单片机汇编语言程序的基本结构2、了解单片机汇编语言程序的设计和调试方法3、掌握几个的基本的传送类、控制类指令的使用方法实验仪器单片机开发板、万利仿真机、稳压电源、计算机实验原理1、键盘接口电路工作原理串行接口键盘盘电路如图4-15所示。

键盘扫描线与显示位选扫描信号共用。

键盘输入只需要一根线,电路简单。

键盘扫描信号从74LS164输出,低电平有效。

当扫描到某个键时,若按键按下,在KEY端得到低电平,否则得到高电平。

通过判断KEY的电平就可以知道相应键盘是否按下。

图4-15 键盘接口电路图2、读键盘程序设计从上面工作原理分析可知,读键程序可以和显示程序结合在一起,也可以单独设计。

这种结构的键盘同样存在抖动问题。

为了减少程序误动作,程序设计时也要考虑去抖动问题。

这里设计一个把键值显示在LED上的程序。

为了简化问题,把读键程序与显示结合起来。

程序流程图如图4-16所示。

图4-16 键盘扫描程序流程图实验内容1、设计程序把键值显示在数码管。

#include<reg52.h>#include"display.h"extern uchar point;extern uchar table[8];uchar t,temp,time;char num;bit flag1;/*void main(){uchar i;table[0]=0x0;for(i=1;i<8;i++)table[i]=0x11;while(1){num=dispkey();if(flag==1)table[0]=num;delay_1ms(2);}}*//************************************************************2、设计程序按不同键时实现不同功能。

功能:按向上键:最右边一位数码管数值加1(0-9),到9时加1回到0 按向下键:最右边一位数码管数值减加1(9-0),到0时减1回到9按向左键:显示数字左移一位按向右键:显示数字右移一位keypointr:短按小数点右移,长按显示学号;接口:上下左右keypointrkeypointl**************************************************************/ void main(){uchar i,j=7,k=0;for(i=0;i<8;i++)table[i]=0x11;TMOD=0x01;EA=1;TH0=(65536-20000)/256;TL0=(65536-20000)%256;ET0=1;TR0=1;table[7]=0x1;while(1){delay_1ms(5);temp=dispkey();switch(temp){case 5: if ( flag==0){num=++table[j];//加1if(num==10)num=0;table[j]=num;delay_1ms(1);}; flag=1; break;case 4:if ( flag==0){num=--table[j];//减1if(num==-1)num=9;table[j]=num;delay_1ms(1);};flag=1;break;case 2: if ( flag==0) //右移{if(j==7){table[0]=table[7];table[7]=0x11;j=0;continue;}table[j+1]=table[j];//左边赋给右边j++;table[j-1]=0x11;delay_1ms(1);//关闭左一位};flag=1;break;case 8:if ( flag==0){ //左移if(j==0){table[7]=table[0];table[0]=0x11;j=7;continue;}table[j-1]=table[j];//右边赋给左边j--;table[j+1]=0x11;delay_1ms(1);//关闭右一位};flag=1;break;case 1:if ( flag==0) //小数点右移{if(flag1==1){table[0]=0x9;table[1]=0x4;table[2]=0x0;table[3]=0x8;table[4]=0x1;table[5]=0x0;table[6]=0x3;table[7]=0x1;}else{if(k==7){ point=tablepoint[7];k=0;continue;}point=tablepoint[k];k++;delay_1ms(1);}};flag=1;break;default:flag=0; break;}}}void timer0() interrupt 1{TH0=(65536-20000)/256;TL0=(65536-20000)%256;t++;time++;if(temp==1){if(time==50){if(temp==1)flag1=1;time=0;}}}/*******************************************************显示函数*******************************************************///#define __DISPLAY_H__#include"display.h"uchar code disptable[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x11,0xC1,0x63,0x85,0x61,0x71,0xfe,0xff};//0~F数码代码uchar code tablepoint[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01 }; uchar point;uchar table[8];void delay_1ms(uchar z){uint x,y;for(x=z;x>0;x--)for(y=123;y>0;y--);}uchar dispkey(void){uchar i,keynum=0;i=8;DA T=disptable[table[i-1]];if(point&tablepoint[i-1])DA T=DA T&0xfe; //加入小数点DISPDIN =0;DISPCLK =0;DISPCLK =1;DISPDIN =1;delay_1ms(1);if(!key){delay_1ms(5);if(!key) keynum=i;}for (i=7;i>0;i--){DA T =0xff;DA T =disptable[table[i-1]];if(point&tablepoint[i-1])DA T=DA T&0xfe; //加入小数点DISPCLK =0;DISPCLK =1;delay_1ms(1);if(!key){delay_1ms(5);if(!key) keynum=i;}}DA T=0xff;return keynum;}思考题1、当按加1键时,每按一次数码管值变化可能超过1,是什么原因?答:原因是机械按键会有抖动现象,所以每按一次数码管值变化可能超过1。

实验六、键盘与显示编程

实验六、键盘与显示编程

实验六、键盘与显示编程
一、实验目的
1、掌握数码管显示程序的设计。

2、掌握键盘扫描程序的设计。

二、实验内容
设计单片机程序,读取键盘的按键值(键值为1~16),并将键值在数码管上以10进制进行显示。

三、实验原理
数码管动态扫描显示的基本原理是,单片机依次向每个数码管发出段选码和对应的位选码,对数码管逐个循环点亮,选择适当的扫描速度,利用人眼的视觉暂留效应,使得虽然每个时刻只有一个数码管在显示,但得看上去好像同时显示,动态扫描在定时中断中调用,以保证准确的扫描速度。

需要显示的数字必须先进行译码变成能显示的段码才能进行显示,译码可以通过查表来实现。

键盘扫描的基本原理是,列线逐列输出低电平,同时检测行线的电平,如其中有低电平时,表明当位于前行列位置上的键被按下,然后由行和列确定键值。

在按键处理操作中,键被按下再被释放为一次按键操作,另外还进行键盘去抖动处理,用软件延时方法解决。

四、电路接线图
四、实验预习
1、学习有关数码管扫描显示和键盘扫描的知识。

2、提前编写程序,写出预习报告。

五、实验报告
1、总结出实验的详细步骤。

2、写出调试正确的程序及框图。

汇编实验-屏幕窗口程序

汇编实验-屏幕窗口程序
汇编实验-屏幕窗口程序
实验五屏幕窗口程序
一、实验的目的与要求
(一)实验目的:掌握显示器I。程序设计的方法,掌握宏的相关概念,以及运用方法。
(二)实验要求:在屏幕上开出三个窗口,它们的行列坐标如下页图所示,光标首先定位在右窗口最下面一行 的行首(15,50),如果从键盘输入字符,则显示在右窗口,同时也显示在下窗口的最下面一行。若需要将字符显示 于左窗口,则先按下左键,接着再从键盘输入字符,字符就会从左窗口的最下行开始显示,同时下窗口也显示左窗 口的内容。当一行字符显示满后,窗口自动向上卷动一行,输入字符继续显示于最低一行,窗口最高一行向上卷动 后消失。编写屏幕窗口程序时,要求将一些功能程序段定义成宏指令,如向上卷动、清屏、
(18,15)
(22,65)
接受字符并判断、在屏幕上显示字符、光标定位。
二、实验正文
实验分析:实验思路比较简单,主要是运用BloS调用,这些查表可得,实验要求要用宏来定义一些基本功能, 宏调用比较简单,把一些基本功能编写成宏,能高效率的执行程序,但是宏也存在着一些缺点,在宏调用时,要宏展 开,这样会占用一定的空间,所以宏是一种以空间换时间的策略,像一些复杂的操作不宜编写成宏。BIoSI。号调用 提供了大量的屏幕、光标显示格式,要注意参数的意义,以便正确的显示结果。
三、流程图如下:
初始化卷行属性 scroll 页号 行、列 附录:程序源代码如下: ・**************************************************************** datassegmentcurydb15curxdb50 在当前பைடு நூலகம்口和下窗口显示 displaymacro ;在当前的窗口打印字符 ;在下窗口输出

汇编语言实验7实验报告

汇编语言实验7实验报告

汇编语言实验7实验报告一、实验目的本次实验旨在通过汇编语言编写程序,实现对字符串的操作和输出。

二、实验内容1. 编写一个汇编程序,要求从键盘输入一个字符串,并将其逆序输出到屏幕上;2. 编写一个汇编程序,要求从键盘输入两个字符串,并将它们拼接起来后输出到屏幕上。

三、实验过程1. 字符串逆序输出程序首先,需要从键盘输入一个字符串。

为了方便起见,我们可以先规定字符串的最大长度为100。

接着,我们需要定义两个变量:```buffer db 100 ; 用于存储输入的字符串length dw ? ; 存储输入的字符串长度```其中,db代表定义字节型变量,dw代表定义双字节型变量。

然后,我们需要使用INT 21H中断来读取用户输入的字符串。

具体而言,我们可以使用下面这段代码:```mov ah, 0Ah ; 设置INT 21H功能号为0Ahmov dx, offset buffer ; 将buffer的地址传给DX寄存器int 21h ; 调用INT 21H中断```该代码会将用户输入的字符串存储在buffer中,并且将其长度存储在length变量中。

接着,我们需要将该字符串逆序输出到屏幕上。

为了实现这个功能,我们可以使用栈来存储字符串中的每个字符,并逐个弹出来输出。

具体而言,我们可以使用下面这段代码:```mov si, offset buffer + 1 ; 将si寄存器指向字符串的第一个字符mov cx, length ; 将cx寄存器设置为字符串长度dec cx ; 字符串长度需要减1reverse:push byte ptr [si] ; 将当前字符压入栈中inc si ; 指向下一个字符loop reverse ; 循环直到所有字符都被压入栈中mov ah, 02h ; 设置INT 21H功能号为02h,表示输出一个字符print:pop dx ; 弹出栈顶元素int 21h ; 输出该字符loop print ; 循环直到所有字符都被弹出并输出完毕```2. 字符串拼接程序首先,需要从键盘输入两个字符串。

按键显示电路实验报告(3篇)

按键显示电路实验报告(3篇)

第1篇一、实验目的1. 熟悉按键电路的基本原理和设计方法。

2. 掌握按键电路的搭建和调试方法。

3. 了解按键电路在实际应用中的重要性。

4. 提高动手实践能力和电路分析能力。

二、实验原理按键显示电路是一种将按键输入转换为数字信号,并通过显示设备进行显示的电路。

本实验主要涉及以下原理:1. 按键原理:按键通过机械触点实现电路的通断,当按键被按下时,电路接通,产生一个低电平信号;当按键释放时,电路断开,产生一个高电平信号。

2. 译码电路:将按键输入的信号转换为相应的数字信号,以便后续处理。

3. 显示电路:将数字信号转换为可视化的信息,如LED灯、数码管等。

三、实验器材1. 电路板2. 按键3. 电阻4. LED灯5. 数码管6. 电源7. 基本工具四、实验步骤1. 按键电路搭建(1)根据电路原理图,在电路板上焊接按键、电阻、LED灯等元器件。

(2)连接电源,确保电路板供电正常。

2. 译码电路搭建(1)根据电路原理图,在电路板上焊接译码电路所需的元器件。

(2)连接译码电路与按键电路,确保信号传输正常。

3. 显示电路搭建(1)根据电路原理图,在电路板上焊接显示电路所需的元器件。

(2)连接显示电路与译码电路,确保信号传输正常。

4. 电路调试(1)检查电路连接是否正确,确保无短路、断路等问题。

(2)按下按键,观察LED灯或数码管显示是否正常。

(3)根据需要调整电路参数,如电阻阻值、电源电压等,以达到最佳显示效果。

五、实验结果与分析1. 实验结果通过实验,成功搭建了一个按键显示电路,按下按键后,LED灯或数码管能够正确显示数字信号。

2. 结果分析(1)按键电路能够正常工作,实现电路通断。

(2)译码电路能够将按键输入转换为相应的数字信号。

(3)显示电路能够将数字信号转换为可视化的信息。

六、实验总结1. 通过本次实验,掌握了按键电路的基本原理和设计方法。

2. 提高了动手实践能力和电路分析能力。

3. 了解了按键电路在实际应用中的重要性。

06 12864LCD显示计算器键盘按键实验

06 12864LCD显示计算器键盘按键实验

目录1 课程设计概述和要求 (1)1.1 课程设计要求与任务 (2)1.2 课程设计思路 (2)1.3 课程设计需要配置的环境 (3)2 系统设计 (3)2.1 设计框图 (3)2.2 元件解析 (3)2.2.1 LCD12864芯片……………………………………………………………42.2.2 AT89C51芯片 (5)2.2.3 其他部件 (6)2.2.4 电路分析 (7)3 软件设计 (12)3.1 程序流程图 (12)3.2 程序代码 (12)4 系统的仿真与调试 (13)4.1 硬件调试 (13)4.2 软件调试 (14)4.3 软硬件调试 (14)5 总结 (14)附录1:程序代码附录2:12864LCD显示计算器键盘按键实验Proteus仿真图1 课程设计概述和要求1.1 课程设计任务与要求设计任务:利用AT89C51单片机结合12864LCD显示器设计计算器键盘按键。

设计要求1:本设计实现一个12864LCD显示12864LCD显示器设计计算器键盘按键2.利用AT89C51控制整个电路来实现. 显示12864LCD显示器设计计算器键盘按键,系统主要包括硬件和软件两部分。

重点就是各部分硬件的连接设计以及程序的编写。

本章讲述的就是系统硬件的设计,其中包括各模块的器件选择和电路设计。

将计算器按键上的信息传送至AT89C51主芯片之中,利用P2端口使之显示于12864LCD液晶显示屏上。

1.2 课程设计目的思路1、先把与题目有关的芯片资料找到,熟悉一下芯片资料2、把此程序的电路图看懂,了解一下它的实现原理,以及实现的功能。

3、分析一下此程序的各部分的功能,各零件的工作原理。

4、对程序进行调试,分析调试结果,观察并得出结论。

1.3 课程设计需要配置的环境1、一台主机,一台显示器2、Keil uVision3/Keil uVision4 应用程序软件3、ISIS 7 Professional 仿真软件4、老师交给的仿真电路图,及案例5、纸张,以及一些参考资料2 系统设计2.1.设计框图框图设计是为了能够从整体上把握系统的各个大的模块以及各个模块之间的联系。

实验六键盘显示控制实验

实验六键盘显示控制实验

实验六键盘显示控制实验一、实验目的1.掌握8279键盘显示电路的基本功能及编程方法。

2.掌握一般键盘和显示电路的工作原理。

3.进一步掌握定时器的使用和中断处理程序的编程方法。

二、实验内容1.8237键盘显示电路的基本原理本实验系统中把键盘显示电路设计在一块扩展电路板上,用一根20芯的扁平电缆与实验台上扩展插头J7相连。

小键盘上每按一个键,6位数码管上显示出相应字符,其对应关系如下表6-1。

表6-1 小键盘上按键与显示字符对应关系2.设计电子时钟利用实验台上提供的定时器8253和扩展板上提供的8279以及键盘和数码管显示电路,设计一个电子钟。

由8253中断定时,小键盘控制电子钟的启停及初始值的预置。

电子钟显示格式如下:XX.XX.XX由左向右分别为时、分、秒。

并具有如下功能:①C键:清除,显示00.00.00。

②G键:启动,电子钟计时。

③D键:停止,电子钟停止计时④P键:设置时、分、秒值。

输入时依次为时、分、秒,同时应有判断输入错误的能力,若有错,则显示:E—————。

此时按P键重新输入预置值。

⑤E键:程序退出,返回DOS。

3.硬件电路图硬件电路图如图6-1。

图6-1 键盘显示控制电路图4.硬件连线做电子钟实验时,实验台上8253的CLK0接1MHz,GATE0和GATE1接+5V ,OUT0接CLK1,OUT1接IRQ 。

CS 接280H~287H 。

5.编程提示(1)显示按键程序框图显示铵键程序框图如图6-2(a )主程序框图,(b )键盘显示子程序框图,(c )显示子程序框图。

图6-2(a )主程序框图 (b )键盘显示控制子程序(c )显示子程序(5)显示按键参考程序程序清单:JPXSH1.ASMPORT0 EQU 2B0H ;8279数据口PORT1 EQU 2B1H ;8279控制口DA TA SEGMENTSEC1 DB 0 ;秒高位SEC2 DB 0 ;秒低位MIN1 DB 0 ;分高位MIN2 DB 0 ;分低位HOR1 DB 0 ;时高位HOR2 DB 0 ;时低位LED DB 3FH,06,5BH,4FH,66H,6DH,7DH,07,7FH,6FH,77H,7CH DB 39H,5EH,79H,71H,67H,37H,73H,31H,3EH,36H,66HDA TA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART:CLIMOV AX,DA TAMOV DS,AXMOV SEC1,0MOV SEC2,0MOV MIN1,0MOV MIN2,0MOV HOR1,0MOV HOR2,0MOV AX,DATAMOV AX,CSMOV DS,AXMOV DX,PORT1MOV AL,0D3HOUT DX,AL ;8279清零MOV AL,2AHOUT DX,AL ;置8279时钟命令MOV AL,40HOUT DX,AL ;读FIFO存储器命令MOV AL,00HOUT DX,AL ;置键盘显示模式MOV AL,80HOUT DX,AL ;写显示缓冲区命令KEY1:CALL KEY2 ;调键盘显示子程序NEXT2:MOV HOR2,ALMOV HOR1,ALMOV MIN2,ALMOV MIN1,ALMOV SEC2,ALMOV SEC1,ALLP0:CMP AL,13HJNZ LP1MOV AX,4C00H ;返回DOSINT 21HLP1:JMP KEY1MAIN ENDPKEY2 PROC NEARMOV DX,PORT1MOV AL,0D1HOUT DX,AL ;清显示WREP:CALL DISP ;调显示子程序MOV DX,PORT1IN AL,DXAND AL,07HJZ WREPKEYN:MOV DX,PORT0IN AL,DX ;读状态MOV BL,ALAND AL,07HAND BL,38HMOV CL,03SHR BL,CLCMP BL,00HJNZ LINE1 ;是第一行键按下吗?ADD AL,08H ;是,则列键值加8JMP QUIT1LINE1:CMP BL,01HJNZ LINE2 ;是第二行键按下吗?JMP QUIT1LINE2:ADD AL,10H ;第三行,加10QUIT1:RETKEY2 ENDPDISP PROC NEARPUSH CXMOV AX,DATAMOV DS,AXMOV DX,PORT1MOV AL,90HOUT DX,ALMOV SI,OFFSET SEC1MOV CX,0006MOV BX,OFFSET LEDDISP1:CLDLODSBXLATMOV DX,PORT10OUT DX,ALLOOP DISP1POP CXRETDISP ENDPCODE ENDSEND START(6)电子钟程序框图电子钟程序框图如图6-3(a)电子钟主程序框图,(b)中断处理子程序,(c)预置时、分、秒高位子程序HIGH0,(d)预置时、分、秒低位子程序LOW0。

课程设计——键盘输入及数据显示程序设计

课程设计——键盘输入及数据显示程序设计

示程序设计中北大学汇编语言程序设计课程设计说明书学生姓名:学号:学院:信息与通信工程学院专业:自动化题目:键盘输入及数据显示程序设计指导教师:沈小林职称:副教授2012年6月24日中北大学汇编语言程序设计实验课程设计任务书11/12 学年第二学期学院:信息与通信工程学院专业:自动化学生姓名:学号:课程设计题目:数据显示及键盘输入程序设计起迄日期:6月18 日~6月24日课程设计地点:中北大学指导教师:沈小林系主任:王忠庆下达任务书日期: 2011年06月20日课程设计任务书课程设计任务书一、设计目的1、通过程序设计和调试,加深对字符串程序设计的认识,掌握其调试方法;2、通过键盘及显示程序设计掌握汇编语言程序在键盘输入及文本显示方面的编程过程;3、学会DOS中关于显示功能调用的用法;4、领会修改显存方法显示字符。

二、程序设计要求(1)能识别数字键、字母键(能区分大小写);(2)一次最多字符(含数字)输入不超过80个;(3)依次显示键盘输入的所有可显示字符。

三、编程思路串(String)即数据串,是指存放在连续内存中的一组数据,通常表现为字节(或字)数组,串操作指令具有以下共性。

1)源串:地址由DS:SL表示。

2)目的串:地址由ES:DI表示。

3)自动修改地址:每次数据操作后,SI和DI自动递增或递减,取决于操作的数据类型(字节、字或双字)以及DF的值。

若DF=0,则SI和DI自动增加1、2或4;否则减1、2或4。

可以使用CLD或STD指令设置DF。

4)计数器:使用重复前缀时,用CX显示数据个数,每重复一次操作,CX 减1。

从键盘输入一串字符串,通过指令STRING DB 80 DUP(?)来设置一次最多字符(含数字)输入不超过80个,能识别数字键、字母键。

要使程序能够识别字母键的大小写,必须通过ASCII码来寻址识别。

依次显示键盘输入的所有可显示字符,当用户按回车键时,输入结束。

然后通过显示器显示输入的字符。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言与接口技术实验报告开课实验室:实验中心微机原理与接口技术实验室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显示字符,按照说明修改代码,还实现了显示自己名字的拼音首字母,挺有意思的。

七、参考资料《汇编语言与接口技术》。

相关文档
最新文档