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

合集下载

键盘显示程序设计实验

键盘显示程序设计实验

实验四键盘显示程序设计实验目的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。

汇编语言与接口技术实验报告

汇编语言与接口技术实验报告

汇编语言与接口技术实验报告学院:信息与电子工程学院专业:班级:学号:姓名:浙江科技学院2012-2013学年第1学期实验1 汇编语言程序设计一、实验目的1. 熟悉MASM 6.11汇编语言程序开发环境。

2. 掌握汇编语言程序的调试方法和常用的调试工具。

二、实验内容1. 安装MASM 6.11。

2. 设在内存中首地址为BLOCK的区域存有一批数据:61H,84H,93H,0C4H,17H,0FFH,52H,2AH。

分别按下列要求编写汇编语言程序:(1) 视该批数据为8位无符号数,采用冒泡法将其按升序排序;(2) 视该批数据为8位有符号数,采用冒泡法将其按升序排序。

三、实验要求1. 根据实验内容编写程序。

2. 上机调试程序。

3. 记录并分析程序运行结果。

五、程序代码1. 8位无符号数冒泡法排序程序如下:.model small.datan dw 8block db 61h,84h,93h,0c4h,17h,0ffh,52H,2ah .stack 60h.code.startupmov ax,@datamov ds,axmov cx,ndec cxloop1: mov dx,cxmov bx,0loop2: mov al,block[bx]cmp al,block[bx+1]jna continuexchg al,block[bx+1]mov block[bx],alcontinue: add bx,1loop loop2mov cx,dxloop loop1.exitend2、8位有符号数冒泡排序程序如下.model small.datan dw 8block db 61h,84h,93h,0c4h,17h,0ffh,52H,2ah .stack 60h.code.startupmov ax,@datamov ds,axmov cx,ndec cxloop1: mov dx,cxmov bx,0loop2: mov al,block[bx]cmp al,block[bx+1]jle continuexchg al,block[bx+1]mov block[bx],alcontinue: add bx,1loop loop2mov cx,dxloop loop1.exitend六、程序运行结果及分析在命令行debug,反汇编找到初始程序入口0017查看cup寄存器的内容实验2 系统中断接口实验一、实验目的1. 熟悉可编程中断控制器8259A的使用方法。

汇编程序设计从键盘输入数据并显示

汇编程序设计从键盘输入数据并显示

微型计算机原理及应用实验教程实验二从键盘输入数据并显示一实验目的:掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理,并在程序中设置错误出口。

二实验内容:编写程序,将键盘接收到的四位十六进制数转换为等值的二进制数,再显示在屏幕上。

若输入的不是0-F间的数字,则显示出错信息,并要求重新输入。

三实验程序:DATASSEGMENTDATA1DB17DUP(?)DATA2DB'Fault',0DH,0AH,'$'DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXL7:LEABX,DATA1MOVCX,4L2:MOVAH,1 INT 21H CMPAL,'F'JAL6 CMPAL,'A'JAE L5 CMPAL,'9'JAL6 CMPAL,'0' JAEL5L6:LEABX,DATA2 CALL CCXS JMP L7L5:CMPAL,40H JBL4 SUBAL,7L4:SUBAL,30H PUSHCX MOVCX,4 SHLAL,CLL1:SHLAL,1MOVAH,0 ADCAH,30H MOV[BX],AH INCBXLOOP L1 POPCXLOOP L2 LEABX,DATA1 MOV[BX+16],'$' CALL CCXS MOVAH,4CH INT 21H CCXS PROC FAR MOVDX,BX MOVAH,9INT 21HRETCCXS ENDP CODESENDS ENDSTART。

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

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

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

