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

合集下载

键盘显示程序设计实验

键盘显示程序设计实验

实验四键盘显示程序设计实验目的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.掌握单片机I/O的工作方式;2.掌握单片机以串行口方式0工作的LED显示;3.掌握键盘和LED显示的编程方法。

㈡实验器材1.G6W仿真器一台2.MCS—51实验板一台3.PC机一台4.电源一台㈢实验内容及要求实验硬件线路图见附图从线路图可见,8051单片机的P1口作为8个按键的输入端,构成独立式键盘。

四个LED显示器通过四个串/并移位寄存器74LS164接口至8051的串行口,该串行口应工作在方式0发送状态下,RXD端送出要显示的段码数据,TXD则作为发送时钟来对显示数据进行移位操作。

编写一个计算器程序,当某一键按下时可执行相应的加、减、乘、除运算方式,在四个显示器上显示数学算式和最终计算结果。

注:①通过按键来选择加、减、乘、除四种运算方式。

②输入两个数字均为一位十进制数,可预先放在内存中。

㈣实验框图(见下页)㈤思考题1.当键盘采用中断方式时,硬件电路应怎样连接?P1.4~P1.7是键输出线,P1.0~P1.3是扫描输入线。

输入与门用于产生按键中断,其输入端与各列线相连,再通过上拉电阻接至+5 V电源,输出端接至8051的外部中断输入端。

2.74LS164移位寄存器的移位速率是多少?实验中要求计算的式子和结果之间相差一秒,移位寄存器的移位速率应该是每秒一位吧。

其实这个问题确实不知道怎么回答。

LED 显示用的段码与教科书所提供的不同,本实验采用如下段码:显示数符段码显示数符段码0BBH A DBH109H B F1H2EAH C B2H36BH D E9H459H E F2H573H F D2H否有否P1口置输入读P1口开 始显示“0000”是否有键按下?延迟消抖是否有键按下?是读键码加法运算减法运算除运算6F3H—40H70BH.04H8FBH┗┛A1H97BH┗┛1AH灭00H P DAH实验代码:ORG 0000HAJMP MAINORG 0030HMAIN:MOV 41H,#0BBH ;对几个存放地址进行初始化MOV 42H,#0BBHMOV 43H,#0BBHMOV 44H,#0BBHMOV SCON,#00H ;初始化串行口控制寄存器,设置其为方式0 LCALL DISPLAY ;初始化显示KEY:MOV R3,#08H;用来存放两个数据MOV R4,#02HMOV P1,#0FFH ;初始化P1口MOV A,P1 ;读取按键状态CPL A ;取正逻辑,高电平表示有键按下JZ KEY ;A=0时无键按下,重新扫描键盘LCALL DELAY1;消抖MOV A,P1 ;再次读取按键状态CPL AJZ KEY ;再次判别是否有键按下PUSH AKEY1:MOV A,P1CPL AANL A,#0FH ;判别按键释放JNZ KEY1 ;按键未释放,等待LCALL DELAY1;释放,延时去抖动POP AJB ACC.0,ADD1 ;K1按下转去ADD1JB ACC.1,SUB1 ;K1按下转去SUB1JB ACC.2,MUL1 ;K1按下转去MUL1JB ACC.3,DIV1 ;K1按下转去DIV1LJMP KEYADD1:LCALL BUFFER ;显示加数和被加数MOV 43H,#049HLCALL DISPLAY ;显示加号MOV A,R3ADD A,R4DA AMOV R3,A ;相加结果放入R6ANL A,#0FHMOV R4,A ;结果个位放入R7MOV A,R3SWAP A ;半字节交换,高四位放入低四位ANL A,#0FHMOV R3,A ;结果的高位放入R6LCALL L;显示缓存区设置LCALL DELAY2;延时一秒后显示LCALL DISPLAYLJMP KEYSUB1:LCALL BUFFER ;显示减数和被减数MOV 43H,#40HLCALL DISPLAY ;显示减号MOV A,R3CLR CY ;CY清零SUBB A,R4 ;做减法PUSH ARLC A ;带进位循环左移,最高位放入CYJC F ;判断最高位,若为1则跳转到负数ZHENG: POP AMOV R4,AMOV R3,#00H ;高位清零SJMP OUTFU:POP ACPL A ;取绝对值INC AMOV R4,AMOV R3,#11H ;显示负号OUT: LCALL L ;显示缓存区设置LCALL DELAY2 ;延时1s后显示LCALL DISPLAYLJMP KEYMUL1:LCALL BUFFER ;显示两位乘数MOV 43H,#99HLCALL DISPLAY ;显示乘号MOV A,R3MOV B,R4MUL AB ;结果放入AB,A中是低8位,B中是高8位MOV B,#0AHDIV AB ;十进制转换MOV R4,B ;结果个位放入R7MOV R3,A ;结果的十位放入R6LCALL LLCALL DELAY2LCALL DISPLAY ;延时1s后显示LJMP KEYDIV1:LCALL BUFFER ;显示除数和被除数MOV 43H,#62HLCALL DISPLAY ;显示除号MOV A,R3MOV B,R4DIV AB ;A除以BMOV R4,B ;余数放在R4中MOV R3,A ;商放在R3中MOV A,R4MOVC A,@A+DPTR ;调用段选号MOV 41H,A ;显示余数MOV A,R3MOVC A,@A+DPTRMOV 43H,A ;显示商MOV 42H,#00HMOV 44H,#00HLCALL DELAY2 ;延时1S后显示LCALL DISPLAYLJMP KEYBUFFER: MOV 41H,#22H ;显示初始化,在做计算之前显示两个操作数,显示等号MOV DPTR,#TABLMOV A,R4MOVC A,@A+DPTRMOV 42H,AMOV A,R3MOVC A,@A+DPTRMOV 44H,ARETDISPLAY:MOV R5,#04H;共四位需要显示MOV R0,#41HDISPLAY1:MOV A,@R0MOV SBUF,ADISPLAY2:JNB TI,DISPLAY2;是否传完了CLR TIINC R0DJNZ R5,DISPLAY1RETL:MOV A,R4MOVC A,@A+DPTRMOV 41H,A ;R4对应的段码MOV A,R3MOVC A,@A+DPTRMOV 42H,A ;R3对应的段码MOV 43H,#00HMOV 44H,#00HRETDELAY1: ;普通延时MOV R1,#20HDS1:MOV R2,#0FFHDS2:DJNZ R2,DS2DJNZ R1,DS1RETDELAY2:MOV R6,#14H ;定时1SMOV TMOD,#01HDS3:MOV TH0,#3CHMOV TL0,#0B0H ;50msSETB TR0LOOP:JNB TF0,LOOPCLR TF0CLR TR0DJNZ R6,DS3 ;1s到,中断返回RETTABL:DB 0BBH 09H 0EAH 6BH ;段码表DB 59H 73H 0F3H 0BHDB 0FBH 7BH 00H 0DBHDB 0F1H 0B2H 0E9H 0F2HDB 0D2H 40H实验结果及分析按键1:8+2= 结果:10按键2:8-2= 结果: 6按键3:8*2= 结果:16按键4:8/2= 结果:4从上面的结果可以看出,本次实验基本完成了实验要求。

