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

合集下载

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

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

实验六从键盘输入数据并显示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.学习按键扫描的原理及电路接法;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。

键盘扫描显示实验报告

键盘扫描显示实验报告

一、实验目的1. 理解键盘扫描的基本原理,掌握键盘扫描的方法。

2. 掌握数码管显示的基本原理,实现键盘扫描信息的实时显示。

3. 熟悉8255并行接口芯片在键盘扫描和数码管显示中的应用。

二、实验原理1. 键盘扫描原理:键盘扫描是指通过硬件电路对键盘按键进行检测,并将按键信息转换为可识别的数字信号的过程。

本实验采用行列式键盘,通过扫描键盘的行线和列线,判断按键是否被按下。

2. 数码管显示原理:数码管是一种用来显示数字和字符的显示器,由多个发光二极管(LED)组成。

本实验采用七段数码管,通过控制各个段(A、B、C、D、E、F、G)的亮灭,显示相应的数字或字符。

3. 8255并行接口芯片:8255是一款通用的并行接口芯片,具有三个8位并行I/O口(PA、PB、PC),可用于键盘扫描和数码管显示的控制。

三、实验设备1. 实验平台:PC机、8255并行接口芯片、行列式键盘、七段数码管、面包板、导线等。

2. 软件环境:汇编语言编程软件、仿真软件等。

四、实验步骤1. 硬件连接:将8255并行接口芯片、行列式键盘、七段数码管连接到实验平台上,按照电路图进行连线。

2. 编写程序:使用汇编语言编写键盘扫描和数码管显示的程序。

(1)初始化8255并行接口芯片:设置PA口为输出端口,PB口为输出端口,PC口为输入端口。

(2)扫描键盘:通过PC口读取键盘的行线状态,判断是否有按键被按下。

若检测到按键被按下,读取对应的列线状态,确定按键的位置。

(3)数码管显示:根据按键的位置,控制数码管的段(A、B、C、D、E、F、G)的亮灭,显示相应的数字。

3. 仿真调试:使用仿真软件对程序进行调试,确保程序能够正确扫描键盘和显示数字。

五、实验结果与分析1. 实验结果:成功实现了键盘扫描和数码管显示的功能。

当按下键盘上的任意按键时,数码管上会显示对应的数字。

2. 分析:(1)键盘扫描部分:通过读取PC口的行线状态,判断是否有按键被按下。

当检测到按键被按下时,读取PB口的列线状态,确定按键的位置。

微机原理与接口技术-键盘LED显示【课程设计报告】

微机原理与接口技术-键盘LED显示【课程设计报告】

微机原理与接口技术-键盘LED 显示【课程设计报告】重庆大学课程设计报告课程名称:微机原理与接口技术设计题目:键盘LED显示院系:电气信息学院班级:2007级设计时间:2009年12月第一章概述 (2)1.1学习目的 (2)1.2 计算机的应用 (3)1.3学习计算机的意义 (3)1.4课程设计目的 (4)第二章总体方案设计 (4)2.1 设计注意问题 (4)2.2 总体思路 (5)第三章硬件设计 (5)3.1 8255工作原理 (5)3.2 键盘工作原理 (7)3.3 键特征值的形成 (8)3.4段值的形成 (9)3.5 8255接线图 (11)第四章软件设计 (12)4.1 8255初始化 (12)4.2 键盘扫描的处理方法 (12)4.2.1. 判断是否有键被按下的方法 (12)4.2.2. 判断是否有键被按下的源程序 (13)4.2.3 防抖动 (13)4.2.4.防抖动的延时子程序 (14)4.3 程序核心部分 (14)4.3.1 逐行扫描 (14)4.3.2逐行扫描的源程序 (15)第五章源程序代码 (15)5.1 根据整体思路以及软件设计得到的代码. 155.2 以上代码存在问题分析 (19)第六章难点分析 (20)第七章体会感慨建议 (25)第八章参考文献 (26)第一章概述1.1学习目的“微机原理与接口技术”是电气工程及其自动化专业的一门重要的专业基础课程。

