微机原理键盘扫描及显示设计实验

合集下载

微机原理实验六从键盘输入数据并显示

微机原理实验六从键盘输入数据并显示

实验六从键盘输入数据并显示1要求:编写程序,将键盘接收到的四位十六进制数转换为等值的二进制数,并显示在屏幕上。

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

2目的:掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理。

实验程序CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTMARK DB?MESS DB'please input the number(H),press inter,ture into number(B).press space end.',0DH,0AH,'$'ERROR DB 0DH,0AH, 'input error',0DH,0AH,'$'DATA ENDSSTACK SEGMENTSTA DW32 DUP(?)TOP DW?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOPHEAD: CRLFMOV MARK,0MOV AH,09HLEA DX,MESSINT 21H ;显示提示输入的信息CALL GETNUM ;接收键入数值送DXCMP MARK,01HJE HEADMOV CX,0010H ;16位MOV BX,DXTTT: ROL BX,1 ;循环左移1位MOV DL,BLAND DL,01H ;屏蔽掉高7位ADD DL,30HMOV AH,02HINT 21H ;显示二进制位对应的ASCII字符LOOP TTTJMP HEADFINI: MOV AX,4C00HINT 21H ;返回DOSGETNUM PROC NEAR ;子程序,接收键入数值送DX PUSH CXXOR DX,DXGGG: MOV AH,01HINT 21HCMP AL,0DH ;输入为回车,则进行转换JE PPPCMP AL,20H ;输入为空格,则退回DOSJE FINICMP AL,30HJB KKKSUB AL,30HCMP AL,0AHJB GETSCMP AL,11HJB KKKSUB AL,07HCMP AL,0FHJBE GETSCMP AL,2AHJB KKKCMP AL,2FHJA KKKSUB AL,20HGETS: MOV CL,04SHL DX,CLXOR AH,AHADD DX,AXJMP GGGKKK: MOV AH,09HMOV DX,OFFSET ERRORINT 21HMOV MARK,01HPPP: PUSH DXCRLFPOP DXPOP CXRETGETNUM ENDPCODE ENDSEND START。

实验八 键盘扫描实验

实验八  键盘扫描实验

实验八键盘扫描实验一、实验目的1. 掌握中断键盘扫描编程方法。

2. 掌握LED动态显示方法。

二、实验原理及实验内容1. 实验原理无论是单片机控制系统还是单片机测量系统,都需要一个人机对话装置,这种人机对话装置通常采用键盘和显示器。

键盘是单片机应用系统中人机对话常用的输入装置,而显示器是单片机应用系统人机对话中的常用输出装置。

键盘是由若干个按键开关组成,键的多少根据单片机应用系统的用途而定。

键盘由许多键组成,而每个键相当于一个机械开关触点,当键按下时,触点闭合,当键松开时,触点断开。

单片机接收到按键的触点信号后作相应的功能处理。

因此对于单片机系统来说键盘接口信号是输入信号。

单片机的键盘接口分为独立式和矩阵式。

独立式键盘的每个按键都有一个信号线与单片机电路相连,所有按键有一个公共地或公共正端,每个键相互独立互不影响。

如图7-7所示,当按下键1时,无论其它键是否按下,键1的信号线就由1变0;当松开键1时,无论其它键是否按下,键1的信号线就由0变1。

矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处,每当一个按键按下时通过该键将相应的行、列母线连通。

若在行、列母线中把行母线逐行置0(一种扫描方式),那么列母线就用来作信号输入线。

矩阵式键盘原理图如图7-8所示。

图7-7 独立式按键原理图图7-8 矩阵式按键原理图针对以上两大类键盘工作方式,单片机又有三种键盘扫描方式:查询方式;定时扫描方式和中断扫描方式。

查询方式是指在程序中用一段专门的扫描和读按键程序不停查询有无按键按下,确定键值。

这种方式电路简单,但需要占用单片机的机器时间。

定时扫描方式是指利用单片机内的定时器来产生定时中断,然后在定时中断的服务程序中扫描,检查有无按键按下,确定键值。

这种方式的电路也比较简单,不占用单片机的机器时间,但需要占用一个定时器,同时定时的时间不能过长,否则可能检测不到相应得按键。

中断扫描方式是指当有键按下时由相应的硬件电路产生中断信号,单片机在中断服务程序中扫描,检查有无按键按下,确定键值。