微机原理实验一 编程实现键盘输入和显示

微机原理实验一  编程实现键盘输入和显示

实验一编程实现键盘输入和显示**************************************************************************************一、题目内容**************************************************************************************❖循环提示由键盘输入一个字符,若为自己姓的首字母(大小写均可),则显示‘My name is:XXX(自己的姓名拼音);若为自己学号的末位数字,则显示’ My ID number is:XXX(自己的学号);若输入其他字符则退出程序。

(三种情况都要验证至少一次截图附在实验报告中。

)❖以电科2班张弛同学1207071201242为例,运行程序后显示:▪Please input a character: z▪My name is: Zhang Chi▪Please input a character: 2▪My ID number is: 1207071201242▪Please input a character:a▪Quit the program.**************************************************************************************二、流程图****************************************************************************************************************************************************************************三、程序代码************************************************************************************** stack segment stack 'stack'dw 32 dup(0) ;定义32字空间stack endsdata segmentOBUF DB 'Please input a key',0DH,0AH,'$' ;定义字符串MSG1 DB 20H,'My name is:Zeng HongQing',0DH,0AH,0AH,'$' ;定义字符串MSG2 DB 20H,'My ID number is:2',0DH,0AH,0AH,'$' ;定义字符串data endscode s egmentbegin proc farassume ss:stack, cs:code, ds:datapush dssub ax,axpush axmov ax,datamov ds,axAGAIN: MOV DX,OFFSET OBUF;调用9号功能,输出字符串“Please input a character:”MOV AH,9INT 21HMOV AH,1;1号功能调用,等待输入一个字符INT 21HCMP AL,'z';将输入的字符与“z”比较是否一样JZ NAM ;如果为零即输入字符为z则跳转至NAMJMP ID ;如果不为零即输入字符非z则跳转至IDNAM: MOV DX,OFFSET MSG1;9号功能调用,输出“My name is:Zeng HongQing”MOV AH,9INT 21HJMP AGAINID: CMP AL,32H ;将输入的字符与2的ASSCII码比较是否相等JNZ OTHER ;如果不为零即输入不为2则跳转至OTHERMOV DX,OFFSET MSG2 ;为零即输入为2则调用9号功能输出“My ID number is:2”MOV AH,9INT 21HJMP AGAINOTHER: M OV AH,4CH;若输入的是其他字符,调用中断21h的4ch号功能,退出程序INT 21Hretbegin endpcode e ndsend begin**************************************************************************************四、操作截图****************************************************************************************************************************************************************************五、实验分析或经验总结************************************************************************************** 1、编译汇编文件:先在记事本里输入代码后,再用汇编编译器编译。

键盘扫描显示实验_汇编