我们通过该门课的学习,知道了微机的工作原理,微型计算机的基本结构,接口技术及汇编语言程序设计,为后续的课程的学习和今后的工作打下坚实的基础。

通过实验可以培养学生利用计算机技术和编程手段分析,解决专业领域的各种问题的能力和意识,并进一步感受微机发展的微机发展的新技术和新方法。

1.2 计算机的应用目前计算机的应用已经遍布各个行业,如科学计算、数据处理、过程控制、人工智能、网络应用等。

科学和工程计算:科学和工程计算的特点是计算量大,而逻辑关系相对简单,它是计算机重要应用领域之一。

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

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

4. 了解如何使用GpbA 口进行数据的锁存5. 通过实验掌握TMS320F2812的扩展端口接收外围设备信息的方法6.了解键盘的使用原理及编程方法【实验内容】1. 按键显示程序,对按键记录次数,以二进制显示在2.定时器编程,并用按键控制各位时分秒,使其能完成加减操作【实验仪器】TMS320F2812 数字信号处理器与学生用集成板。

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

3. 了解SPI 的使用。

16 个 LED ±o2.调试代码3.实现功能【实验代码】一、定时器①宏定义和全局变量定义#mclude "DSP28lx_Device .h"1LEDReg;KeyReg1;1 - 0;Ct rl;Sec=O;Min=O;Hor=J;Light [8];分析:这段代码是初始宏定义,用于定义按键对应的编码与地址, 秒,按键编码,LED编码和控制位。

②共阳字形码Uintlfi^EDCode'[30] ■ { 0xc000,bxf900r OxA4GO^OxBOOO,0x9900,0x9200,0x8200,OxEBOa,0x8000r0x9000r0x8600,Ox8300P0xc600,Oxa 100,0x8600,0x8000^ OxScOf rOxbfOQ r Oxa7GO r Oxff00,0x4000,0x7900,0x2400,0x3000, Ox1900,0x1200.0x0200.0x7800,O K OOOO,Ox 1000};分析:由于这次实验要用到数码管,所以我们要定义一个数码管共阳端字形码,使每一个代码对应一种显示状态。

微机原理键盘扫描及显示完整实验报

微机原理键盘扫描及显示完整实验报

实验9键盘扫描及显示实验
实验时间2019年12月18日
实验类型■验证性□设计性□综合性
1.实验目的
了解键盘扫描及数码显示的基本原理,熟悉8255的编程。

2.实验内容及过程(主要内容、操作步骤)
将8255单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。

键盘采用4X4键盘,每个数码管显示值可为0~F 共16个数。

实验具体内容如下:将键盘进行编号,记作0~F,当按下其中-一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近4次按下的按键编号。

3.测试数据及实验结果
4.实验分析及总结(主要考察内容)
通过本次实验,我理解了键盘扫描及数码显示的基本原理,通过理解分析程序,自己对程序进行了一些总结和修改,并进行了验证,进一步掌握了微机接口的学习方法。

教师评阅
评价指标:实验目的、操作步骤、设计、算法、程序结构、实验结果、实验分析、实验总结
1/ 1。

【单片机实验七】键盘扫描及显示设计实验

【单片机实验七】键盘扫描及显示设计实验

