微机原理实验六 从键盘输入数据并显示
微机原理键盘扫描及显示设计实验

一、 实验名称:键盘扫描及显示设计实验 二、 实验目的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.掌握接收键盘数据以及输入数据转换为ASCII码显示输出的基本方法。
2.熟悉COM文件的编写。
3.进一步熟悉子程序的应用。
实验内容:
编写COM文件格式程序,完成如下功能:
1.从键盘接收4位十六进制数据
2.将接收的数据转换为二进制形式,在屏幕上显示输出
实验步骤和要求:
1.分析问题,画出算法框图。
写实验预习报告。
2.编写COM格式汇编语言程序。
3.在DOS下编辑、汇编、连接程序。
4.用Debug调试程序。
5.在DOS下运行并分析结果。
6.填写实验报告。
算法框图
B_TO_A子程序
汇编源程序:
DOS下运行并分析结果
在DOS下编辑、汇编、连接程序
输入: AF57
结果是:1010 1111 0101 0111正确执行
总结。
微机原理键盘控制与显示实验报告

专业:电气工程及其自动化姓名: _________实验报告学号: _______日期: ___ _____地点: ____ ________课程名称: ________微机原理(实验)___________指导老师: ____徐习东 _______成绩:__________________实验名称: ______ 键盘控制与显示_______实验类型: _____软件实验 ______同组学生姓名:__________一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得【实验目的】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、编译汇编文件:先在记事本里输入代码后,再用汇编编译器编译。
微机原理实验

微机原理实验一、实验目的:1、应用学过的汇编语言编写简单程序,将汇编语言在编程中实际应用。
2、掌握汇编语言的编辑、汇编、连接、调试等基本方法。
3、灵活应用各种语句实现要求的程序功能。
4、在实验中进一步掌握并熟练应用汇编语言,理解常用指令、伪指令及存储空间分配等二、实验内容:从键盘取得一串字符显示在屏幕上,然后将这串字符以输入的反序再显示一遍,并统计这字符串中‘A’的个数,显示在屏幕上。
附加要求:可以从键盘输入需要统计的字符,并统计这字符串中这个字符的个数,显示在屏幕上。
三、流程图:四、实验程序:DA TAS SEGMENTPASS DB 20 ;预留20个字节的空间存放输入的字符BLK1 DB 'SHU RU ZI FU CHUAN: $' ;在屏幕上要显示的提示语句BLK2 DB 'SHU RU ZI FU : $'BLK3 DB 'SHU LIANG SHI: $'BLK4 DB 'FAN ZHUAN HOU: $'DA TAS ENDS;********以上是数据段定义,下面开始代码段************CODES SEGMENTASSUME CS:CODES,DS:DA TASSTART: MOV AX,DA TASMOV DS,AX ;实现ASSUME中的承诺;****************************************************MOV AH,09H ;字符串输出功能09HLEA DX,BLK1INT 21H;**********显示第一句提示语*************************MOV AH,0AH ;字符串输入功能0AHLEA DX,PASSINT 21H;********以上完成字符串输入并显示出来***************MOV AH,2MOV DL,0DHINT 21HMOV DL,0AHINT 21H;*********以上实现回车换行***************************MOV AH,09HLEA DX,BLK4INT 21H;*******输出BLK4中定义的内容,提示为反转后字符串***************MOV CL,PASS+1 ;PASS+1处是实际输入的字符个数MOV CH,0 ;CH置0,CX为循环的次数也就是输入的字符个数MOV DL,PASS+1MOV DH,0 ;DX同样是字符个数,用于后面的加法运算LEA SI,PASS+2 ;PASS+2处为实际输入字符的开始位置;S0: DEC SI ;SI不断减1,指针指向地址不断前移,也就反向了输出刚才输入的字符串MOV AH,02H ;显示输出功能02HMOV DL,[SI] ;输出指针所指向单元中的内容INT 21HLOOP S0;**********以上用循实现了字符串的反转后输出功能***************MOV AH,2MOV DL,0DHINT 21HMOV DL,0AHINT 21H;***********回车换行*******************MOV AH,09HLEA DX,BLK2INT 21H;**********显示提示语BLK2输入要查找的字符的提示语输出************************MOV AH,01H ; 有回显的输入,显示的是输入的要查找字符INT 21HMOV CL,PASS+1XOR CH,CHLEA SI,PASS+2XOR DL,DL ;和前面相同CX设置了循环次数,SI指向第一个字符S1: CMP AL,[SI] ;进行字符比较,是和Al比较,若相同则计数加1,不同则比较下一个JNZ NEXTINC DL ;DL记录的是比较过程中相同的字符数NEXT: INC SI ;指向下一个字符LOOP S1MOV BL,DL ;DL记录的数量给BL后面语句输出之前要用到DL;*******通过以上循环将所有字符比较一遍得到数量******************************* MOV AH,02HMOV DL,0DHINT 21HMOV DL,0AHINT 21H;*******************回车换行**************************MOV AH,09HLEA DX,BLK3INT 21H;*****输出提示语BLK3相同字符的数量**************************MOV DL,BLADD DL,30H ;计数加30H是为了转换成ASC码输出。
微机原理 第6章 输入和输出.ppt