键盘扫描显示实验_汇编
;;=================================================
;键盘扫描
TESTKEY: MOV A,14H
JNB ACC.2,TESTKEY1
INC 13H
INC 13H
SJMP TESTKEY2
TESTKEY1: MOV A,14H
JNB ACC.3,TESTKEY2
MOV DPTR,#0E101H
MOV A,R7
MOVX @DPTR,A
MOV A,12H
CLR C
RRC A
MOV 12H,A
MOV DPTR,#0E103H
MOVX A,@DPTR
MOV R7,A
MOV A,R7
CPL A
MOV R7,A
MOV A,R7
ANL A,#0FH
MOV 14H,A
DEC 13H
MOV A,#03H
MOVX @DPTR,A
MOV 08H,#0FFH
MOV 09H,#0FFH
MOV 0AH,#0FFH
MOV 0BH,#0FFH
MOV 0CH,#00H
MOV 0DH,#00H
WAIT1: LCALL GETKEY
LCALL MLOOP4
MOV A,R7
JZ WAIT1
LCALL KEY1
1、键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。
2、显示模块:将显示单元的内容在显示器上动态显示。
3、主程序:调用键输入模块和显示模块。
三、实验电路:
这里只是键盘草图,详细原理参见“8155键显模块”。
四、实验说明:
本实验仪提供了一个6×4的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回,如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高.这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的延时,防止键盘抖动。列扫描码还可以分时用作LED的位选通信号。

汇编与接口键盘显示实验报告

汇编与接口键盘显示实验报告

《微机原理与接口技术》上机实验报告学院(部)专业班级学生姓名学号实验六键盘扫描及显示设计实验一、实验目的1.学习按键扫描的原理及电路接法;2.掌握利用8255完成按键扫描及显示。

二、实验内容1.按原理图1连接好电路。

2.编程: 编程使得在键盘阵列上每按一个键后,微机屏幕和最右端的数码管上有相应字符显示出来,按“E”退出程序。

3.实验提示(1)8255CS接地址译码输出的288h~28fh。

(2)8255的A口PA0~PA7接数码管的a~dp。

数码管位码S0接+5V,S3~S1接GND。

(3)延时程序可用BIOS功能程序INT 1AH的0号功能程序:其出口参数:CH:CL=时:分;DH:DL=秒:1/100秒。

图1 键盘显示连接图三、程序流程四、程序代码data segmentstring db 'the initialization is okay$',0ah,0dhkey db 0e7h, 0ebh, 0edh, 0eeh, 0d7h, 0dbh, 0ddh, 0deh, 0b7h, 0bbh, 0bdh, 0beh, 77h, 7bh, 7dh, 7eharray db 33h, 37h, 66, 70, 32h, 36h, 65, 69, 31h, 35h, 39h, 68, 30h, 34h, 38h, 67num db 16over db ?data endsstack1 segment stack 'stack'dw 50 dup(?)stack1 endscode segmentassume cs:code, ds:data, ss:stack1start:mov ax,datamov ds,axmov ax,seg string ;显示提示mov ds,axmov dx,offset stringmov ah,09hint 21h.while 1call exam.if over == 69mov ah,4chint 21h.endif.endwmov ah,4ch ;/////////////////////int 21hexam proc ;检测子程序//////////////////mov al,81h ;设置8255工作方式字mov dx,28bhout dx,allp1:mov al,00h ;向C端口高四位输出低电平mov dx,28ahout dx,alin al,dx ;C端口低四位cmp al,0fhjz lp1call delay ;延时子程序mov bl,al ;保存列值mov al,88h ;重置8255工作方式字mov dx,28bhout dx,almov al,blmov dx,28ahin al,dx ;读入行值mov ah,blmov cl,4rcr ax,cl.if al == 0b7h ;1 mov over,31hmov al,31hmov dl,almov ah,2hint 21hmov al,06hmov dx,288hout dx,al.endif.if al == 0d7h ;2 mov over,32hmov al,32hmov dl,almov ah,2hint 21hmov al,05bhmov dx,288hout dx,al.endif.if al == 0e7h ;3 mov over,33hmov al,33hmov dl,almov ah,2hint 21hmov al,4fhmov dx,288hout dx,al.endif.if al == 07bh ;4 mov over,34hmov al,34hmov dl,alint 21hmov al,66hmov dx,288hout dx,al.endif.if al == 0bbh ;5 mov over,35h mov al,35hmov dl,almov ah,2hint 21hmov al,6dhmov dx,288hout dx,al.endif.if al == 0dbh ;6 mov over,36h mov al,36hmov dl,almov ah,2hint 21hmov al,7dhmov dx,288hout dx,al.endif.if al == 0ebh ;7 mov over,37h mov al,37hmov dl,almov ah,2hint 21hmov al,07hmov dx,288hout dx,al.endif.if al == 07dh ;8 mov over,38h mov al,38hmov dl,alint 21hmov al,7fhmov dx,288hout dx,al.endif.if al == 0bdh ;9 mov over,39h mov al,39hmov dl,almov ah,2hint 21hmov al,67hmov dx,288hout dx,al.endif.if al == 0ddh ;a mov over,65 mov al,65mov dl,almov ah,2hint 21hmov al,77hmov dx,288hout dx,al.endif.if al == 0edh ;b mov over,66 mov al,66mov dl,almov ah,2hint 21hmov al,7chmov dx,288hout dx,al.endif.if al == 7eh ;c mov over,67 mov al,67mov dl,alint 21hmov al,39hmov dx,288hout dx,al.endif.if al == 0beh ;dmov over,68mov al,68mov dl,almov ah,2hint 21hmov al,5ehmov dx,288hout dx,al.endif.if al == 0deh ;emov over,69mov al,69mov dl,almov ah,2hint 21hmov al,79hmov dx,288hout dx,al.endif.if al == 0eeh ;fmov over,70mov al,70mov dl,almov ah,2hint 21hmov al,71hmov dx,288hout dx,al.endif;////////;////////mov al,81h ;重置8255工作方式字mov dx,28bhout dx,allp6:mov dx,28ahmov al,00hout dx,alin al,dxcmp al,0fhjnz lp6retexam endp ;/////////////////////delay proc near ;延时子程序push ax ;delay 50ms--100msmov ah,0int 1ahmov bx,dxdelay1:mov ah,0int 1ahcmp bx,dxjz delay1mov bx,dxdelay2:mov ah,0int 1ahcmp bx,dxjz delay2pop axretdelay endpcode endsend start。

