8255键盘及显示接口设计
班级:
姓名:
学号:
日期: 2009年12月28日成绩:
目录
一、课程设计的意义 (3)
二、课程设计的主要内容 (3)
三、课程设计的组织与安排 (3)
四、课程设计的要求 (4)
五、课程设计正文 (5)
1.设计原理 (5)
2.设计电路原理图 (6)
3.键盘及数码管显示电路接线图 (7)
4.使用原器件 (7)
5.课程设计总结 (7)
6.论文参考资料 (7)
六、附录一:程序流程图 (8)
七、附录二:课程设计程序 (9)
课程论文(设计)指导书
一、课程论文(设计)的意义:
1.通过《微型计算机原理与应用》课程设计,使学生能够进一步理解微型计算机工作原理, 微型计算机的硬件结构及微型计算机的应用软件编程。
2.要求学生能够根据功能要求初步进行硬件接口电路的设计,以及有关应用程序的设计,使学生的软件编程能力得到加强,对接口电路的综合应用能力有较大提高。
3.课程设计是培养和锻炼学生在学习完本课程后综合应用所学理论知识解决实际工程设计和应用问题的能力、进行工程实训的重要教学环节,它具有动手、动脑,理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一种较好方法。
4.通过课程设计实践,不仅要培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅专业资料、工具书或参考书,掌握工程设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力。培养学生事实求是和严肃认真的工作态度。
5.通过设计过程,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。让学生独立或集体讨论设计题目的系统方案论证设计、编程、软件硬件调试、查阅资料、绘图、编写说明书等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计使学生熟练的熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。
二、课程论文(设计)的主要内容:
结合微型计算机应用系统的功能要求、硬件电路设计,进行汇编语言程序设计,要求画出程序流程图,编写完整的源程序,并经上机调试完成。课程设计过程一般2~3人一组,各组完成的内容不能雷同。
要求每个学生(或小组)都要自己动手独立设计完成一个典型的微机应用小系统。设计题目可以在给出的参考题目中选,也可以自己选择适当的设计题目。
三、课程论文(设计)的组织与安排:
设计题目的选题原则:根据教学大纲对本门课程的教学要求和所讲授的课程内容,结合现有的教学实验设备和能力,按照课程设计的目的和作用所提出的要求,选择符合教学内容、符合学生水平、符合实验室条件,综合本门课的全部知
识,难易适中,使学生能在规定的时间内的通过集体讨论、查阅资料后可以完成课题。
所有的题目都要求以8086/8088为处理器,以所学过的常用接口芯片及存储器为外围扩展器件,软、硬件结合,完成题目给定的设计任务,要求画出正确的硬件电路并给出完整的程序清单。
分组要求:每2~3人一组。通过1周的集中设计时间,在老师的指导下应独立完成规定的设计任务。
四、课程论文(设计)的要求:
课程设计报告的内容主要有:方案确定,硬件电路图和设计说明,软件设计清单和设计说明,要求软件要有注释,设计报告的书写要求字迹清楚,语言流畅。
设计报告主要包括以下内容:
1. 设计题目分析
2. 总体设计方案分析、讨论
3. 硬件原理图设计(用自动布线绘图软件最好),要有设计过程说明。
4. 软件流程框图及程序清单(汇编语言源程序必须加注释说明)要有设计过程说明。
5. 设计总结和心得体会
课程设计报告的基本内容至少包括封面、正文、附录三部分。课程设计报告要求统一格式,字体工整规范。
1、封面
封面内容包括“《微型计算机原理与应用》课程设计报告”、班级、姓名、学号以及完成日期等信息。
2、目录
3、正文
正文是实践设计报告的主体,具体由以下几部分组成:
(1)课程设计题目;
(2)课程设计任务与要求;
(3)设计过程(包括方案论证、设计原理、创新点以及采用的新技术等);(4)硬件系统框图与说明;
(5)软件主要模块流程图与说明;
(6)工作总结(包括自己的收获与体会;遇到的问题和解决的方法;技术实现技巧和创新点;作品存在的问题和改进设想等);
4.附录
附录1:电路原理图
附录2:源程序及程序注释
附录3:使用元器件一览表(序号、名称、型号、规格、数量、备注)
附录4:参考文献
8255键盘及显示接口设计
用8255A的A口和B口作为20健的小键盘的接口,编写程序,使得在小键盘上按下键后,微机屏幕上有相应字符显示出来,当按下‘R’键时返回DOS。
设计原理:
1、键盘一般都是矩阵排列,行和列分别接微机的输出、输入端口,每个键都跨
接在某行和某列上,当键按下时,该行与该列短路。输入的端口线一般都通过电阻上拉至高电平。识别键盘上的闭合键,常用的方法有行扫描法和行反转法。
2、行扫描法:是使键盘的某一行输出为低电平,其余行为高电平,然后读取列
值,如果行值中有某位为低电平,则表明行列交点处的键被按下;若为全高则再扫描下一行,直至扫完全部的行线为止。这样便可知有否键按下,若有键按下,还可以知道是哪一行哪一列交点的键按下。
3、行反转法识别闭合键,需要用可编程的并行接口。行线接一个并行口,先让
它工作于输出方式,;列线接另一个并行口,先让它工作于输入方式。编程使CPU通过输出口向行线上全部送低电平,然后通过输入口读列线值,如果此时有某一键按下,则必定会使某一列线值为0。然后重新对并行口初始化编程,使行线接的端口为输出口,并将刚读得的列线值所接的并行口输出,再读取行线所接的输入口,取得行线上的输入值,那么,在闭合键所在的行线上的值必定为0。这样,当一个键被按下时,必定可读得一对唯一的行值和列值。根据这一对行值和列值就可知哪一行哪一列的键被按下。
4、由于键内部的机械簧片在键按下和释放时会产生颤动,致使输入端口线上呈
现如图(一)所示波形。图中t1和t3分别为键闭合和断开过程中的抖动期,呈现一串负脉冲,时间长短和开关的机械特性有关,一般为10~20ms之间,t2为闭合的稳定期,其时间由操作员的按键动作所决定,一般为十分之几秒。
t0、t4为断开期。为了保证CPU对键的一次闭合作一次且仅作一次处理,必须去抖动,在键的稳定闭合或断开期读键的状态。
图(一)
克服抖动常用两种方法,硬件与软件法。在按键数较少时可用硬件方法。利用RS 触发器,使输出得到没有抖动的理想波形。实验台上的单脉冲电路就是采用硬件法消抖动的例子,如图(二)。在按键数较多时一般采用软件延时法,延
功能描述: 8255的B 口控制数码管的段显示,A 口控制键盘列扫描及数码管的位驱动,C 口控制键盘的行扫描。按下按键,该按键对应的位置将按顺序显示在数码管上。 PA0~PA7,PB0~PB7,PC0~PC7与其键盘及数码管端口连接即可。
键盘及数码管显示单元部分内部电路结构图如下:
块一个,8255A系统集成块一个,键盘及显示数码管集成块一个。74L37与非门2个,开关1个。
流程图见附录一,程序见附录二。
课程设计总结:
学了《微型计算机原理与应用》这门课后,把学到的用于做此次课程设计。此次设计选用了“8255键盘及显示接口设计”这个题目,题目并不陌生,应用道德知识却比较多,所以单从课本上学到的东西无法吗,满足这样的要求,只好查阅了其他资料后,历经一个星期终于顺利完成,完成的效果还满意,基本完成了课程设计的要求,并完成此份课程设计论文。设计中,碰到的问题还是比较多的。编程序是最大的问题。程序包括总线程序,8255A及键盘数码管显示的主程序。虽然有较多的参考资料,但毕竟和本次课程设计还是有区别,所以必须读懂程序,然后修改程序,以达到自己设计的效果。另外,设计电路原理图时也有些地方不知所措,系统总线和8255A及键盘数码管显示各个单元内部结构的了解。虽然不用对电路模块内部进行全方位的设计,但必须清楚内部大概结构,才知道如何进行接线,在这部分上参考了较多版本资料,最终由自己综合设计而成。
通过此次课程设计,把课堂上的理论知识很好的应用到了设计中来,不仅对8255A键盘及显示接口技术的知识有更多的了解,而且对这门课也认识很多。并且希望通过此次设计能在日后学习中有所用处。
参考资料:雷丽文等主编的《微机原理与接口技术——学习指导与实验》邹逢兴主编的《计算机硬件技术基础实验教程》
网上部分阅读参考资料
;PC8255.ASM
PAGE 60,78
PA55 EQU 218H
PB55 EQU 219H
P55CTL EQU 21BH
DATA SEGMENT
TABLE DW 0101H,0102H,0104H,0108H,0110H,0120H,0140H,0180H
DW 0201H,0202H,0204H,0208H,0210H,0220H,0240H,0280H
DW 0401H,0402H,0404H,0408H,0410H,0420H,0440H,0480H;字符码表CHAR DB …CDEFBA9845673210 RPMG?
MES DB …PLAY ANY KEY IN THE SMALL KEYBOARD!?,0AH,0DH DB …IT WILL BE ON THE SCREEN! END WITH“R”,0AH,0DH,’$’DATA ENDS
STACK SEGMENT STACK ‘STACK’
DB 100 DUP(0)
STACK ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MES
MOV AH,09
INT 21H ;显示信息
KY: CALL KEY ;调键盘扫描子程序,DL=键入字符ASCII码 CMP DL,’R’ ;DL=’R’,则返回DOS
JNZ KY
MOV AX,4C00H ;IF(DL)=’R’, RETURN TO DOS
INT 21H
RET
MAIN ENDP
KEY PROC NEAR ;键盘扫描子程序,字符ASCII码在DL中KST MOV AL,82H ;方式0,A口输出,B口输入
MOV DX,P55CTL
OUT DX,AL
WAITL: MOV AL,00
MOV DX,PA55 ;A口输出0
OUT DX,AL
MOV DX,PB55
IN AL,DX ;读B口得列值
CMP AL,0FFH
JZ WAITL ;无键按下,转WAITL
PUSH AX
PUSH AX
MOV CX,1000H ;延迟去抖动
DLY: LOOP DLY
MOV DX,P55CTL
MOV AL,90H ;方式0,A口输入,B口输出 OUT DX,AL
MOV DX,PB55
POP AX
OUT DX,AL ;B口输出列值
MOV DX,PA55
IN AL,DX ;从A口读入行值
POP BX ;列值送AH
MOV AH,BL
NOT AX ;行列值取反
MOV SI,OFFSET TABLE ;SI 指向键值表首址
MOV DI,OFFSET CHAR ;DI指向字符码表首址
MOV CX,24
TT: CMP AX,[SI] ;与键值表比较
JZ NN ;在表中
DEC CX
JZ KST ;比较完,不相等转KST
ADD SI,2 ;修改指针
INC DI
JMP TT ;继续比较
NN: MOV DL,[DI]
MOV AH,02
INT 21H ;显示该键值对应字符
PUSH DX ;字符入栈保护
MOV AL,82H ;方式0,A口输出,B口输入 MOV DX,P55CTL
OUT DX,AL
WAIT2: MOV AL,00
MOV DX,PA55
OUT DX,AL ;A口输出0
MOV DX,PB55
IN AL,DX ;读B口得列值
CMP AL,0FFH
JNZ WAIT2 ;有键按下则等待释放
POP DX ;出栈
RET
KEY ENDP
CODE ENDS
END START