微机原理课程设计-键盘输入
一、设计目的
通过课程设计使学生更进一步掌握微机接口与通信课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。通过查阅资料,结合所学知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。为以后学生结合专业从事微机应用设计奠定基础。
二、设计的原始资料及依据
(1) 查阅可编程并行芯片8255、键盘工作原理等其他相关资料。 (2) 用简单的输入输出端口等硬件,输入数据、处理数据和输出数据。
三、设计的主要内容及要求
内容:求两个BCD数之和。
要求: 一个2位BCD数存于内存,另一个2位BCD数从键盘输入,求其和,并保存到内存。
四、对设计说明书撰写内容、格式、字数的要求
1.课程设计说明书(论文)是体现和总结课程设计成果的载体,一般不应少于3000字。
2.学生应撰写的内容为:目录、正文、参考文献等。课程设计说明书(论文)的结构及各部分内容要求可参照《沈阳工程学院毕业设计(论文)撰写规范》执行。应做到文理通顺,内容正确完整,书写工整,装订整齐。
3.说明书(论文)手写或打印均可。手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时按《沈阳工程学院毕业设计(论文)撰写规范》的要求进行打印。
4. 课程设计说明书(论文)装订顺序为:封面、任务书、成绩评定表、目录、正文、参考文献。
五、 设计完成后应提交成果的种类、数量、质量等方面的要求;
提交课程设计说明书一份。在说明书中要有设计原理、硬件电路接线图、设计的程序及必要注释等。
微机原理课程设计-键盘输入
六、时间进度安排;
七、主要参考资料(文献)。
1、王庆利 《微型计算机机原理及应用》 西安电子科技大学出版社 2、周明德 《微机原理与接口技术》 北京航空航天大学出版社 3、沈美明《汇编语言程序设计》(第二版)清华大学出版社
微机原理课程设计-键盘输入
摘 要 ................................................................................................................................................ I 第1章 任务描述 ............................................................................................................................. 1
1.1设计题目 ............................................................................................................................. 1 1.2设计内容 ............................................................................................................................. 1 1.3 设计目的 ............................................................................................................................ 1 1.4 设计的原始资料及依据 .................................................................................................... 1 第2章 设计原理 ............................................................................................................................. 2 第3章 主要元器件介绍 ................................................................................................................. 3
3.1 可编程并行接口8255简介 .............................................................................................. 3
3.1.1 8255引脚功能 ......................................................................................................... 3 3.1.2 8255内部结构 ......................................................................................................... 4 3.1.3 8255的工作方式 ..................................................................................................... 4 3.1.4 8255的控制字 ......................................................................................................... 5 3.2 键盘简介 ............................................................................................................................ 6
3.2.1 键盘的工作原理 ..................................................................................................... 7 3.2.2 键盘输入信息的过程 ............................................................................................. 7 3.2.3键盘扫描(识别键)的过程 .................................................................................. 7
第4章 原程序及注解 ..................................................................................................................... 8 第5章 程序流程图 ....................................................................................................................... 12 第6章 程序接线图 ....................................................................................................................... 14 总结 ................................................................................................................................................ 15 参考文献......................................................................................................................................... 16
微机原理课程设计-键盘输入
微机接口原理是一门非常重要的计算机技术基础课程,全面介绍微机的基本结构、工作原理、硬件配置、接口期间和接口种类等。本次微机接口课程设计的主要目的是要使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。通过查阅资料,结合所学知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。为以后学生结合专业从事微机应用设计奠定基础。
在本次课程设计中大家利用课上所学的各种知识,对自己的课程设计题目进行设计。我们小组所要设计的题目是加法器。在设计的过程中主要利用可编程并行接口8255A芯片,完成从键盘输入一个2位BCD数,与另一个存于内存的2位BCD数相加求和,并将结果送到LED指示灯处显示。在程序中为了使输入的BCD码转换为指示灯处的二进制显示,我们用到了DAA加法调整指令。 键盘输入的原理,是当输入一个数据时,该位置处为低电平,其他位置为高电平。这样我们就可以让程序对键盘的每一列进行扫描,当找到对应列时再对行进行扫描,当扫描到相应位置时确定该位置的键值。
做加法后的结果输出,会显示在LED指示灯上,在程序中设定8255A芯片的C下口进行输入,将A口和B口作为输出口,并将B口连接到LED指示灯的接线端上,从而,可以将输入的BCD数的值与相加的结果显示出来。
关键字 微机接口、可编程并行接口8255A芯片、LED指示灯、键盘
微机原理课程设计-键盘输入
第1章 任务描述
1.1设计题目
加法器设计1
1.2设计内容
内容:求两个BCD数之和。
要求: 一个2位BCD数存于内存,另一个2位BCD数从键盘输入,求其和,并保存到内存。
1.3 设计目的
通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。通过查阅资料,结合所学知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。为以后学生结合专业从事微机应用设计奠定基础。
1.4 设计的原始资料及依据
查阅可编程并行芯片8255、键盘工作原理等其他相关资料。用简单的输入输出端口等硬件,输入数据、处理数据和输出数据。
微机原理课程设计-键盘输入
第2章 设计原理
我们在这次课设选择了加法器的设计,认为加法器是我们生活中随处可见的工具,加法器的主要原理应用到键盘扫描原理、数据的输入与输出和LED的显示等等。
对于加法器,我们首先想到的是实现它的最基本的加法功能。而又对于计算机专业来说,我们身边接触到得数据不仅仅是简单的十进制而已。为了解决这个问题,我们小组在汇编时运用了将十进制强行转换为二进制的DAA语句,使加法的结果转换为机器识别的二进制数据,再经由LED指示灯的亮灭情况来读出加法的和。
数据的输入,我们采用的是小键盘扫描列的方法来识别闭合键,要求矩阵式键盘的行线和列线分别接在可编程输入与输出接口。先扫描列中第一列的对应的几行是否按键按下,若没有则选择第二列进行相同的扫描,如果没有则依次列数增加进行对应行值扫描,扫描到后,最终把读入的行值和从列端口读出的列值合成键号,根据键号就可以判断是哪行哪列的值被按下了。
数据的并行输入与输出,我们选择了可编程的并行接口芯片8255,选用芯片的C下口作为数据的输入端,A口和B口作为数据的输出端,B口是用来控制将数据输出到LED灯上的,最终将数据的和保存到相应的寄存器中,再由寄存器发送结果到LED指示灯上,从而正确的读出结果,实现加法的功能。
微机原理课程设计-键盘输入
第3章 主要元器件介绍
3.1 可编程并行接口8255简介
3.1.1 8255引脚功能
RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。
RD:读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:写入信号,输入引脚为低电平时,允许CPU将数据或控制字写入8255。 D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。
PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。
PB0~PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。
PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。
A1、A0:端口地址总线,8255中有端口A、B、C和一个内部控制字寄存器,共4个端口,由A0、A1输入地址信号来寻址。
8255的引脚图如图3.1所示。
微机原理课程设计-键盘输入
图3.1 8255引脚图
3.1.2 8255内部结构
8255内部结构如图3.2所示。
图3.2 8255内部结构图
3.1.3 8255的工作方式
并行接口是以数据的字节为单位与I/O设备或被控对象之间传递信息。在实际应用中凡是CPU与外设之间同时需要传递两位以上信息时均需采用并行接口。可编程并行通信接口(8255A)是一个具有两个8位(A口和B口)和两个
微机原理课程设计-键盘输入
4位(C口)并行输入/输出端口的接口芯片,为了适应多种数据传送方式的要求8255A设置了3种工作方式:方式0为基本输入输出方式,方式1为选通输入输出方式,方式2为双向传送方式。本次为满足设计需要,将8255A设置为方式0,方式0的多种数据传送方式如表3.1所示。
3.1.4 8255的控制字
1.方式选择控制字
8255方式选择控制字的格式如图3.3所示。
微机原理课程设计-键盘输入
图3.3 8255的方式选择控制字
2.端口C置位/复位控制
8255在和CPU传输数据的过程中,经常将端口C的某几位作为控制字或状态位来使用,从而配合端口A或端口B的工作,在8255初始化时,端口C按位置位/复位控制字可以单独设置端口C的某位位0或为1,该控制字的作用是指定口的8位中的任意一位置成高电平输出或低电平输出。它的格式及每位的定义如表3.2所示。
表3.2 8255的C口按位置位/复位控制字
3.2 键盘简介
键盘是微机系统和其他实时控制系统中广泛使用的一种基本输入设备。按键实际上就是一个开关;对大多数键盘而言,为了减少与微机间的连线,简化结构,按键被排成行和列的矩阵形式,称为矩阵键盘。矩阵键盘根据识别键和键盘扫描实现方式的不同又分为两类:编码键盘和非编码键盘。编码键盘主要是用硬件来
微机原理课程设计-键盘输入
实现键的识别和扫描,它功能强,可靠,但硬件复杂,一般微机系统使用编码键盘。非编码键盘主要是用软件方法来识别键和绎键,本次课程设计主要应用非编码键盘的基本工作原理,及键盘控制程序的编制方法。
3.2.1 键盘的工作原理
通常可采用两种方法来识别键盘上的闭合键:即行(列)扫描与行反转法,本次课程设计采用的是行(列)扫描法,其基本思想是:将行线接输入端口,列线接输出端口。先将所有的列线输出低电平(A口),读入行线的值(C口),若此时行线上的值全为1,说明无键按下;若有某位为0,则说明对应列上有键按下,这时改变列扫描码,使列线逐行为0,依次输出列扫描码,读入行值。当读入某一行线的值为0时,则可根据此时的列扫描码和行线的值唯一的确定按键的位置,同时也就确定了该键的扫描码。
3.2.2 键盘输入信息的过程
⑴CPU检查是否有键按下;
⑵扫描检查各行和列,找到被按键的键号;
⑶将键号转换成计算机能识别的代码并转入相应的键盘处理程序。
3.2.3键盘扫描(识别键)的过程
⑴识别是否有键按下:方法是使PA0~PA3输出全为0,读C口(行值)PC0~PC3,PC0~PC3中只要有一位为0,就说明有键按下,因为由于上拉电阻接+5V的作用,无键按下时,列线被置成高电平。当某键被按下,该键所在行线和列线接通,所以,当列线为低电平时,对应的行线也为低电平。
⑵消抖动:抖动就是键按下时由于手工操作,键的闭合和断开之间回跳几下才能稳定到闭合的位置,这就称为抖动。抖动问题不解决回引起对闭合键的错误识别,所以当判别出有键按下时应消除抖动。消除抖动的常用方法是在检测到有键按下后,延迟一段时间(通常为20ms),再检查该键是否仍然被按着,若是,才真正认为有键按下,而不是干扰。
⑶确定是哪个键被按下:即确定被按下键的行列号,因此可采用上述的行列扫描法。
⑷根据找到的键号,转去执行该键功能的子程序。
微机原理课程设计-键盘输入
第4章 原程序及注解
MY8255_A EQU 0600H MY8255_B EQU 0602H MY8255_C EQU 0604H MY8255_CON EQU 0606H
SSTACK SEGMENT STACK DW 16 DUP(?) SSTACK ENDS
DATA SEGMENT
b DB 0 ;存2位BCD数的高位 i DB 0 ; 十位标识 x DB 01000100B y DB 0 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV DX,MY8255_CON ;写8255控制字
MOV AL,89H ;A,B口为输出,C口为输入 OUT DX,AL
MOV AL,x
MOV DX,MY8255_B
OUT DX,AL ;在LED单元显示存入内存中的一个BCD数
BEGIN: CALL CCSCAN ;调用显示子程序
JNZ INK1 ;扫描
JMP BEGIN
INK1: CALL DALLY ;延时
CALL CCSCAN ;再次扫描,消抖动 JNZ INK2 ;有键按下,转到INK2 JMP BEGIN
;======================================== ;确定按下键的位置
;======================================== INK2: MOV CH,0FEH MOV CL,00H COLUM: MOV AL,CH
MOV DX,MY8255_A
微机原理课程设计-键盘输入
MOV DX,MY8255_C IN AL,DX
L1: TEST AL,01H ;扫描第一行输出是否为0
JNZ L2 ;当第一行输出为1是转到L2继续执行
MOV AL,00H ;当第一行为0时,说明该行有键按下,该行第一个键键值0 JMP KCODE
L2: TEST AL,02H JNZ L3 续执行
MOV AL,04H 按下,该行第一个键键值4 JMP KCODE
L3: TEST AL,04H JNZ L4 续执行
MOV AL,08H 键按下,该行第一个键键值8 JMP KCODE
L4: TEST AL,08H JNZ NEXT 继续执行
MOV AL,0CH 键按下,该行第一个键键值12
KCODE: ADD AL,CL CALL PUTBUF PUSH AX
KON: CALL CCSCAN JNZ KON POP AX
NEXT: INC CL 键,则转到第二列扫描 MOV AL,CH TEST AL,08H JZ BEGIN ROL AL,1 MOV CH,AL
;扫描第二行输出是否为0
;当第二行输出为1是转到L3继 ;当第二行为0时,说明该行有键 ;扫描第三行输出是否为0
;当第三行输出为1是转到L3继 ;当第三行为0时,说明该行有 ;扫描第四行输出是否为0
;当第四行输出为1是转到NEXT ;当第四行为0时,说明该行有 ;取得键入的数放入AL中 ;扫描键盘 ;如果第一列没有扫描到按
微机原理课程设计-键盘输入
;======================================== ;键盘扫描子程序
;======================================== CCSCAN: MOV AL,00H MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C
IN AL,DX NOT AL
AND AL,0FH ;列线中是否有0 RET
;======================================== ; 延时子程序
;======================================== DALLY: PUSH CX MOV CX,00F0H AA2: PUSH AX POP AX LOOP AA2 POP CX RET
DALLY1: PUSH CX
MOV CX,9FFFH AA3: PUSH AX POP AX LOOP AA3 POP CX RET
;======================================== ;存键盘值到相应位的缓冲中
;========================================
PUTBUF: CMP i 0 ;判断先前是否有输入过数字
JNZ D1 ROL AL,4 ;将键盘输入的第一个数左移4位 MOV b,AL ;用笔来保存第二个BCD数的高4位 MOV DX,MY8255_B OUT DX,AL MOV i,1H ;已经输入过一个数 JMP end1
微机原理课程设计-键盘输入
D1: MOV i,0 ;将i值清空,说明一个完整的2位BCD数已从键盘输入
ADD AL,b ;用AL来保存用键盘输入的BCD数
MOV DX,MY8255_B
OUT DX,AL ;将键盘输入的BCD数显示在LED指示灯上
CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1
CALL DALLY1
CALL DALLY1 CALL DALLY1 CALL DALLY1
CALL DALLY1
CALL DALLY1 CALL DALLY1 CALL DALLY1
ADD AL,x ;计算两个2位BCD数的和 DAA ;将AL中的和调整为8421格式 MOV DX,MY8255_B
OUT DX,AX ;在LED指示灯上显示和 MOV y,AL ;将和保存到内存 CALL DALLY1
CALL DALLY1 CALL DALLY1 CALL DALLY1
CALL DALLY1
CALL DALLY1 CALL DALLY1 CALL DALLY1
MOV AL,x
MOV DX,MY8255_B
OUT DX,AL ;再次显示保存在内存中的一个BCD数,作为提示方便下次计算
end1:RET
CODE ENDS END START
微机原理课程设计-键盘输入
第5章 程序流程图
键盘扫描的流程图如图5.1所示。
图5.1 键盘扫描流程图