实验3 8259中读取键盘并显示实验

实验3 8259中读取键盘并显示实验

实验3 中断控制器接口编程一、实验目的1.掌握8259、8255编程方法。

2.学习DEBUG调试程序的使用方法。

二、实验准备1.复习教材《微机接口技术及应用》有关8259编程内容。

2.参考“汇编语言编程设计”有关书籍,预习DEBUG调试程序的使用方法。

三、实验内容(一)用EDIT进行文件编辑步骤同实验2,文件名为COMMU.ASM(二)编译程序1.程序汇编C:\WINDOWS\SHY2〉MASM.EXE COMMU↓显示object filename [COMMU.OBJ]↓source listing[NUL.LST]COMMU.LST↓cross reference[NUL.CRF]↓显示 Warring Errors 和Severe Errors信息若无错则可进行链接,若有错用EDIT修改源程序后再汇编直至无错误提示通过汇编为止。

2.程序链接C:\WINDOWS\SHY2〉LINK COMMU↓显示Run File [SOUND.EXE]↓List File[NUL.MAP]↓Libraries[.LIB]↓查子目录中文件,可见SOUND.OBJ 、COMMU.LST、SOUND.EXE文件已存在。

(三)运行程序1.C:\WINDOWS\SHY2〉COMMU↓2.从键盘输入发送内容,以自测方式,接受发送内容并显示在屏幕上。

(四)用DEBUG调试程序1.进入DEBUG并装入程序COMMU.EXE,操作如下:C:\WINDOWS\SHY2〉DEBUG COMMU.EXE↓DEBUG以-来回答。

2.用反汇编命令显示程序目标码,操作如下:-U↓屏幕显示12B5:0000 1E push ds12B5:0001 B8 0000 mov ax,012B5:0004 50 push ax12B5:0005 BA 03FB mov dx,3fbh12B5:0008 B0 80 mov al,80h12B5:000A EE out dx,al12B5:000B BA 03F8 mov dx,3f8h12B5:000E B0 60 mov al,60h•••所示信息从左至右依次为:段地址:偏移地址,机器语言指令,汇编语言指令查看程序目标码,并记录需设置断点处的地址。

键盘显示实验

键盘显示实验

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

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

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

二、实验内容1、I/O编程本实验的实验电路如图。

它做在一块扩展电路板上,用一根20芯扁平电缆线将实验板扩展插头与实验台上的扩展插头J7相连,为扩展电路连接电源及外部总线。

扩展电路板上的数码管、键盘阵列既能由8279控制,也可以由外部电路控制,其实现靠的是若干组短路子组成的控制选择开关K1,K2,K3,K4,KB0,KB1,KB2。

当K1,K3,K4连接在8279一端时,数码管由8279控制,连接在LS273一端时由外部总线通过LS273直接控制。

当K2,KB1,KB2,KB3连接在8279一端时,键盘阵列由8279控制,连接在8255一端时由外接芯片8255控制。

因为本实验为8279控制实验,所以除了连接J1和J7外,还需要将选择开关K1,K2,K3,K4,KB0,KB1,KB2连接在8279一端,以使数码管、键盘阵列由8279芯片控制。

3、编程2:中断编程利用实验台上提供的定时器8253和扩展板上提供的8279以及键盘和数码显示电路,设计一个电子钟。

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

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

要求具有如下功能:①、C键:清除,显示全零。

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

③、D键:停止,电子钟停止计时。

④、P键:设置时、分、秒值。

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

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

⑤、E键:程序退出。

四、编程2 接线方法1.用一根20芯扁平电缆将实验扩展板与实验台上扩展插头J7相连。