微机原理键盘扫描及显示设计实验

微机原理键盘扫描及显示设计实验

一、 实验名称:键盘扫描及显示设计实验 二、 实验目的1. 学习按键扫描的原理及电路接法; 2 .掌握利用8255完成按键扫描及显示。

三、 实验内容及步骤1.实验内容编写程序完成按键扫描功能,并将读到的按键值依次显示在数码管上。

实验机的按 键及显示模块电路如图 1所示。

按图2连线。

Γ≡≡If *—I〔01S冥Pπ图1键盘及显示电路2. 实验步骤 (1) 按图1接线;(2) 键入:CheCk 命令,记录分配的I/O 空间; (3) 利用查出的地址编写程序,然后编译链接; (4) 运行程序,观察数码管显示是否正确。

四、流程图22LZjXD2汽XDrXXDir d √I IWirI ⅝IOR A .■[QYO Λ :07 PBfl D⅛ PBl般唯* C4PB3PBl •皿 PBi 71 PB6 DO E55PB7FA.Q AlPAJAO 吨!PA5 I WR PCo 7 RD PCI ∙÷ CS PΩ I PCI图2实验连线>Cχ⅛ 7H *J J XXXXt- ⅛r√ *JJ <⅛i YYYY开始五、源程序是KeySCa n. asm;键盘扫描及数码管显示实验 根据CHECKE 置信息修改下列符号值 *******************的A 口地址的B 口地址 的C 口地址 的控制寄存器地址STACKI SEGMENT STACKDW 256 DUP(?) STACKI ENDS DATA SEGMENT DTABLE3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H DATA ENDS ; 键值表,0〜F 对应的7段数码管的段位值CODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX MOV SI,3000H ; 建立缓冲区,存放要显示的键值 MOV AL,00H ;先初始化键值为 0MOV [SI],AL MOV [SI+1],AL MOV [SI+2],AL MOV [SI+3],AL MOV DI,3003H初始化8255工作方式方式0, A 口、B 口输出,C 口低4位输入・ *************** IoYo EQU 9800H 片选IOYO 对应的端口始地址 MY8255_ _A EQU IOY0+00H*4 ;8255 MY8255__B EQU IOY0+01H*4 ;8255MY8255__C EQU IOY0+02H*4 ;8255 DBMOV DX,MY8255_MODE MOV AL,81H;・***************************************************************** MY8255_MODE EQU IOY0+03H*4 ;8255OUT DX,AL BEGIN:CALL DIS ; CALL CLEAR ; CALL CCSCAN ; 显示刷新清屏扫描按键JNZ GETKEY1 ; 有键按下则跳置GETKEY1MOV AH,1 ; INT 16HJZ BEGIN ; QUIT: 判断PC键盘是否有按键按下无按键则跳回继续循环,有则退出MOV AX,4C00H ;INT 21H返回到DOSGETKEY1:CALL DIS ;CALL DALLYCALL DALLYCALL CCSCAN ;JNZ GETKEY2 ; JMPBEGIN ; 显示刷新再次扫描按键有键按下则跳置GETKEY2 否则跳回开始继续循环GETKEY2:MOV CH,0FEHMOV CL,00H ;COLUM:设置当前检测的是第几列MOV AL,CH ; MOV DX,MY8255_AOUT DX,ALMOV DX,MY8255_C ;IN AL,DX 选取一列,将X1〜X4中一个置O读Y1〜Y4,用于判断是哪一行按键闭合L1:TEST AL,O1H ; JNZ L2 ; MOV AL,OOH ;JMP KCODE 是否为第1 行不是则继续判断设置第1 行第1 列的对应的键值L2:TEST AL,O2H ; JNZ L3 ; 是否为第2 行不是则继续判断MOV AL,04HJMP KCODEL3:TEST AL,04H JNZ L4MOV AL,08HJMP KCODEL4:TEST AL,08H JNZ NEXTMOV AL,0CHKCODE:ADD AL,CLCALL PUTBUFPUSH AX KON:CALL DISCALL CLEARCALL CCSCANJNZ KON POPAXNEXT:INC CL MOVAL,CH TESTAL,08H JZKERRROL AL,1 MOVCH,AL JMPCOLUM KERR:JMP BEGIN 设置第2 行第1 列的对应的键值是否为第3 行不是则继续判断设置第3 行第1 列的对应的键值是否为第4 行不是则继续判断设置第4 行第1 列的对应的键值将第1 列的值加上当前列数,确定按键值保存按键值显示刷新清屏扫描按键,判断按键是否弹起未弹起则继续循环等待弹起当前检测的列数递增检测是否扫描到第4 列是则跳回到开始处没检测到第4 列则准备检测下一列CCSCAN PROC NEAR MOV AL,00HMOV DX,MY8255_AOUT DX,AL 扫描是否有按键闭合子程序将4列全选通,X1〜X4置OMOV DX,MY8255_CIN AL,DXNOT ALAND AL,0FH RET CCSCAN ENDPCLEAR PROC NEARMOV DX,MY8255_BMOV AL,00H OUTDX,AL清除数码管显示子程序段位置0 即可清除数码管显示RET CLEAR ENDPDIS PROC NEAR ; PUSH AX ;MOV SI,3000HMOV DL,0F7HMOV AL,DLAGAIN:显示键值子程序以缓冲区存放的键值为键值表偏移找到键值并显示PUSH DXMOV DX,MY8255_A OUT DX,AL ;MOV AL,[SI] ; MOV BX,OFFSET DTABLE AND AX,00FFHADD BX,AXMOV AL,[BX] ; MOV DX,MY8255_BOUT DX,AL ;CALL DALLY INC SI ; POP DXMOV AL,DLTEST AL,01H ;JZ OUT1 ;ROR AL,1MOV DL,ALJMP AGAIN ; OUT1: 设置X1〜X4,选通一个数码管取出缓冲区中存放键值将键值作为偏移和键值基地址相加得到相应的键值写入数码管A〜Dp取下一个键值判断是否显示完?显示完,返回未显示完,跳回继续POP AXRET DIS ENDP 读Y1〜Y4取出Y1〜Y4的反值PUTBUF PROC NEAR ; 保存键值子程序MOV SI,DIMOV [SI],ALDEC DICMP DI,2FFFHJNZ GOBACKMOV DI,3003HGOBACK: RETPUTBUF ENDPDALLY PROC NEAR ; 软件延时子程序PUSH CXMOV CX,00FFHD1: MOV AX,00FFHD2: DEC AXJNZ D2LOOP D1POP CXRETDALLY ENDPCODE ENDSEND START六、体会和感想通过这次的实验我了解到自己还有很多的不足,比如做实验的速度很慢,效率很低,思维不集中导致最后老师验收的时候没有来的及交,对书本的了解不是很透彻,也因此我决定下次实验的时候一定要好好地去思考,尽量在课外把实验看懂!。

微机原理键盘控制与显示实验报告

微机原理键盘控制与显示实验报告

专业:电气工程及其自动化姓名: _________实验报告学号: _______日期: ___ _____地点: ____ ________课程名称: ________微机原理(实验)___________指导老师: ____徐习东 _______成绩:__________________实验名称: ______ 键盘控制与显示_______实验类型: _____软件实验 ______同组学生姓名:__________一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得【实验目的】1.通过实验掌握 TMS320F2812 通用输入 / 输出管脚直接控制外围设备的方法2.了解发光二极管的控制编程方法。

3.了解 SPI 的使用。

4.了解如何使用 GpioA 口进行数据的锁存5.通过实验掌握 TMS320F2812 的扩展端口接收外围设备信息的方法6.了解键盘的使用原理及编程方法【实验内容】1.按键显示程序,对按键记录次数,以二进制显示在16 个 LED 上。

2.定时器编程,并用按键控制各位时分秒,使其能完成加减操作【实验仪器】TMS320F2812数字信号处理器与学生用集成板。

【实验步骤】1.撰写代码2.调试代码3.实现功能【实验代码】一、定时器①宏定义和全局变量定义然后同时定义了全局变量,包括时、分、分析:这段代码是初始宏定义,用于定义按键对应的编码与地址,秒,按键编码, LED 编码和控制位。

②共阳字形码分析:由于这次实验要用到数码管,所以我们要定义一个数码管共阳端字形码,使每一个代码对应一种显示状态。

③SPI 初始化子程序分析:这一段是本次实验的重点,就是SPI 初始化。

1 )SPICCR :用于控制SPI 的状态,上下降沿发送,还有几位的数据。