程序及注解见附件CLEAR: MOV DPTR, #B_8255 ;清屏 MOV A,#00H MOVX @DPTR,A RET DIS: PUSH ACC ;显示子程序 PUSH 00H PUSH 03H MOV R0,#50H ;显示缓冲首地址 MOV R3,#0DFH ;显示扫描值AGAIN: MOV A,#0FFH ;关闭显示 MOV DPTR,#A_8255 MOVX @DPTR,A MOV A,@R0 MOV DPTR,#DSEGS ;数码管段表地址 MOVC A,@A+DPTR ;查表 MOV DPTR,#B_8255 ;送段显示 MOVX @DPTR,A MOV A,R3 MOV DPTR,#A_8255 MOVX @DPTR,A ACALL DL1MS INC R0 ;显示缓冲加1 MOV A,R3 JNB ACC.0,OUT ;扫描结束否 RR A ;向右移一位 MOV R3,A AJMP AGAIN OUT: POP 03H POP 00H POP ACC RET ;数码管段显示值DSEGS: DB 03FH, 06H,05BH,04FH,066H,06DH,07DH, 07H DB 07FH,06FH,077H,07CH,039H,05EH,079H,071H DL1MS: MOV R7,#01H DL0: MOV R6,#080H DL1: DJNZ R6,DL1 DJNZ R7,DL0 RET PUTBUF: PUSH 00H ;保存键值到缓冲RAM 中 PUSH ACC MOV A,R5 MOV R0,A POP ACC MOV @R0,A DEC R5 CJNE R5,#04FH,GOBACK MOV R5,#55H ;重置缓冲地址GOBACK: POP 00H RET END ;==============================================================; 文件名称: KeyScan.Asm; 功能描述: 8255扩展IO, 完成键盘及数码管显示实验.; 按下按键, 数码管显示相应键值.;==============================================================A_8255 EQU 7F00H ;8255端口定义B_8255 EQU 7F01HC_8255 EQU 7F02HCON_8255 EQU 7F03HORG 0000HLJMP MAINORG 0100HMAIN: MOV 50H,#00H ;键值缓冲清0MOV 51H,#00HMOV 52H,#00HMOV 53H,#00HMOV 54H,#00HMOV 55H,#00HMOV R5, #55HMOV A, #81H MOV DPTR, #CON_8255 ;8255控制端口MOVX @DPTR, A ;写入控制字BEGIN: LCALL DIS ;调用显示子程序LCALL CLEAR ;清屏LCALL CCSCAN ;调用键扫子程序JNZ INK1 ;判是否有键按下LJMP BEGININK1: LCALL DISLCALL DL1MS ;消除按键抖动LCALL DL1MSLCALL CLEARLCALL CCSCANJNZ INK2AJMP BEGININK2: MOV R2,#0FEHMOV R4,#00H ;从第0列开始扫描COLUM: MOV DPTR,#A_8255MOV A,R2MOVX @DPTR,A ;写入列扫描值MOV DPTR, #C_8255MOVX A,@DPTRJB ACC.0,LINE1 ;判第0行的值MOV A,#00H ;第0行AJMP KCODELINE1: JB ACC.1,LINE2MOV A,#04H ;第1行AJMP KCODELINE2: JB ACC.2,LINE3MOV A,#08H ;第2行AJMP KCODELINE3: JB ACC.3,NEXTMOV A, #0CH ;第3行KCODE: ADD A,R4 ;得到键值ACALL PUTBUFPUSH ACCKON: ACALL DISACALL CLEARACALL CCSCANJNZ KONPOP ACCNEXT: INC R4MOV A,R2JNB ACC.4,KERRRL AMOV R2,AAJMP COLUMKERR: AJMP BEGINCCSCAN: MOV DPTR,#A_8255 ;按键扫描MOV A,#00HMOVX @DPTR,AMOV DPTR,#C_8255MOVX A,@DPTRCPL A ;取反ANL A,#0FHRET。

微机原理 单片机 实验6 按键识别与数码管动态显示