2.实验台上8253 CLK0 接1MHZ,GATE0 和GATE1接+5V,OUT0 接CLK1,OUT1 接IRQ,CS接280H~287H。

汇编数码显示及键盘实验实验报告

汇编数码显示及键盘实验实验报告

数码显示及键盘实验【实验内容】1、数码管显示0-72、独立按键识别【需要了解的知识】1、GPIO设定2、数码管动态扫描显示原理,键盘扫描工作原理,输入与输出及其处理【实验预习】仔细预读实验指导电子文档的实验六、七及其前面的实验流程【实验设备】Keil C51软件、ICE52 仿真驱动、MEFlash编程软件、USB驱动程序【实验过程】实验一数码管显示0-7实验任务:1)先将“0-7”数码管的段码值写入存储器中,使8位数码管从右至左显示0-7.实验步骤:1)首先在硬盘上建立一个文件夹;2)启动Keil C51软件;3)执行Keil C51软件的菜单“Project|New Project……”,弹出一个名为“Create New Project”的对话框。

输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮;4)紧接着弹出“Options for Target‘Target 1’”,为刚才的项目选择ATMEL的AT89S52的CPU。

选择之后,点击“确定”按钮;5)接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;6)执行菜单“File|New……”,出现一个名为“Text1”的文档。

接着执行菜单“File|Save”弹出一个名为“Save As”的对话框,将文件名改为“.asm”后缀,然后保存;7)添加源程序文件到工程中,一个空的源程序文件建成。

单击Keil C51软件左边项目工作窗口“Target1”上的“+”,将其展开。

然后右击“Source Group1”文件夹弹出下拉菜单,单击其中的“Add Files to Group‘Source Group1’”项;8)在弹出的对话框中先选择文件类型为“Asm Source file(*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“Source Group1”文件夹中;输入源程序代码;9)点击工具栏“Options for target”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。

实验一键盘显示实验

实验一键盘显示实验

实验一键盘显示实验一、实验目的(1)掌握MCS51 系统中键盘显示接口的方法;(2)掌握中断处理程序的编程方法。

二、硬件原理图2.1 数码管显示原理介绍实验箱上有6个共阴极数码管,图1是其外部特性图,图2是其内部原理图,由图2 可知,每个数码管由8个发光二极管组成,其中a~DP称为数码管的段控信号,K是8个发光二极管的公共端,称为位控信号。

所以为了让数码管显示一个数字,必须将位控信号接低电平,段控信号接高电平。

例如:如要显示数字“1”,b端和c 端应该接高电平,其余各端接低电平。

2.2 键盘扫描原理介绍键盘扫描原理如图3 所示,“K1”和“K2”是按键,按键的两端都接有10k的上拉电阻。

当行扫描端为低电平,同时“K1” 键被按下时,“K1”的列读取端就会出现低电平,由处理器对行扫描信号和列读取信号进行综合判断后,得出“K1”键被按下的结论。

2.3实验连线图实验接线如下图所示:单片机通过8279芯片控制数码管,同时以P1口扫描4*4键盘键值。