其中第7 位,即 SPICCR.6 是控制SPI 在上下沿发送, 1 代表下降沿,2 代表上升沿;第8 位,即 SPICCR.7 是控制复位的,0 代表为复位状态;低 4 位控制数据长度,长度等于n+1 。

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

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

实验一编程实现键盘输入和显示**************************************************************************************一、题目内容**************************************************************************************❖循环提示由键盘输入一个字符,若为自己姓的首字母(大小写均可),则显示‘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、编译汇编文件:先在记事本里输入代码后,再用汇编编译器编译。

new 8(键盘扫描及显示)

new 8(键盘扫描及显示)

机械式薄膜式电容式霍尔效应式键盘接口电路实例:10K +5VCD E F 89A B 456701238255APA0PA1PA2PA3PC0PC1PC2PC3【分析】【键扫描过程】①②③④z 检测矩阵中是否有键压下z 消除键抖动A 口输出一个低电平C 口读入各列的值z 确定被压下键所在的行列号06(也可用其他方法得到键值)z 获取键的扫描码z 上一次压下的键是否已松开三、实验原理8255各接口及寄存器地址:8255A 方式选择控制字:89H1 0 0 0 X 0 01C口低4位I/O选择1:输入;0:输出C口高4位I/O选择1:输入;0:输出B口方式0:方式0;1:方式1B口I/O选择1:输入;0:输出A口I/O选择1:输入;0:输出A口方式00:方式001:方式11X:方式22、原理图:数码管共阴显示键扫键值平均电流约为10mA~20mA。