微机原理  单片机 实验6 按键识别与数码管动态显示
(7)点击编译图标右边的建造目标和建造所有目标图 标,对文件进行链接,观察左下角的调试程序信息显 示,直到无错误提示,注意一定要生成 .HEX 文件。
四、程序烧入时的2000综合仿真 仪与微型计算机连接起来; 2) 在XL2000综合仿真仪上,将JP13和JP14 两个232/USB通信选择方式端口的跳线帽跳至 232的方式;
3)将JP17的开关设置在弹起位置,选择编程 模式;
本次实验报告中要回答的问题
实验五 按键识别与数码管动态显示 一、实验目的:
1、输出显示与键盘输入是扩展的重要内容。要求 掌握数码管动态显示与矩阵按键的识别技术。 2、熟悉XLISP系列 单片机综合仿真试验仪的组成 和使用方法。
(1)学会XLISP软件的应用:XLISP的安装、检测、 程序擦除和烧写过程。
(2)用XLISP软件和keil-uvision2集成调试软件进 行实验并能得到正确的实验结果。
(4)点击(图标)目标1前的“+”号,出现(图标) 源程序组1,选中并点右键,选”文件增加到源程序组 1”,选择文件类型为Asm,再选输入的程序名.ASM, 点ADD(加入),点确定。 此时点击源程序组1可以看到输入的程序名.ASM
(5)程序编写完成,并将*.asm添加到工
程中后,进行仿真前,对目标1的属性进行修 改;
如右图,点击工 程下拉菜单中的 ”目标’目标1’ 属性”;
单击”目标”,输入仿真器的频率12(MHz);
选择”输出”菜单中的”生成HEX文件”, 以便汇编后产生HEX代码,供编程器使用;
(6)点击调试 开始调试,点击屏幕上方左下角的 编译图标 对文件进行编译,观察左下角的调试程序 信息显示,如有错可根据该栏提示的信息进行修改, 修改后要重新保存和编译,直到无错误提示。

实验八 键盘扫描显示实验

实验八   键盘扫描显示实验

实验八键盘扫描显示实验一、实验目的1、了解普通4×4键盘扫描的原理。

2、进一步加深七段码管显示过程的理解。

二、硬件要求1、4×4键盘阵列。

2、FPGA主芯片EP1K30TC144-3。

3、可变时钟源。

4、七段码显示区。

三、实验原理本实验主要完成的实验是完成4×4键盘扫描的,然后获取其键值,并对其进行编码,从而进行按键的识别,并将相应的按键值进行显示。

键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。

同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。

获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。

四、实验内容及步骤本实验内容是完成4×4键盘的扫描,然后将正确的键值进行显示,实验步骤如下:1、编写键盘扫描和显示的VHDL代码。

2、用MaxPlusII对其进行编译仿真。

3、在仿真确定无误后,选择芯片ACEX1K EP1K30TC144-3。

4、给芯片进行管脚绑定,在此进行编译。

5、根据自己绑定的管脚,在实验箱上对键盘接口、显示接口和FPGA之间进行正确连线。

6、给目标板下载代码,在4×4键盘输入键值,观看实验结果。

五、实验连线如果是调用的本书提供的VHDL代码,则实验连线如下:Clk:FPGA工作时钟信号,大约位5KHz至50KHz即可。

Kr[0:3]:分别接4×4键盘部分的R1、R2、R3和R4。

实验3 键盘扫描及LED实验

实验3 键盘扫描及LED实验
23
//Default value=0x7ffffff
*/
*************************************************************************
#include "bspinit.h" void Bsp_Init(void) { Delay(100); ChangeClockDivider(1,1); ChangeMPllValue(0x5c,0x4,0x0); Port_Init(); Uart_Init(PCLK, 115200); //int_init(); } // 1:2:4 //Fin=12MHz FCLK=200MHz
19
************************************************************ /* Filename: key.h */ ************************************************************ #ifndef KEYINCLUDE #define KEYINCLUDE void keyinit(void); void keyscan(void); #endif /* KEYINCLUDE */ ************************************************************ /* Filename: key.c */ ************************************************************ #include "2410addr.h" #include "2410lib.h" #include "Def.h" #include "timer0.h" void keyinit(void) { rGPFCON=0x80a8; rGPFUP=0; pISR_TIMER0 } void keyscan(void) { U8 c=0,c1=0x0ff; c=(rGPFDAT&0x8e); switch(c) { case 0x8c: Uart_Printf("Press Key1\n"); Delay(50); loop1:

键盘扫描显示实验原理及分析报告

键盘扫描显示实验原理及分析报告