三、软件流程图3.1数码管显示实验流程图Y3.2扫描键盘显示实验流程图四、实验步骤⑴参照实验指导书连接杜邦线⑵编写程序,并用KeilC软件调试程序⑶程序编译无错后使用S51ISP 下载软件将程序下载到单片机中⑷观察实验现象,如果实验现象与预期不符则可以使用KeilC的软件仿真调试功能,通过软件仿真使程序单步运行,从中找到编程错误⑸向实验指导老师讲解程序原理,整理仪器离开实验室五、软件源码5.1数码管显示5.1.1C语言#include <reg52.h> //89C52 寄存器定义头文件#define DataPort P0sbit LATCH1=P2^2;//定义锁存使能端口段锁存sbit LATCH2=P2^3;// 位锁存unsigned chartable[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79, 0x71}; //段码表,从0到9,从A到Funsigned char code ID1[]={1,1,0,3,1,0,5,2};unsigned char code ID2[]={1,1,0,8,1,1,6,2};//学号unsigned char code location[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码void Delay(unsigned int t); //延时函数声明/*------------------------------------------------主函数------------------------------------------------*/main(){unsigned char i=0;int a=0;while(1){for(a=0;a<1000;a++){P0=location[i]; //取位码LATCH2=1; //位锁存LATCH2=0;P0=table[ID1[i]]; //取显示数据,段码LATCH1=1; //段锁存LATCH1=0;Delay(200); //扫描间隙延时,时间太长会闪烁,太短会造成重影i++;if(8==i) //检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位i=0;} //ID1显示结束for(a=0;a<1000;a++){P0=location[i]; //取位码LATCH2=1; //位锁存LATCH2=0;P0=table[ID2[i]]; //取显示数据,段码LATCH1=1; //段锁存LATCH1=0;Delay(200);//扫描间隙延时,时间太长会闪烁,太短会造成重影i++;if(8==i) //检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位i=0;}}} //ID2显示结束/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量-----------------------------------------------------------------------------,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}5.1.2汇编;态扫描数码显示程序;P0口接J3,数据端口;P2.2接J2 B端子,表示段码锁存;P2.3接J2 A端子,标志位码锁存ORG 00HMOV 20H,#06H ;1MOV 21H,#06H ;1MOV 22H,#3FH ;0MOV 23H,#4FH ;3MOV 24H,#06H ;1MOV 25H,#3FH ;0MOV 26H,# 6D H ;5MOV 27H,# 5B H ;2 学号LATCH1 BIT P2.2LATCH2 BIT P2.3 ;定义段锁存与位锁存START:CALL SCANJMP STARTSCAN:MOV A,#0FEH ;扫描子程序MOV R0,#20HSETB CMOV R2,#08HLOOP:MOV P0,ASETB LATCH2CLR LATCH2MOV P0,@R0SETB LATCH1CLR LATCH1INC R0CALL DELAYRLC ADJNZ R2,LOOPMOV R2,#08HRETDELAY:MOV R3,#1 ;扫描延时D1:MOV R4,#2D2:MOV R5,#248DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RETEND5.2扫描键盘显示#include<reg52.h> //包含头文件#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换#define KeyPort P1 //定义按键端口程序中遇到KeyPort 则用P1 替换sbit LATCH1=P2^2;//定义锁存使能端口段锁存sbit LATCH2=P2^3;// 位锁存unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~9 A~Funsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char TempData[8]; //存储显示值的全局变量void DelayUs2x(unsigned char t);//us级延时函数声明void DelayMs(unsigned char t); //ms级延时void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数unsigned char KeyScan(void);//键盘扫描unsigned char KeyPro(void);// 按键值处理函数,返回扫键值void Init_Timer0(void);//定时器初始化/*------------------------------------------------主函数------------------------------------------------*/void main (void){unsigned char num,i,j;unsigned char temp[8];Init_Timer0();while (1) //主循环{num=KeyPro();if(num!=0xff){if(i<8){temp[i]=dofly_DuanMa[num];if(num==14){temp[i]=dofly_DuanMa[num];i++;temp[i]=dofly_DuanMa[6];}for(j=0;j<=i;j++)TempData[7-i+j]=temp[j];}i++;if(i==9)//多出一个按键输入为了清屏原本应该为8{i=0;}}if(num==16){i=0;for(j=0;j<8;j++)//清屏TempData[j]=dofly_DuanMa[0];}Display(0,8); //显示全部8位//主循环中添加其他需要一直工作的程序}}/*------------------------------------------------uS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下T=tx2+5 uS------------------------------------------------*/void DelayUs2x(unsigned char t){while(--t);}/*------------------------------------------------mS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编------------------------------------------------*/void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/*------------------------------------------------显示函数,用于动态扫描数码管输入参数FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。

3 综合实验2-键盘和显示★★★

3 综合实验2-键盘和显示★★★