’F’00000111共阴数码管显示笔划码:笔划码:3FH, 06H, 5BH, 4FH, 66H, 6DH 笔划码:7DH, 07H, 7FH, 6FH, 77H, 7CH 笔划码:39H, 5EH, 79H, 71H, 00H, 0E3H4、动态显示Dp(h)¾只有一只数码管显示数值在字形口送笔划码,在字位口使显示数码管的共阴端为0,其它数码管的共阴端为1X6X5X1动态显示子程序流程框图:查表指令XLAT有按键依次检测1-4列,确定是第几行按键按下由行号,列号得键值键值送显示缓冲区按键弹起?调显示ANO YES。

实验8 键盘扫描和显示实验

实验8  键盘扫描和显示实验

实验八键盘扫描和显示实验实验目的:掌握键盘和显示器的接口方法和编程方法;掌握键盘扫描和LED八段数码管显示器的工作原理。

实验内容:利用LAB6000通用微控制器提供的键盘扫描电路和显示电路,完成键盘扫描和显示实验。

把按键输入的键码在六位LED数码管上显示出来。

可分成三个模块:①键输入模块:扫描键盘,读取一次键盘并将键值存入键值缓冲单元。

②显示模块:将显示单元的内容在六位LED数码管上动态显示。

③主程序:调用键输入模块和显示模块。

实验步骤:1.按照流程图分析参考程序,在读懂的基础上编写或修改程序;2.将键盘和显示器的片选连接孔KEY/LED—CS与片选口CS0连接;3.输入编好的程序,汇编并运行。

4.观察程序运行后LED 的显示,按下数字键,再观察LED 的显示。

5.按照思考题的要求,修改程序进行实验。

实验电路原理图:实验报告要求:记录实验现象,分析原因。

整理好运行正确的程序,写出总结和体会。

