HUT简易键盘的制作要点.docx
《HUT简易键盘的制作要点.docx》由会员分享,可在线阅读,更多相关《HUT简易键盘的制作要点.docx(16页珍藏版)》请在冰豆网上搜索。
HUT简易键盘的制作要点
湖南工业大学
课程设计
资料袋
湖南工业大学学院(系、部)2015~2016学年第一学期
课程名称微机原理与接口技术指导教师杨伟丰
学生姓名专业班级通信1302学号
题目简易键盘的制作
成绩起止日期2015年12月19日~2015年12月25日
目录清单
序号
材料名称
资料数量
备注
1
课程设计任务书
1
2
课程设计说明书
1
3
课程设计图纸
4
5
6
湖南工业大学
课程设计任务书
2015—2016学年第1学期
计算机与通信学院通信工程专业1302班级
课程名称:
微型计算机组成原理
设计题目:
简易键盘的制作
完成期限:
自2015年12月19日至2015年12月25日共1周
内
容
及
任
务
一、设计的主要技术参数
利用扩展按键、6个数码管、微机完成代码输入器制作,通过按键输入某个数字或字母,然后在数码管上显示,显示时输入几个显示几个,最多显示6个,显示采用队列的形式。
(祥见课程设计指导书)
二、设计任务(内容)
1、完成相关的电路设计
2、完成汇编程序设计
3、连接相关的电路
4、验证
5、完成课程设计说明书
三、设计工作量
1周完成
进
度
安
排
起止日期
工作内容
12月19日
分组、任务分配、课题理解
12月20日-22日
功能分析、程序设计、电路设计
12月22日-24日
实验验证和测试
12月25日
总结、书写实验报告,答辩。
参
考
资
料
[1]戴梅萼.微型计算机技术及应用,清华大学出版社,2008年
[2]彭楚武.微机原理与接口技术,湖南大学出版社,2006年
[3]艾德才.32位微机原理及接口技术,清华大学出版社,2003年
指导教师(签字):
年月日
系(教研室)主任(签字):
年月日
微型计算机组成原理课程设计
指
导
书
计算机与通信学院
2015年12月
湖南工业大学
微机原理与接口技术
课程设计说明书
简易键盘的制作
起止日期:
2015年12月19日至2015年12月25日
学生姓名
班级
通信1302
学号
成绩
指导教师(签字)
计算机与通信学院
2015年12月25日
目录
目录
第一部分总则5
一、目的要求5
二、设计步骤与设计说明书的撰写要求5
三、时间进度安排7
四、考核要求7
第二部分课程设计项目内容8
项目一简易键盘的制作8
一、设计目的8
二、设计内容8
三、基本原理8
四、设计步骤11
五、程序代码12
总结18
第一部分总则
一、目的要求
课程设计是培养和锻炼在校学生综合应用所学理论知识解决实际问题能力、进行工程实训的重要教学环节,它具有动手、动脑,理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一种较好方法。
微型计算机组成原理是一门实践性较强的课程,让学生在学完该课程之后,进行一次课程设计,使学生将课堂所学的知识和实践有机结合起来,初步掌握计算机应用系统设计的步骤和接口设计的方法,提高分析和解决实际问题的能力。
通过设计实践,培养学生查阅专业资料、工具书或参考书,了解有关工业标准,掌握现代设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力。
通过设计,不但要培养和提高学生解决工程具体问题、动脑动手的技术工作能力,而且还要逐步建立科学正确的设计和科研思想,培养良好的设计习惯,牢固树立实事求是和严肃认真的工作态度。
二、设计步骤与设计说明书的撰写要求
1、设计步骤
1)选题与分组:
根据分组,选择课题,在小组内进行分工,进行系统调查,搜集资料。
2)课题分析:
根据搜集的资料,进行功能分析,并进行系统功能等设计。
3)课题设计:
根据课题要求设计必要的电路,并利用汇编语言编写程序,实现所设计的模块功能。
4)调试与测试:
利用计算机和微机原理与接口实验箱自行调试程序,成员交叉测试程序,并记录测试情况。
5)验收与评分:
指导教师对每个小组的开发的系统,及每个成员开发的模块进行综合验收,结合设计报告,根据课程设计成绩的评定方法,评出成绩。
2、设计说明书的撰写要求
1)本课题设计主要内容和要求。
2)描述自己所分配到的设计任务。
3)进度安排与完成情况。
4)所涉及到的技术原理与解决方案。
5)本课程设计的目的意义,设计的结果与心得体会。
三、时间进度安排
1、组织动员与分组,分组讨论,1天。
2、资料查阅,功能分析,1天。
3、电路设计与程序设计,1天。
4、验证与调试,2天。
5、总结,分组讨论,1天。
6、书写课程设计说明书,1天。
四、考核要求
课程设计完成后,每位同学单独答辩。
根据设计完成情况和所掌握的知识,并结合平时表示,给与优、良、中、及格和不及格5个等级评定。
第二部分课程设计项目内容
项目一简易键盘的制作
一、设计目的
通过该设计,掌握8255并行接口芯片的使用,掌握普通键盘的设计,并掌握相应的程序设计和电路设计的技能。
是对8253定时计数章节理论学习的总结和补充,为后续的硬件课程的学习打下基础。
二、设计内容
利用开发板KB-C中的18个按钮中的前16个作为代码键,即代表:
0、1、2、…9、A、b、C、d、E、F,最后2个键,1个为删除键(S24),一个为回车键(S25),实现以下功能:
每按1个键,则在屏幕上显示相应该键代表的字符,按S25键结束输入。
再利用KB-C上的6个数码管中最后面的4个,在输入代码时不在屏幕上显示,而在数码管上显示,即输第1个时,在最后1位显示,输第2个时,前的那个在倒数第2个显示,而刚才输入的那个在最后1位显示,如此等等,4个代码输完后,按S25结束输入,并在屏幕上显示出来。
三、基本原理
1.按键的基本原理
在KB-C板上,端口A负责发按键扫描信息,端口C的低3位,即PC0、PC1、PC2,负责接收扫描结果,如下图所示,先定时通过端口A(PA0,PA1,PA2,PA3,PA4,PA5)扫描各按钮,即先PA0=0,其它为1发信号,然后PA1=0,其它为1…,端口发出1个信号后,即读端口C,如果PC0,PC1,PC2全为高电平,说明无按钮按下,如果PC0为低电平(PC1,PC2肯定为高电平),且此时,端口扫描的情况是:
PA0=1,PA1=0,PA2=1,…则说明SW1被按下。
2.数码显示管工作原理
数码管由8255端口B和端口C联合控制,端口负责控制某个数码管中的那些段码的显示和小数点的显示(PB7)。
端口C的PC4,PC5,PC6发送的信号通过译码后,负责选择6个数码管中的1个显示,即某时刻只有1个数码显示,如果要让几个同时显示,则采用来回扫描显示的方法,且当某个数码管显示时,必须要有一定的延时,约在100ms左右,太短显示不明显(发光不够),太长会产生闪烁。
数码管的控制如下图所示:
3、防止按键时的抖动,可以设计一个延时子程序来肖抖。
4、本实验用到了8255A芯片,它是Intel系列中的并行接口芯片。
由于它是可编程的,可以通过软件来设置芯片的工作方式,所以,用它连接外部设备时,通常不需要再附加外部电路。
5.8255A有三个8位的端口A,端口B,端口C。
在方式0下工作时,它们都是基本的输入输出口,要注意该方式下是单向传输的。
8255A的控制字如下图所示
1
D6
D5
D4
D3
D2
D1
D0
图4.18255A的控制字
其中:
D6D5是A组方式选择,00为方式0,01为方式1,1×为方式2;
D4表端口A工作方式,0为输出,1为输入;
D3表示PC7-PC4,1为输入,0为输出;
D2表B组方式选择,0为方式0,1为方式1;
D1表端口B工作方式,1为输入,0为输出;
D0表示PC3-PC0,1为输入,为输出。
本实验中用到了8255A的端口A,端口C、端口C它们都工作在方式0下,因此控制字为81H。
端口B与数码管相连用来显示操作的内容,而端口C低4位用来检测是否有按键按下,高4位用来控制数码管的段,端口A用来发送按键信息。
电路图如下所示
8255A
a
b
c
d
e
f
g
dp
图4.28255A电路图
数码管各信息的表示和二进制和十六进制的转换如下表所示:
下所示的是0-F:
表4.1七段数码管的字型代码表
显示
字形
g
e
f
d
c
b
a
段码
0
0
1
1
1
1
1
1
3fH
1
0
0
0
0
1
1
0
06H
2
1
0
1
1
0
1
1
5bH
3
1
0
0
1
1
1
1
4fH
4
1
1
0
0
1
1
0
66H
5
1
1
0
1
1
0
1
6dH
6
1
1
1
1
1
0
1
7dH
7
0
0
0
0
1
1
1
07H
8
1
1
1
1
1
1
1
7fH
9
1
1
0
1
1
1
1
6fH
A
1
1
1
0
1
1
1
77H
B
1
1
1
1
1
0
0
7CH
C
0
1
1
1
0
0
1
39H
D
1
0
1
1
1
1
0
5EH
E
1
1
1
1
0
1
1
79H
F
1
1
1
0
0
0
1
71H
四、设计步骤
1.电路设计:
根据设计内容,通过分析,设计出相应的电路图。
2、控制字设计:
根据要求,设计出各自8255的控制字和8253控制字。
3、程序设计:
根据要求,设计程序流程图,并设计相应的程序。
4、验证:
在实验室具体测试和验证。
程序代码:
datasegment;数据段的定义
anjian1db'012345';第一行按键回显现实内容
anjian2db'6789Ab';第二行按键回显现实内容
anjian3db'CdEF';第三行按键回显现实内容
dataends
STACKSEGMENT
DB200DUP(?
)
STACKENDS
codesegment;程序段的定义
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movdx,303h;8255初始化
moval,10000001B
outdx,al
scan1:
moval,11111110B;键盘的扫描(11111110)
movbh,0;bh用来记录扫描的次数
scan2:
movdx,300h;对A端口开始扫描
outdx,al
movbl,al;暂存扫描值变量
movdx,302h;读入C端口的值
inal,dx
testal,00000001b;测试D0是否为1
jzp1;为1跳转第一行的处理
testal,00000010b;测试D1是否为1
jzp2
testal,00000100b;测试D2是否为1
jzp3
moval,bl;暂存不变量把当前扫描值还给al
rolal,1;循环左移,开始对A的下一个端口扫描
incbh;扫描一次自加1
cmpbh,6;控制每排扫描6次
jzscan1
jmpscan2
p1:
calldelay
movsi,offsetanjian1;第一排按钮的某个按钮输出屏幕上
callscreen;在屏幕上显示
jmpscan1
p2:
calldelay
movsi,offsetanjian2;第二排按钮的某个按钮输出屏幕上
callscreen;在屏幕上显示
jmpscan1
p3:
calldelay
movsi,offsetanjian3;第三排按钮的某个按钮输出屏幕上
cmpbh,0
jznext1;是0,显对应的值
cmpbh,1
jznext1;是1,显示对应的值
cmpbh,2
jznext1;是2,显对应的值
cmpbh,3;是3,显对应的值
jznext1
cmpbh,4;在屏幕上显示
jnznext;不是4,检测是不是5
callbackspace;是4,退格
jmpscan1
next:
cmpbh,5
jnzwr;不是5就返回最初
callenter;是5的话就退出
next1:
callscreen
jmpscan1
wr:
jmpscan1;回到最初,重新检测
screenproc
movbl,bh
movbh,00h
moval,[si+bx]
movdl,al
movah,02h
int21h
ret
screenendp
enterproc
jmpexit
enterendp
backspaceproc
pushbx
pushdx
movah,3
movbh,0
int10h
moval,80
muldh
movdh,0
addax,dx
decax
movdl,80
divdl
movdh,al
movdl,ah
movbh,0
movah,2
int10h
popdx
popbx
ret
backspaceendp
delayproc;延时子程序
movcx,0
aa:
movdi,1100h
bb:
decdi
jnzbb
deccx
jnzaa
ret
delayendp
exit:
movah,4ch;退出程序返回DOS
int21h
codeends
endstart
心得
一周的微机原理课程设计结束了,虽然上课过程感到非常的枯燥,总是对着冗长的程序段,删掉,编译,测试,不过还是有很多收获的。
此次微机原理课程设计我们组选择的是简易键盘制作的设计,由于微机原理的知识掌握的不够扎实,所以花了一部分时间来学习键盘的工作原理,这样才能更好的来设计创新。
每个按键都有了功能,而且也编译测试通过,算是小有理解吧。
我们把精力又转移到了怎么使按键所对应的功能在屏幕上显示出来,连接了8255和键盘区控制灯的针脚后,自己又学习了对应的屏幕显示程序,及怎么把扫描出来的行或列值进行保存,后面在程序中可以看到很多极其类似的程序段。
其后我们又添加了一些数码管显示模块。
通过对这程序的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在做实验的过程中通过和同学的交流,也增加了合作的技巧。
每个人都可能会在某个地方钻死角,而团队虽然不能避免死角,但却可以及早的钻出来而不浪费太多的时间在没用的地方。
细节决定成败。
很多次的调试总是发现功能是有瑕疵的,就是因为一些小的细节没有做好,也许只是忘了加个逗号亦或是跳转错了地方。
本次实验是实践和理论的结合的实验,不仅巩固了对理论知识的理解,而且还加强了动手能力以及独立思考解决实际问题的能力,设计出了一些小功能,当然程序还是有很多地方有瑕疵,至少程序的易读性就没有做的很好,每次改程序都要改半天,设计的功能也不是很有创新,这也就对我提出了更高的要求,要不断的学习,来弥补不断产生的瑕疵。