;-----综合实验2 键识别和显示程序-----------------CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 3000HSTART1: JMP STARTTABLE DB 66H, 65H, 63H, 56H, 55H, 53H, 36H, 35H, 33HLED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3H ;---------8155 端口定义-------------------PCON EQU 0FFE8HPA EQU 0FFE9HPB EQU 0FFEAHPC EQU 0FFEBH;-----显示缓冲区----------------BUF DB ?, ?, ?, ?, ?, ?;----------------主程序-----------------------START: CALL WPMOV AL, 03HMOV DX, PCONOUT DX, AL ;8155初始化MOV AL, 80HMOV DX, PD8255OUT DX, AL ;8255初始化MOV AL, 16HMOV DX, PCON8253OUT DX, AL ;8253初始化L1: CALL SCANCALL DISPJMP L1;--------下面开始是子程序-----------------;-------键扫描程序--------------------------SCAN: MOV AL, 00HMOV DX, PBOUT DX, AL ;行MOV DX, PCIN AL, DXOR AL, 0F8HCMP AL, 0FFHJZ P3;无键按下时,不需要刷新BUFCALL DELAYMOV CX, 3MOV AH, 0FEHP1: MOV AL, AHOUT DX, ALMOV DX, PCIN AL, DXOR AL, 0F8HCMP AL, 0FFHJNZ YEROL AH, 1LOOP P1JMP P3;如果没正确识别,则退出YE: AND AH, 07HAND AL, 07HMOV CL, 4SHL AL, CLOR AL, AHMOV SI, OFFSET TABLE+08HMOV BL, 08HLP1: CMP AL, [SI]JZ P2DEC SIDEC BLJMP LP1P2: NOPMOV BUF+3, BLP3:RET;----初始化显示缓冲区-----------------WP: MOV BUF, 11HMOV BUF+1, 11HMOV BUF+2, 10HMOV BUF+3, 08HRET;-------4位LED显示程序----------------DISP: MOV CL, 80H ;从最高位D5开始即D5=1 MOV BX, OFFSET BUFDISP1: MOV AL, [BX]PUSH BXMOV BX, OFFSET LEDXLAT ;查表得到显示字符的编码POP BXMOV DX, PAOUT DX, ALMOV AL, CLMOV DX, PB;---延时程序-----PUSH CXMOV CX, 0100HDELY: LOOP $POP CXCMP CX, 10H ;判断是否显示到最低位,如是,则退出JZ L4INC BXSHR CL, 1JMP DISP1L4: MOV AL, 00HMOV DX, PBOUT DX, ALRET;------小延时程序--------------DELAY: PUSH CXMOV CX, 0100HDELY1: LOOP $POP CXRETCODE ENDSEND START1_______________以上程序由任雯箐同学提供;-----综合实验2 键识别和显示程序-----------------CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 3400HSTART1: JMP START;-----字符LED显示编码---------------------------------LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3HKEYTAB DB 66H,65H,63H,56H,55H,53H,36H,35H,33H ;键值表;键值对应的键名0 1 2 3 4 5 6 7 8 其实就是键值的顺序KEY DB 66H ;当前读入的键值NUM DB 4 ;用于记录当前使用的是BUF中的第几个字节,初始值设为4 BUF DB 10H,10H,10H,10H ;显示缓冲区,并赋初值,作为初始化PORT0 EQU 0FFE8H ;8155 命令口PORTA EQU 0FFE9H ;字符编码端口PORTB EQU 0FFEAH ;高4位字位口/第3位键扫描口PORTC EQU 0FFEBH ;键入口;--注意下面端口的定义方式-----ZXK EQU PORTA ;字符编码端口ZWK EQU PORTB ;字符位端口START: ; 初始化8155MOV AL, 03HMOV DX, PORT0OUT DX, ALJM0:CALL CHECK ;键盘扫描程序CALL CHANGE ;将得到的键值转化成键名,并放入相应的BUF;连续调用显示程序40次(试出来的),延时的时间约比按键一次的时间略长MOV CX, 40LP0:PUSH CXCALL DISP;显示程序POP CXLOOP LP0JMP JM0;---键盘扫描子程序-------CHECK:WT1: XOR AX, AXMOV DX, PORTBOUT DX, ALMOV DX, PORTCIN AL, DXAND AL, 07HCMP AL, 07HJZ EXIT;若未按键,则退出MOV CL, 4SHL AL, CLPUSH AX ;将列值左移4位并保存MOV CX, 10LP11: LOOP LP11 ; 延时防抖动MOV CX, 3MOV BL, 4 ;0100H ,BL记录当前扫描的是哪一行(1表示)LP12:MOV AL, BLNOT AL ; 取反得到应输出的行值MOV DX, PORTBOUT DX, ALMOV DX, PORTCIN AL, DXAND AL, 07HCMP AL, 07HJNZ GO1 ; 若此行有键按下,则推出SHR BL, 1LOOP LP12;逐行扫描GO1:MOV AL, BLNOT AL ;取反得行值POP BXAND BL,070HAND AL,07HOR BL, ALMOV KEY, BL ; 得键值,放入KEYMOV AL, NUMINC ALCMP AL, 5JNZ GO01MOV AL, 1GO01:MOV NUM, AL;修改NUM值,确定由BUF中的哪一位显示新输入的键号EXIT:RET;----根据键值查表求相应的键名,并放入相应的BUF--CHANGE:MOV AL, KEYMOV DI, OFFSET KEYTABXOR CX, CXLP2:CMP AL, [DI]JZ GO2INC CLINC DIJMP LP2 ;得键号GO2:MOV SI, OFFSET BUFMOV AL, NUMXOR AH, AHADD SI, AXDEC SIMOV [SI], CL ;将键号放入相应的BUF中EXIT1: RET;-------------显示程序---------------------------DISP: MOV CL, 80H ;从最高位7开始,PORTB中的高4为字型口MOV BX, OFFSET BUFDISP1: MOV AL, [BX]PUSH BXMOV BX, OFFSET LEDXLAT ;查表得到显示字符的编码POP BXMOV DX, ZXKOUT DX, ALMOV AL, CLMOV DX, ZWKOUT DX, AL;---延时程序-----PUSH CXMOV CX, 0100HDELY: LOOP $POP CXCMP CX, 10H ;判断是否显示到最低位,如是,则退出JZ L4INC BXSHR CL, 1JMP DISP1L4: MOV AL, 00HMOV DX, ZWKOUT DX, ALRETCODE ENDSEND START1_______________以上程序由温媛媛同学提供。

实验三键盘与显示

实验三键盘与显示