思考题:1.如果显示5、6、7、8如何修改?2.LEDTAB(字形表)每一个码代表什么?3.如果把CS0改为CS1,程序如何修改?4.怎样关显示,开放键盘?5.CPL A 指令是什么功能?为什么要用该指令?6.MOVC 和MOVX 指令有何不同?7.LEDBuf equ 60H 是什么指令?什么含义?8.MOV LEDBuf+1,#5BH是什么含义?附: 参考流程图附: 参考程序Org 0000hOUTBIT equ 8002h ;位控制口OUTSEG equ 8004h ;段控制口IN equ 8001h ;键盘读入口LEDBuf equ 60h ;显示缓冲器首址 ljmp StartLED字形表LEDTAB:db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay: mov r7, #00h 延时子程序Delay1:djnz r7, Delay1djnz r6, Delay1retDisplay: LED显示子程序mov r0, #LEDBufmov r1, #06h ;共6个八段LEDmov r2, #00100000b ;从左边开始显示Loop: mov dptr, #OUTBIT ;指向位控制口mov a, #00h ;关显示movx @dptr, amov a, @r0 ;取一个待显示数mov dptr, #OUTSEG ;指向段控制口movx @dptr, a ;输出段码mov dptr, #OUTBIT ;指向位控制口mov a, r2 ;取位码movx @dptr, a ;输出位码mov r6, #01hcall Delaymov a, r2 ;位码右移一位rr amov r2, ainc r0 ;指向下一个待显示数djnz r1, Loop ;6个LED都显示完了吗? retTestKey: 扫描键盘mov dptr, #OUTBIT ;指向位控制口mov a, #00h ;开放键盘movx @dptr, amov dptr, #IN ;指向键盘读入口movx a, @dptr ;读入键盘状态cpl aanl a, #0fh ;高4位不用retKeyTab:db 16h, 15h, 14h, 0ffh 键值表db 13h, 12h, 11h, 10hdb 0dh, 0ch, 0bh, 0ahdb 0eh, 03h, 06h, 09hdb 0fh, 02h, 05h, 08hdb 00h, 01h, 04h, 07hGetKey:mov dptr, #OUTBITmov P2, dphmov r0, #Low(IN)mov r1, #00100000bmov r2, #06h ;共6列KLoop: mov a, r1 ;找出键所在列cpl amovx @dptr, acpl arr a ;右移一位,指向下一列mov r1, amovx a, @r0cpl aanl a, #0fhjnz Goon1 ;该列有键入djnz r2, KLoopmov r2, #0ffh ;没有键按下, 返回 0ffh sjmp ExitGoon1: mov r1, a ;键值 = 列*4 + 行mov a, r2dec arl arl amov r2, a ;r2 = (r2-1)*4mov a, r1 ;r1中为读入的行值mov r1, #4LoopC: rrc a ;移位找出所在行jc Exitinc r2 ;r2 = r2+ 行值djnz r1, LoopCExit: mov a, r2mov dptr, #KeyTabmovc a, @a+dptrmov r2, aWaitRelease: 等待键释放mov dptr, #OUTBITclr amovx @dptr, amov r6, #10call Delaycall TestKeyjnz WaitReleasemov a, r2retStart: mov sp, #50hmov LEDBuf+0, #06h ;显示 1mov LEDBuf+1, #5bh ;显示 2mov LEDBuf+1, #4fh ;显示 3mov LEDBuf+2, #66h ;显示 4mov LEDBuf+3, #66hmov LEDBuf+4, #0mov LEDBuf+5, #0MLoop: call Display ;显示(调显示子程序)call TestKey ;有键入? (调扫描键盘子程序) jz MLoop ;无键入, 继续显示call GetKey ;读入键码anl a, #0fh ;显示键码mov dptr, #LEDTABmovc a, @a+dptrmov LEDBuf+5, aljmp MLoopend。

8255扫描键盘、显示实验

8255扫描键盘、显示实验

实验九8255扫描键盘、显示实验一.实验要求利用8255可编程并行口做一个扫描键盘实验,把按键输入的键码,显示在由8279控制的七段数码管上。

8255PA口做键盘输入线,PB口作扫描线。

二.实验目的1.掌握8255编程方法。

2.掌握扫描键盘和显示的编程方法。

三.实验电路及连线CS8255接8500H,则命令字地址为8506H,PA口地址为8500H,PB口地址为8502H,PC口地址为8504H。

CS8279接8700H,则8279的状态口地址为8701H; 8279的数据口地址为8700H;模块中的十个短路套都套在8255侧。

四.实验说明在PA口与PB口组成的64点阵列上,把按键接在不同的点上,将得到不同的键码,本实验采用8×2的阵列,共可按16个键。

显示部分由8279控制,由7407驱动8位数码管显示。