25
1. 查询输入方式
数据 锁
输
存
>器
入
装 +5V
置 • oR
DQ
选通 › 信号
数据口
M / IO
•
oo
RD
o 地址译码
CS
o
缓 数据
数据端口冲 器去DB状态信息状态端口
缓 冲 器
o
状态口
Ready(D4)
地址 译码
o CS
M / IO
o o RD
采用查询方式,CPU要不断查询外设,当
有些外设速度较低(例键盘、打印机),CPU
要等待,效率低,采用中断方式可提高CPU效
率。
主程序
INTR
CPU
外设
中断服 务程序
35
当外设准备好(输入)或闲(输出),向 CPU发出申请,CPU响应后,暂停执行主程序, 转去执行中断服务程序。执行完中断服务 程序后,再返回主程序。
端口4 负责选通某一路模入,由D2,D1,D0 控制选8路中某一路,D4控制A/D启动和停止。 D4=1启动,D4=0停止。
端口2 负责查询A/D转换完成否?转换完 成信号READY经D0送数据总线。
端口3 为数据端口,把转换的数据送数据 总线。
32
程序段如下:
1111,1000
START: MOV DL,0F8H ;设置起始路数 LEA DI,DSTOR ;DI 数据缓冲区偏址
LEA BX,DSIOK ;偏址送BX
AGAIN: MOV AL,DH
OUT 20H,AL
;断开所有继电器
CALL DELAY1 ;继电器释放时间
微机原理实验1 编程实现键盘输入和显示

微机原理实验实验名称:编程实现键盘输入和显示将自己的姓名拼音和9位学号定义在数据段循环提示由键盘输入一个数字,若为奇数,则显示自己的姓名拼音;若为偶数和0,则显示自己的学号;若输入其他字符则退出程序返回DOS 。
(三种情况都要有实验结果。
)▪ Please input a number:7▪ My name is:卢丽霞▪ Please input a number:8▪ My ID number is: 110703220.▪ Please input a number:q▪ Quit the program.YNYNNY代码:stack segment stack 'stack'dw 32 dup(0) 开始 输入mingzi 和num 调用1号系统功能,将输入的符号的ASCII 码值放入AL 中AL<’0’ AL>’9’a 是奇数 输出学号输出姓名 输出”Quit the program ” 结束stack endsdata segmentbuf1 db 'Please input a number:$'buf2 db 'My name is:$'buf3 db 'Please input a number:$'buf4 db 'My ID number is: $'buf5 db 'please input a number:$'buf6 db 'Quit the program$'mingzi db 'My name is:lulixia$'num db 'My ID number is:110703220$' data endscode segmentbegin proc farassume ss: stack, cs: code, ds: data push dssub ax, axpush axmov ax, datamov ds, axmov ax,datamov ds,axmov dx,offset buf1mov ah,9int 21hmov ah,01int 21hcmp al,'0'jb stopcmp al,'9'ja stopxor ah,ahmov bl,2div blcmp ah,0jz idmov ah,9mov dx,offset mingzi int 21hjmp beginid:mov ah,9mov dx,offset numint 21hjmp beginstop:mov ah,9mov dx,offset buf6int 21hmov ah,4chint 21hretbegin endpcode endsend begin程序结果:实验分析:本实验预先设置好的结果按需要显示,并运用科各种系统功能的调用,还用了比较cmp判断,还通过判断除法余数是否为零判断被除数的奇偶。
微机原理实验六从键盘输入数据并显示

实验六从键盘输入数据并显示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、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六从键盘输入数据并显示
1要求:
编写程序,将键盘接收到的四位十六进制数转换为等值的二进制数,并显示在屏幕上。
若输入的不是0—F间的数字,则显示出错
信息,并要求重新输入。
2目的:
掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理。
实验程序
CRLF MACRO
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
MARK 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 ENDS
STACK SEGMENT
STA DW32 DUP(?)
TOP DW?
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SP,TOP
HEAD: CRLF
MOV MARK,0
MOV AH,09H
LEA DX,MESS
INT 21H ;显示提示输入的信息
CALL GETNUM ;接收键入数值送DX
CMP MARK,01H
JE HEAD
MOV CX,0010H ;16位
MOV BX,DX
TTT: ROL BX,1 ;循环左移1位
MOV DL,BL
AND DL,01H ;屏蔽掉高7位
ADD DL,30H
MOV AH,02H
INT 21H ;显示二进制位对应的ASCII字符
LOOP TTT
JMP HEAD
FINI: MOV AX,4C00H
INT 21H ;返回DOS
GETNUM PROC NEAR ;子程序,接收键入数值送DX PUSH CX
XOR DX,DX
GGG: MOV AH,01H
INT 21H
CMP AL,0DH ;输入为回车,则进行转换
JE PPP
CMP AL,20H ;输入为空格,则退回DOS
JE FINI
CMP AL,30H
JB KKK
SUB AL,30H
CMP AL,0AH
JB GETS
CMP AL,11H
JB KKK
SUB AL,07H
CMP AL,0FH
JBE GETS
CMP AL,2AH
JB KKK
CMP AL,2FH
JA KKK
SUB AL,20H
GETS: MOV CL,04
SHL DX,CL
XOR AH,AH
ADD DX,AX
JMP GGG
KKK: MOV AH,09H
MOV DX,OFFSET ERROR
INT 21H
MOV MARK,01H PPP: PUSH DX
CRLF
POP DX
POP CX
RET GETNUM ENDP CODE ENDS
END START。