定时器实验
实验内容
例程 动态数码显示模块显示“168168” 。
画出实验例程的流程图。 修改程序,实现八位LED数码管只显示其中的 两位。 将显示改成闪烁显示模式,频率约1显示器的接口方法和编程方法; 掌握键盘和八段码显示器的工作原理; 掌握静态显示的原理和相关程序的编写;
实验说明
实验箱提供了8个按钮的小键盘,可接到单片机的 并行口,如果有键按下,则相应输出为低,否则输出 为高。单片机通过识别,判断按下什么键。有键按下 后,要有一定的延时,防止由于键盘抖动而引起误操 作。
音频驱动实验
实验内容:
例程 在查询式键盘模块上按下某个键,观察数
码管显示是否与按键值一致,键值从右至左为 0~7。 设计长按功能,当按键时间长于3秒时,个位上 的数字以一定速率增加,直至按键释放。
实验三 键盘与显示
动态扫描显示(实验四) 查询式键盘(实验五)
动态扫描显示实验
实验目的
掌握数字、字符转换成显示段码的软件译码方法; 动态显示的原理和相关程序的编写;
实验说明
动态显示,也称扫描显示。显示器由8个共阴极 LED数码管构成。单片机P0口输出显示段码,经由一 片74LS245驱动输出给LED管,由P1口输出位码,经 由74LS06输出给LED管。

单片机实验键盘显示

单片机实验键盘显示

实验七8255 键盘显示实验【实验目的】1.熟悉8255与单片机的接线和I/O编程方法;2.熟悉数码管的显示原理与编程;3.熟悉8255扫描键盘与读取键值的编程。

【实验内容】使用单片机、8255模块和数码管显示电路,编程实现在数码管上从右至左显示0-5,当有键按下时在数码管最右1位显示按键的键码。

【实验原理与设计】1.硬件电路设计本次实验使用实验箱上的E1、E3和F6模块电路。

如图7.1所示。

E1E3F6图7.1 实验箱(1)8255模块(E3区)PA口作为位扫描口(键扫描口),PB口输出字形码,PC口作为键值读入口,与数码管显示电路和矩阵键盘模块电路(F6区)相应接口连接,8255的数据总线D0-D7、读(/RD)、写(/WR)、端口选择A0、A1和片选/CS已和单片机接好。

各端口地址如下:PA口:0FF28H;PB口:0FF29H;PC口:0FF2AH;控制口:0FF2BH单片机与8255模块电路连接图如图7.2所示。

图7.2 单片机与8255的电路连接(2)数码管显示电路(F6区)实验箱上提供的数码管显示电路如图7.3所示。

实验时需将数码管显示电路中的JLED与8255的PB口相连,JS与8255的PA口相连,JLED和JS分别位于E6区,同时E6区SW3、SW4和SW4红色拨码开关打在“OFF”位置。

图7.3数码管模块连接电路(3)矩阵键盘模块电路(F6区)实验箱上提供的矩阵键盘模块电路如图7.4所示,实验时将该电路中的JR(位于E6区)与8255的PC口相连。

图7.4矩阵键盘模块电路2.程序设计根据实验内容程序主流程图如图7.5所示。

图7.5 主程序流程图(1)初始化MOV A, #81H ;PA口(位扫描口)和PB口(字形码)做输出,PC口(键扫描口)做输入MOV DPTR, #0FF2BH ;实验箱接线决定8255的控制口地址为FF2BHMOVX @DPTR, A ;将命令字82H送给8255控制口确定各口工作方式(2)显示数据子程序显示数据子程序流程图如图7.6所示。

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告实验一、汇编运行环境及方法、简单程序设计一、程序说明本程序用来比较两个字符串string1和string2所含的字符是否相同。

若相同’,否则显示‘No match’。

则显示‘Match在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1’和‘Nomatch’。

再代码段比较字符串string1和string2,和mess2,分别代表‘Match通过比较判断是否相同。

若相同则显示‘Match’,否则显示‘No match’。

二、调试说明再EDIT中建立ASM文件,再用汇编程序对源程序汇编产生目标文件Obj,再用连接程序产生执行文件EXE。

再用Debug进行调试。

其中常用到的指令有:用-g命令来用运行程序,用-u命令来显示程序,用-d 命令来查看数据段的情况,-e或-f命令来修改需要改正的部分,用-t指令来逐步执行程序,用-r指令来查看寄存用器和修改寄存器的值,-q命令用来退出debug程序。

在这些命令的后面加上地址,可以将命令执行到相应的地方。

如用-g指令运行程序后,再用-u指令显示程序的执行借给如下:若将string2改为'Move the cursor backwards.',程序的其他部分不做改动,执行结果:若将mov cx,25语句改成mov cx,24,结果为:此时少做了一次循环,得到的结果就不正确了。

实验二、用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等一、程序说明本实验包括两个部分,第一个部分是将AX和BX的内容进行交换,并用堆栈作为两寄存器交换内容的中间存储单元;第二部分是用DEBUG的命令将存储器偏移地AH, 0BH,0CH,0DH,0EH。

在DEBUG状态址300H,304H连续单元顺序装入0 下送入给出的程序中。

第一个程序先将AX的内容进栈,然后将BX的内容赋给AX,再将出栈的内容赋给BX即可。

第二个程序是在进入debug后,用-a指令输入给出的程序,然用-r指令安要求修改内存的内容,再用-t指令逐步执行每条指令,看修改的内存内容对指令执行结果的影响。

  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显示字符,按照说明修改代码,还实现了显示自己名字的拼音首字母,挺有意思的。

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

相关文档
最新文档