五.实验程序框图主程序框图读键显示部分框图六.实验程序:D8255 EQU 8506H ;8255状态/数据口地址D8255A EQU 8500H ;8255 PA口地址D8255B EQU 8502H ;8255 PB口地址Z8279 EQU 8701H ;8279状态口地址D8279 EQU 8700H ;8279数据口地址DISPTR EQU 08H ;当前显示位置KEYVAL EQU 09H ;读到的键码ORG 0000HLJMP STARTORG 0040HSTART:MOV SP,#60HLCALL DELAY ;延时MOV DISPTR,#30H ;显示缓冲区头指针MOV DPTR,#D8255MOV A,#90H ;置8255状态;方式0,PB,PC口输出,PA口输入MOVX DPTR,AMOV DPTR,#Z8279 ;置8279命令字MOV A,#0D3HMOVX DPTR,A ;清LED显示MOV A,#00HMOVX DPTR,AMOV A,#38HMOVX DPTR,AMOV A,#0D1HKB_DIS:LCALL RD_KB ;读键盘MOV A,#0FFHCJNE A,KEYVAL,DISBUF ;判读到键SJMP KB_DIS ;没有则继续读键DISBUF:LCALL DISP ;把键移入显存LCALL DELAY ;延时消抖LCALL DELAYSJMP KB_DISDISP: ;显存依次前移MOV R1,#31H ;在最后加入新键值MOVE:MOV A,R1DEC R1MOV R1,AINC R1INC R1CJNE R1,#38H,MOVEMOV 37H,KEYVALMOV KEYVAL,#0FFHMOV DPTR,#Z8279MOV A,#90HMOVX DPTR,AMOV R0,#08HMOV R1,#30HMOV DPTR,#D8279LP: MOV A,R1MOVX DPTR,AINC R1DJNZ R0,LPRETRD_KB: ;键盘扫描MOV A,#02H ;扫描第一行MOV DPTR,#D8255BMOVX DPTR,AMOV DPTR,#D8255AMOVX A,DPTRMOV R1,#00HCJNE A,#0FFH,KEYCAL ;判键是否按下MOV A,#01H ;扫描第二行MOV DPTR,#D8255BMOVX DPTR,AMOV DPTR,#D8255AMOVX A,DPTRMOV R1,#08HCJNE A,#0FFH,KEYCALSJMP NOKEY ;无键按下KEYCAL: ;计算键码MOV R0,#08HSHIFT:RRC AJNC CALCINC R1DJNZ R0,SHIFTCALC: ;换算显示码MOV DPTR,#DL_DATMOV A,R1MOVC A,A+DPTRMOV KEYVAL,ARETNOKEY: MOV KEYVAL,#0FFH ;返回无键标志RETDELAY: MOV R0,#0H ;延时子程序DELAY1: MOV R1,#0HDJNZ R1,$DJNZ R0,DELAY1RETDL_DAT: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0,1,2,3,4,5,6,7DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8,9,A,B,C,D,E,FEND实验十8279显示实验一.实验要求编制程序,利用8279及键盘显示接口电路,编程实现按键的读取,并将按键值显示在数码管上。

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

一、实验名称:
键盘扫描及显示设计实验
二、实验目的
1.学习按键扫描的原理及电路接法;
2.掌握利用8255完成按键扫描及显示。

三、实验内容及步骤
1. 实验内容
编写程序完成按键扫描功能,并将读到的按键值依次显示在数码管上。

实验机的按键及显示模块电路如图1所示。

按图2连线。

图1 键盘及显示电路
图2 实验连线
2. 实验步骤
(1)按图1接线;
(2)键入:check命令,记录分配的I/O空间;
(3)利用查出的地址编写程序,然后编译链接;
(4)运行程序,观察数码管显示是否正确。