键盘扫描显示实验原理及分析报告学 院 计算机工程学院专 业 计算机科学与技术年级班别 09计算机科学与技术1班学 号 2009404010131学生姓名 李雅旖指导教师 李 永2012年01月JINGCHU UNIVERSITY OF TECHNOLOGY目录一、内容提要二、实验目的三、实验要求四、实验器材五、实验电路六、实验说明七、实验框图八、实验程序九、实验分析十、实验心得十一、参考文献一、内容提要单片机技术日趋成熟的今天,其灵活的硬件电路的设计和软件的设计,让单片机得到了广泛的应用,几乎是从小的电子产品,到大的工业控制,单片机都起到了举足轻重的作用。

单片机在人们的生活中得到广泛的应用。

本文介绍了基于单片机的键盘扫描显示实验,详细讨论了它从软件上实现的过程,以及硬件接口的原理及其实现,根据输出的列码和读取的行码来判断按下的是什在么键,即有按键时向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回,理解读取键盘按键的原理,和最简单的单片机接口原理二、实验目的:1、掌握键盘和显示器的接口方法和编程方法。

2、掌握键盘扫描和LED八段数码管显示器的工作原理。

二、实验要求:在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。

实验程序可分成三个模块:1、键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。

2、显示模块:将显示单元的内容在显示器上动态显示。

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

三、实验器材:1、超想-3000TC综合实验仪 1 台2、KEIL仿真器 1 台3、计算机 1 台四、实验电路:这里只是键盘草图,详细原理参见“8155键显模块”。

五、实验说明:本实验仪提供了一个6×4的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回,如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高.这样就可以通过输出的列码和读取的行码来判断按下的是什么键。

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

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

课程名称: __________ 微机原理(实验) _________________ 指导老师: _徐习东 _______________ 成绩: _______________________ 实验名称: _________ 键盘控制与显示 ___________ 实验类型: _______ 软件实验 __________ 同组学生姓名: _______________ 七、讨论、心得【实验目的】1. 通过实验掌握TMS320F2812 通用输入/输出管脚直接控制外围设备的方法2. 了解发光二极管的控制编程方法。

3. 了解SPI 的使用。

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

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

【实验步骤】1. 撰写代码2. 调试代码3.实现功能別f 尹丿占实验报告专业: 姓名:学号: 日期: 地点:电气工程及其自动化 一、实验目的和要求(必填) 三、主要仪器设备(必填) 五、实验数据记录和处理 二、实验内容和原理(必填) 四、操作方法和实验步骤 六、实验结果与分析(必填)【实验代码】 、疋时器① 宏定义和全局变量定义R 犍蛊控制曲钟nclude "DSP281x_De (vic« .h" 卍枝键对应值Uint16 LEEReg;UintlS KeyReg 1:Uitit321 = 0;Uint16Ctrl ; int 16Sec=0;1 Tltl6M IL =0;int 16 Hor-Cl ; UintlSLight[3];秒,按键编码,LED 编码和控制位。

② 共阳字形码O K jOOO.Oxf 900, OxA4OO J .0iBDOO,0x9900,0x5200, OMfl^OD^OxFSOD, O K B000y0x9000.0zBBOO,Oz3300,OxcEDO,Oxa IDO,OxB&OD^OssEciOO , 0x5G (J0,Uxbf DU,Osa7UQ,OzffOa,0x4000,CK79Da,DM240D r Dx^ 000, 0 itl900, O K ISOQ, 0s DEOO,Oz 7000,030000,0x1000);分析:由于这次实验要用到数码管,所以我们要定义一个数码管共阳端字形码,使每一个代码对应一种显 示状态。

  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
六、体会和感想
通过这次的实验我了解到自己还有很多的不足,比如做实验的速度很慢,效率很低,思维不集中导致最后老师验收的时候没有来的及交,对书本的了解不是很透彻,也因此我决定下次实验的时候一定要好好地去思考,尽量在课外把实验看懂!。

相关文档
最新文档