按键显示电路实验报告(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. 了解了按键电路在实际应用中的重要性。

实验5(8255并行接口键盘及显示实验)

实验5(8255并行接口键盘及显示实验)

8255接口键盘及显示综合设计实验(曹建文2009年10月10日)一、实验目的1、掌握8255的工作方式及应用编程。

2、自行设计、制作和连接基于8255并行接口的键盘及显示实验电路。

3、实现扫描式矩阵键盘的功能和作用。

二、实验设备PC机1台,TD-PIT实验台1台,实验元器件若干。

三、实验内容1、使用8255实现键盘按键和七段LED数码显示管显示功能。

2、根据实验要求自行设计实验线路图,制作和焊接实验电路板和实验元器件。

3、按照实验要求和实验电路图编写实验程序,使得按下不同的数字按键后数码管显示相应的数字值(4位数码管)。

4、按照实验要求设计和编写实验程序,实现普通计算器的加/减法功能。

四、实验原理1、8255结构及原理并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。

CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位或32位等。

8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。

8255的内部结构及引脚如图-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图-2所示。

图-1:8255内部结构及引脚图(a)工作方式控制字(b)c口按位置位/复位控制字图-2:8255控制字格式(1)8255的内部结构如图-1所示,8255的内部结构由以下4个部分组成:(1)输入/输出端口A、B、C 。

这三个端口均可看作是I/O端口,但它们的结构和功能也稍有不同。

A口和B口是一个独立的8位I/O口。

C口可以看作是一个独立的8位I/O口;也可以看作是两个独立的4位I/O口。

(2)A组和B组控制电路。

这是两组根据CPU命令控制8255工作方式的电路,这些控制电路内部设有控制寄存器,可以根据CPU送来的编程命令来控制8255的工作方式,也可以根据编程命令来对C口的指定位进行置位/复位的操作。

键盘显示板实验报告

键盘显示板实验报告

课程设计报告实验名称:键盘显示板实验报告学院:电气工程与自动化学院专业班级:自动化113班学号:07号姓名:陈奎指导老师:王祖麟教授2012/7/28目录第一章:器材准备 31.1:所需器材: 31.2:制作过程: 31.3:制作原理: 4 第二章:键盘显示板制作 52.1:原理图 52.2:PCB 62.3:注意事项 62.4:实验目的 7 第三章:总结: 9第一章:器材准备1.1:所需器材铜板(100mm*75mm),开关(8个),电阻500Ω(8个),5KΩ(4个),74HC595(2个) ,打印机,美工刀与直尺,剪刀,玻璃板,塑料饭盒,盐酸,双氧水,盛水桶,木筷或竹筷,台钻,洗板水,热转印机、电烙铁等等,焊锡若干,砂纸。

1.2:制作过程:1:用电脑制作原理图,进而利用自动不限生成PCB,所用软件为AltiumDesignerSummer09、。

2:打印:用电脑将绘制好的PCB图打印出来,由于是双面板,所以要打印两张,可以用热转印纸或者白色广告纸,打印如果断线太多就要重新打印。

3:将铜板用砂纸打磨,然后将打印纸中一张对准板子,贴上去,保持纸张不要移动,让背后包紧,放进热转印机中,热转印机的温度必须在150度以上,但是不要超过200摄氏度,铜板出来后,待其冷却后,小心的拿掉广告纸,在预先画好的四个角上的黑点处打洞,然后用铁丝将另一张也按照黑点和铜板固定好,固定在另一面,这是要注意两变得孔,可以在打两个孔校正一下,准确无误后即可放入热转印机中,同样出来待其冷却后在揭去广告纸。

4:腐蚀铜板,制作电路图。

拿出铜板后,检查是否断线,断线的地方用黑色碳素笔棉花,待墨迹干却后,将其投入双氧水和盐酸3:1配置的腐蚀液中,时时观察,冒气泡时就来回拨动板子,待其上面的铜片腐蚀完以后,夹出板子,用清水冲先干净上面的腐蚀液。

5:钻孔:按照孔的大小用粗细两个钻台分别给板子钻孔,孔要尽量和过孔吻合,差的太远就会给焊接器材带来很大麻烦的。

学习“汇编”必须做的七个试验--实验三 查询式键盘、显示实验

学习“汇编”必须做的七个试验--实验三  查询式键盘、显示实验

实验三查询式键盘、显示实验一、实验目的1.掌握键盘和显示器的接口方法和编程方法2.掌握键盘和八段码显示器的工作原理二、实验说明本实验提供了8个按钮的小键盘,可接到单片机的并行口,如果有键按下,则相应输出为低,否则输出为高。

单片机通过识别,判断按下什么键,然后通过数码管显示相应按键。

有键按下后,要有一定的延时(10MS),防止由于键盘抖动而引起误操作。

为使CPU能正确地读出端口的状态,对每一次按键只作一次响应,就必须考虑如何去除抖动,常用的去抖动的方法有两种:硬件方法和软件方法。

单片机中常用软件法,软件法其实很简单,就是在单片机获得端口为低的信息后,不是立即认定按键已被按下,而是延时10毫秒或更长一些时间后再次检测端口,如果仍为低,说明按键的确按下了,这实际上是避开了按键按下时的抖动时间。

而在检测到按键释放后(端口为高)再延时5-10个毫秒,消除后沿的抖动,然后再对键值处理。

不过一般情况下,我们通常不对按键释放的后沿进行处理,实践证明,也能满足一定的要求。

以上是消除键抖动的原则。

三、电路原理图四、实验步骤及内容1.在proteus中按原理图画好电路图,途中电阻选200-500欧姆,数码管选用共阳极数码管。

2.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着建立源程序,进行编译,直到编译无误,然后生成一个.hex文件。

5.进行软件设置,选择软件仿真,单步调试等,结合程序的运行情况,观察相应寄存器和RAM中单元的数据。

6. 在proteus软件的单片机中添加进Keil uVision2仿真软件生成的.hex文件,然后点击RUN按钮运行程序。

在键盘上按下某个键,观察数显是否与按键值一致,键值从上至下为0~7。

五、参考源程序/****************************************************************程序名:查询式键盘、数码管显示实验*作者:熊春如*日期:2009年4月26日****************************************************************/;符号名定义KEYCODE EQU 70H ;键盘值存放单元;复位矢量和中断矢量入口地址定义ORG 0000HJMP mainORG 0030H;主程序MAIN:ORL P1,#0FFH ;将立即数0FFH与P1口锁存器相或,使P1口各锁存器 ;为1,以便作输入引脚使用MOV A,P1 ;读P1口引脚到累加器ACJNE A, #0FFH, K00 ;有键按下JMP MAIN ;无键按下,继续查询K00:CALL DELAY ;延时消抖MOV A,P1 ;再读P1口引脚到累加器ACJNE A, #0FFH, KEY ;确实有键按下,转去判断那个按键按下JMP MAIN ;无键按下,继续查询;判断那个按键被按下KEY:KEY0: JB P1.0,KEY1 ;P1.0有键按下,否则查询P1.1MOV KEYCODE,#0 ;把键盘值送入70HJMP KEYCONVERT ;转去键码转换程序KEY1: JB P1.1,KEY2 ;P1.1有键按下,否则查询P1.2MOV KEYCODE,#1 ;把键盘值送入70HJMP KEYCONVERT ;转去键码转换程序KEY2: JB P1.2,KEY3 ;P1.2有键按下,否则查询P1.3MOV KEYCODE,#2 ;把键盘值送入70HJMP KEYCONVERT ;转去键码转换程序KEY3: JB P1.3,KEY4 ;P1.3有键按下,否则查询P1.4MOV KEYCODE,#3 ;把键盘值送入70HJMP KEYCONVERT ;转去键码转换程序KEY4: JB P1.4,KEY5 ;P1.4有键按下,否则查询P1.5MOV KEYCODE,#4 ;把键盘值送入70HJMP KEYCONVERT ;转去键码转换程序KEY5: JB P1.5,KEY6 ;P1.5有键按下,否则查询P1.6MOV KEYCODE,#5 ;把键盘值送入70HJMP KEYCONVERT ;转去键码转换程序KEY6: JB P1.6,KEY7 ;P1.6有键按下,否则查询P1.7MOV KEYCODE,#6 ;把键盘值送入70HJMP KEYCONVERT ;转去键码转换程序KEY7: JB P1.7,MAIN ;P1.7有键按下,否则重新开始查询MOV KEYCODE,#7 ;把键盘值送入70HJMP KEYCONVERT ;转去键码转换程序;键码转换KEYCONVERT:MOV A,KEYCODE ;键盘值(即偏移量)送入AMOV DPTR,#SEGTAB ;共阳极笔段码的表头地址送入数据指针DPTRMOVC A,@A+DPTR ;把A+DPTR指定单元的内容复制到AMOV P2,A ;将A中(键盘值)查的结果(相应段码)送P2口显示JMP MAIN;延时子程序DELAY:MOV R4, #10 ;10MS延时子程序D1: MOV R5, #250 ;1MS,12M晶振D0: NOPNOPDJNZ R5, D0DJNZ R4, D1RET;共阳极笔段码0-9SEGTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;程序结束END六、参考源程序1、画出该程序设计的流程图。

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

《微机原理与接口技术》上机实验报告
学院(部)
专业
班级
学生姓名
学号
实验六键盘扫描及显示设计实验
一、实验目的
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 segment
string db 'the initialization is okay$',0ah,0dh
key db 0e7h, 0ebh, 0edh, 0eeh, 0d7h, 0dbh, 0ddh, 0deh, 0b7h, 0bbh, 0bdh, 0beh, 77h, 7bh, 7dh, 7eh
array db 33h, 37h, 66, 70, 32h, 36h, 65, 69, 31h, 35h, 39h, 68, 30h, 34h, 38h, 67
num db 16
over db ?
data ends
stack1 segment stack 'stack'
dw 50 dup(?)
stack1 ends
code segment
assume cs:code, ds:data, ss:stack1
start:
mov ax,data
mov ds,ax
mov ax,seg string ;显示提示
mov ds,ax
mov dx,offset string
mov ah,09h
int 21h
.while 1
call exam
.if over == 69
mov ah,4ch
int 21h
.endif
.endw
mov ah,4ch ;/////////////////////
int 21h
exam proc ;检测子程序//////////////////
mov al,81h ;设置8255工作方式字
mov dx,28bh
out dx,al
lp1:mov al,00h ;向C端口高四位输出低电平mov dx,28ah
out dx,al
in al,dx ;C端口低四位
cmp al,0fh
jz lp1
call delay ;延时子程序
mov bl,al ;保存列值
mov al,88h ;重置8255工作方式字
mov dx,28bh
out dx,al
mov al,bl
mov dx,28ah
in al,dx ;读入行值mov ah,bl
mov cl,4
rcr ax,cl
.if al == 0b7h ;1 mov over,31h
mov al,31h
mov dl,al
mov ah,2h
int 21h
mov al,06h
mov dx,288h
out dx,al
.endif
.if al == 0d7h ;2 mov over,32h
mov al,32h
mov dl,al
mov ah,2h
int 21h
mov al,05bh
mov dx,288h
out dx,al
.endif
.if al == 0e7h ;3 mov over,33h
mov al,33h
mov dl,al
mov ah,2h
int 21h
mov al,4fh
mov dx,288h
out dx,al
.endif
.if al == 07bh ;4 mov over,34h
mov al,34h
mov dl,al
int 21h
mov al,66h
mov dx,288h
out dx,al
.endif
.if al == 0bbh ;5 mov over,35h mov al,35h
mov dl,al
mov ah,2h
int 21h
mov al,6dh
mov dx,288h
out dx,al
.endif
.if al == 0dbh ;6 mov over,36h mov al,36h
mov dl,al
mov ah,2h
int 21h
mov al,7dh
mov dx,288h
out dx,al
.endif
.if al == 0ebh ;7 mov over,37h mov al,37h
mov dl,al
mov ah,2h
int 21h
mov al,07h
mov dx,288h
out dx,al
.endif
.if al == 07dh ;8 mov over,38h mov al,38h
mov dl,al
int 21h
mov al,7fh
mov dx,288h
out dx,al
.endif
.if al == 0bdh ;9 mov over,39h mov al,39h
mov dl,al
mov ah,2h
int 21h
mov al,67h
mov dx,288h
out dx,al
.endif
.if al == 0ddh ;a mov over,65 mov al,65
mov dl,al
mov ah,2h
int 21h
mov al,77h
mov dx,288h
out dx,al
.endif
.if al == 0edh ;b mov over,66 mov al,66
mov dl,al
mov ah,2h
int 21h
mov al,7ch
mov dx,288h
out dx,al
.endif
.if al == 7eh ;c mov over,67 mov al,67
mov dl,al
int 21h
mov al,39h
mov dx,288h
out dx,al
.endif
.if al == 0beh ;d
mov over,68
mov al,68
mov dl,al
mov ah,2h
int 21h
mov al,5eh
mov dx,288h
out dx,al
.endif
.if al == 0deh ;e
mov over,69
mov al,69
mov dl,al
mov ah,2h
int 21h
mov al,79h
mov dx,288h
out dx,al
.endif
.if al == 0eeh ;f
mov over,70
mov al,70
mov dl,al
mov ah,2h
int 21h
mov al,71h
mov dx,288h
out dx,al
.endif
;////////
;////////
mov al,81h ;重置8255工作方式字mov dx,28bh
out dx,al
lp6:mov dx,28ah
mov al,00h
out dx,al
in al,dx
cmp al,0fh
jnz lp6
ret
exam endp ;/////////////////////
delay proc near ;延时子程序
push ax ;delay 50ms--100ms
mov ah,0
int 1ah
mov bx,dx
delay1:
mov ah,0
int 1ah
cmp bx,dx
jz delay1
mov bx,dx
delay2:
mov ah,0
int 1ah
cmp bx,dx
jz delay2
pop ax
ret
delay endp
code ends
end start。

相关文档
最新文档