四、流程图
五、源程序
;Keyscan.asm
;键盘扫描及数码管显示实验
;***************根据CHECK配置信息修改下列符号值*******************
IOY0 EQU 9800H ;片选IOY0对应的端口始地址
;*****************************************************************
MY8255_A EQU IOY0+00H*4 ;8255的A口地址
MY8255_B EQU IOY0+01H*4 ;8255的B口地址
MY8255_C EQU IOY0+02H*4 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATA ENDS ;键值表,0~F对应的7段数码管的段位值
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,3000H ;建立缓冲区,存放要显示的键值
MOV AL,00H ;先初始化键值为0
MOV [SI],AL
MOV [SI+1],AL
MOV [SI+2],AL
MOV [SI+3],AL
MOV DI,3003H
MOV DX,MY8255_MODE ;初始化8255工作方式
MOV AL,81H ;方式0,A口、B口输出,C口低4位输入
OUT DX,AL
BEGIN:
CALL DIS ;显示刷新
CALL CLEAR ;清屏
CALL CCSCAN ;扫描按键
JNZ GETKEY1 ;有键按下则跳置GETKEY1
MOV AH,1 ;判断PC键盘是否有按键按下
INT 16H
JZ BEGIN ;无按键则跳回继续循环,有则退出
QUIT:
MOV AX,4C00H ;返回到DOS
INT 21H
GETKEY1:
CALL DIS ;显示刷新
CALL DALLY
CALL DALLY
CALL CCSCAN ;再次扫描按键
JNZ GETKEY2 ;有键按下则跳置GETKEY2
JMP BEGIN ;否则跳回开始继续循环
GETKEY2:
MOV CH,0FEH
MOV CL,00H ;设置当前检测的是第几列
COLUM:
MOV AL,CH ;选取一列,将X1~X4中一个置0 MOV DX,MY8255_A
OUT DX,AL
MOV DX,MY8255_C ;读Y1~Y4,用于判断是哪一行按键闭合IN AL,DX
L1:TEST AL,01H ;是否为第1行
JNZ L2 ;不是则继续判断
MOV AL,00H ;设置第1行第1列的对应的键值JMP KCODE
L2:TEST AL,02H ;是否为第2行
JNZ L3 ;不是则继续判断
MOV AL,04H ;设置第2行第1列的对应的键值
JMP KCODE
L3:TEST AL,04H ;是否为第3行
JNZ L4 ;不是则继续判断
MOV AL,08H ;设置第3行第1列的对应的键值JMP KCODE
L4:TEST AL,08H ;是否为第4行
JNZ NEXT ;不是则继续判断
MOV AL,0CH ;设置第4行第1列的对应的键值
KCODE:
ADD AL,CL ;将第1列的值加上当前列数,确定按键值CALL PUTBUF ;保存按键值
PUSH AX
KON:CALL DIS ;显示刷新
CALL CLEAR ;清屏
CALL CCSCAN ;扫描按键,判断按键是否弹起
JNZ KON ;未弹起则继续循环等待弹起
POP AX
NEXT:
INC CL ;当前检测的列数递增
MOV AL,CH
TEST AL,08H ;检测是否扫描到第4列
JZ KERR ;是则跳回到开始处
ROL AL,1 ;没检测到第4列则准备检测下一列MOV CH,AL
JMP COLUM
KERR:
JMP BEGIN
CCSCAN PROC NEAR ;扫描是否有按键闭合子程序
MOV AL,00H
MOV DX,MY8255_A ;将4列全选通,X1~X4置0 OUT DX,AL
MOV DX,MY8255_C
IN AL,DX ;读Y1~Y4
NOT AL
AND AL,0FH ;取出Y1~Y4的反值
RET
CCSCAN ENDP
CLEAR PROC NEAR ;清除数码管显示子程序
MOV DX,MY8255_B ;段位置0即可清除数码管显示
MOV AL,00H
OUT DX,AL
RET
CLEAR ENDP
DIS PROC NEAR ;显示键值子程序
PUSH AX ;以缓冲区存放的键值为键值表偏移找到键值并显示MOV SI,3000H
MOV DL,0F7H
MOV AL,DL
AGAIN:
PUSH DX
MOV DX,MY8255_A
OUT DX,AL ;设置X1~X4,选通一个数码管
MOV AL,[SI] ;取出缓冲区中存放键值
MOV BX,OFFSET DTABLE
AND AX,00FFH
ADD BX,AX
MOV AL,[BX] ;将键值作为偏移和键值基地址相加得到相应的键值 MOV DX,MY8255_B
OUT DX,AL ;写入数码管A~Dp
CALL DALLY
INC SI ;取下一个键值
POP DX
MOV AL,DL
TEST AL,01H ;判断是否显示完?
JZ OUT1 ;显示完,返回
ROR AL,1
MOV DL,AL
JMP AGAIN ;未显示完,跳回继续
OUT1:
POP AX
RET
DIS ENDP
PUTBUF PROC NEAR ;保存键值子程序
MOV SI,DI
MOV [SI],AL
DEC DI
CMP DI,2FFFH
JNZ GOBACK
MOV DI,3003H
GOBACK: RET
PUTBUF ENDP
DALLY PROC NEAR ;软件延时子程序
PUSH CX
MOV CX,00FFH
D1: MOV AX,00FFH
D2: DEC AX
JNZ D2
LOOP D1
POP CX
RET
DALLY ENDP
CODE ENDS
END START
六、体会和感想
通过这次的实验我了解到自己还有很多的不足,比如做实验的速度很慢,效率很低,思维不集中导致最后老师验收的时候没有来的及交,对书本的了解不是很透彻,也因此我决定下次实验的时候一定要好好地去思考,尽量在课外把实验看懂!。

相关文档
最新文档