微机原理课程设计.docx
- 文档编号:23890127
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:20
- 大小:334.09KB
微机原理课程设计.docx
《微机原理课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
微机原理课程设计
课程设计报告
课程名称:
微机原理课程设计
课题:
简易电子广告牌设计
专业班级:
计算机系13101班
学号:
姓名:
指导老师:
日期:
2013年6月24日
教师评语:
成绩评定:
指导教师(签名):
目录
1.课题简介3
2.设计方案3
3.具体设计3
3.1硬件设计3
3.2软件设计7
4.测试13
4.1测试过程中遇到的问题记录13
4.2测试结果14
5.总结15
6.参考文献15
1.课题简介
通过课程设计,进一步巩固所学的知识,并将所学的内容加以综合运用。
将所学的理论与实际问题或应用相结合,进一步培养自主学习的能力,综合运用知识的能力,以及创新实践的能力。
并且了解双色点阵LED显示器的基本原理,掌握PC机控制双色点阵LED显示程序的设计方法。
2.设计方案
本次设计利用双色8×8LED点阵制作简易电子广告牌。
为了实现课程设计的基本要求,我利用红色LED点阵滚动显示汉字,利用黄色LED点阵实现迅速变化的流水灯边框,使用8253定时器实现延时子程序的延时功能,并把黄色LED点阵与红色LED点阵分别设置成不同的变化速度。
我们的创新之处在于,利用流动变化的黄色LED点作为显示屏的动态边框,为黄色LED流水动态效果设置为红色点阵变化速度的16倍,并使黄色的光点留有余晖,画面极具动态效果。
3.具体设计
3.1硬件设计
(1)元件与仪器:
8255芯片、8253芯片、8×8双色LED点阵、CPU、(储存器)、PCI连接线、主板
(2)硬件工作原理:
系统以CPU为中心,CPU通过地址、数据、控制总线连接存储器、LED点阵、8253芯片和8255芯片,作为逻辑枢纽控制着外设的协调运作,另外8255芯片与8253芯片单独相连接,将8253芯片的输出端连接到8255芯片的一个I/O口.
CPU按照一定的顺序将点阵信号发送到LED点阵,由于LED点阵显示需要一定的暂留时间,通过8353定时器可以设置延时,使点阵发光的时间足够长;CPU通过查询8255的端口了解8253的工作状态。
(3)框图说明:
(4)地址分配表:
8255A口:
2A0H
8255控制口:
2A3H
8253时钟0:
298H
8353控制口 :
29BH
LED点阵行线 寄存器片选:
280H
LED点阵红列线 寄存器片选:
288H
LED点阵黄列线 寄存器片选:
290H
(5)电路图:
(6)硬件电路连接:
LED
8253
1MHZ
+5V
(7)重要芯片功能说明:
8*8LED显示器:
三个片选端,分别为行片选,红色列片选,黄色列片选。
8253可编程定时/计数器:
本实验中只使用计数器0,并将其设置为工作方式0,16为计数。
8255可编程并行接口:
8255有3种工作方式,在8255中有一个控制字用来选择工作方式和A、B、C三个端口。
D6
D5
工作方式
0
0
方式0
0
1
方式1
1
0
方式2
1
1
方式2
按图1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
1、用8253的计数器0和计数器1作为1MHz时间的的分频,使间脉冲变成1Hz,由计数器1的OUT口输出,并把OUT口接到8255的PA0端口,目的是让8255去读这个端口的值,为程序中的定时,当时间到时就变换字。
2、8253的两个计数器用工作方式2(分频器)和工作方式3(方波发生器),8255采用工作方式0,输出口为A口的第一个口PA0。
3、显示块的三个片选端口分别接的是实验板上I/O口地址的298h(行显示),288h(红色列显示线),290h(黄色列显示线)
4、接通电源,运行测试程序,由8253计时,8255检测8253OUT口的电平值,直到低电平就显示下一个字,并且中间有一定的器件延时。
(8)设计原理及思路:
a.红帧的处理方法:
将要显示的点阵按列存储,每一列用一个八位二进制数a[n]来存储,因此,‘信工五班’四个字的字模大概需要45个二进制数来表示,其中记n=i+k,i为红帧的第i帧,k为该帧的第k列。
由于LED点阵的显示方式为逐行扫描,因此,每显示一帧需要做k=0到7的for循环,循环内容为,把a[i,k]输出到“led红行寄存器”,并使点阵的第k列点亮。
记imax=45-7,当i=imax帧循环显示结束后,程序重新开始。
b.黄帧的处理方法
如图所示,黄色两点沿着图示的轨迹运动,对黄帧处理的关键是把帧显示和帧调整两个模块分开。
对于帧显示模块,显示黄帧模块可以和显示红帧模块放在一起,红帧每显示一次,黄帧也显示一次。
但对于帧调整,由于设计的效果为红黄帧以不同的速度运动,因此,在红帧调整和黄帧调整之间需要加入for循环——黄帧每改变16次,红帧才改变一次。
黄帧调整子程序(设黄点处于(x,y)坐标):
①如果x=0,y ②如果x ③如果x=N,y>0,那么y— ④如果x>0,y=0,那么x— 此程序可使(x,y)坐标始终绕着边框移动 c.要注意的地方 ①由于CPU写入行寄存器信息和写入列寄存器信息不是同步进行的,如果在对行寄存器赋值后列寄存器仍保存着上一次的值,那么,前后两次扫描之间就会产生干扰,出现类似数字电路中经常出现的“竞争与冒险现象”,因此,在切换显示内容的时候要注意先把行列寄存器清零,再重新赋值,这个过程称为“消影”。 ②由于LED点阵的亮度取决于点亮的时间,因此,要使LED点阵亮度尽可能的高,需要在点亮每列的时候进行延时。 延时子程序使用了8253芯片和8255芯片进行定时 3.2软件设计 (1)程序流程图: (2)关键代码段源码及分析: protequ0ec00h-280h prothequprot+280h protlrequprot+288h protlyequprot+290h io8253aequprot+298h;计数器1 io8253a1equprot+299h;计数器1 io8253bequprot+29Bh;计数器控制 io8255aequprot+2A0h;并行1 io8255bequprot+2A3h;并行控制 ;io0832aequprot+290h;DA口 DATASEGMENT rhdb0eeh rldb0eeh yydb01h xxdb01h xdb0 ydb0 cntdb0,0 ddb0,0 jdw0 testpdb0 delaytimedw1h ;min1DB00h,01h,02h,03h,04h,05h,06h,07h,08H,09H,0AH,0BH,0CH,0DH,0EH countdb0 BUFFDB0,0,0,0,0,0,0,0,20H,7FH,80H,47H,7DH,0FDH,7DH,47H,0H,02H,42H,42H,42H,7EH,42H,42H,02H,0H,02H,52H,52H,7eH,52H,52H,5eH,02H,0H,91H,0FFH,91H,38H,0FEH,91H,0FFH,91H,0,0,0,0,0,0,0,0 DATAENDS CODESEGMENT ASSUMECS: CODE,DS: DATA START: MOVAX,DATA;初始化程序 MOVDS,AX moval,00h;对LED行列寄存器进行初始化 movdx,proth outdx,al movdx,protly outdx,al movdx,protlr outdx,al main: incj;红帧调整 cmpj,2ch jlifend movj,0 ifend: movcx,0fh zhenloop: pushcx; movcx,00fh callyellowxy;黄帧调整 loop1: pushcx movcx,8 looph: movbx,offsetbuff;显示红列 movax,8 subax,cx movsi,ax addax,j xlat movdx,proth outdx,al movdx,protlr pushcx movah,80h movcx,si shrah,cl popcx moval,ah outdx,al calldelay3 moval,00h;红帧消余辉 movdx,proth outdx,al moval,00h movdx,protlr outdx,al looplooph popcx ;显示黄帧 moval,xx movdx,proth outdx,al moval,yy movdx,protly outdx,al calldelay3 moval,00h;黄帧消余晖 movdx,proth outdx,al moval,00h movdx,protly outdx,al looploop1 popcx;for帧循环end loopzhenloop jmpmain ;------------------- delay3procnear;延时子程序 ccc: movdx,io8253b;置8253通道0为方式0工作 moval,30h outdx,al movdx,io8253b;1M时钟接到这,两个gate都接高电平 moval,74H outdx,al movdx,io8255b;设8255A口输入 moval,90h outdx,al movdx,io8253a1 movax,700 outdx,al;向8253通道1输出 moval,ah outdx,al movdx,io8253a movax,100 outdx,al;向8253通道0输出 moval,ah outdx,al kkk: movdx,io8255a inal,dx;从8255A口读一字节 testal,01;判PA0口是否为1 jzkkk;若不为1,则转KKK ret;子程序返回 delay3endp ;------------------- yellowxyprocnear;黄帧调整子程序 pushax moval,cnt incal movcnt,al ifa1: moval,x cmpal,0 jeifa2 jmpifb1 ifa2: moval,y cmpal,7 jlifa jmpifb1 ifa: incy jmpifout ifb1: moval,y cmpal,7 jeifb2 jmpifc1 ifb2: moval,x cmpal,7 jlifbe jmpifc1 ifbe: incx jmpifout ifc1: moval,x cmpal,7 jeifc2 jmpifd1 ifc2: moval,y cmpal,0 jgifc jmpifd1 ifc: decy jmpifout ifd1: moval,y cmpal,0 jeifd2 jmpifout ifd2: moval,x cmpal,0 jgifd jmpifout ifd: decx jmpifout ifout: nop popax callxy2grid ret yellowxyendp ;------------------- ;-------------------;将黄帧(x,y)坐标用one-hot形式表示 xy2gridprocnear pushcx pushax movcl,x moval,1 shlal,cl movxx,al movcl,y moval,1 shlal,cl movyy,al popax popcx ret xy2gridendp ;------------------- CODEENDS ENDSTART 4.测试 4.1测试过程中遇到的问题记录 (1)显示图像较暗。 这个问题发生的原因在于,LED点阵的显示方式为逐列扫描,在某列点亮的时候,其余的列均为关闭状态,于是,每行的停留时间决定了最终图像的亮度。 当我们把延时程序的延时值设成一个更大的值之后,问题得以解决。 (2)显示的文字旁边出现影子或多余的亮点。 出现这个问题的原因在于,CPU写入行寄存器信息和写入列寄存器信息不是同步进行的,如果在对行寄存器赋值后,列寄存器仍保存着上一次的赋值,那么,前后两次扫描之间就会产生干扰,出现类似数字电路中经常出现的“竞争与冒险现象”,显示的混乱图像实质上是当前的列信息与上一组行信息的混合体。 解决方法是,显示完某一列之后,分别对行列寄存器进行清空,再进行下一列的显示。 (3)某行全亮,但其他行正常显示。 造成这个问题的原因,有可能是LED点阵损坏,另一种原因是类似第二点故障的原因——由于行列寄存器没有清空造成显示混乱。 在更换实验板以及加入消影操作之后,问题得到解决。 (4)第一次调试正常运作,在不改动的情况下进行第二次调试,屏幕上却出现了混乱的图像。 这是因为程序开始时没有对寄存器进行初始化赋初值操作,以至于寄存器还保存着上一次运行时的值,于是造成错乱。 (5)loop跳转范围过大出错。 解决这个问题,可以把loop改写成比较指令cmp加比较跳转指令je加上无条件跳转指令jmp。 另外,在调试过程中,我们还得到了很多经验与教训。 比如说, (1)编写汇编程序时应该利用好变量,因为寄存器的个数对于编写一个较为复杂的程序而言太少了,而变量是近乎无限的,它的作用可以代替寄存器,解决临时储存空间不足的问题。 对于一个结构化的程序而言,寄存器的工作范围应该仅限于一个动作——一个规模最小的模块,进出模块都需要对寄存器进行入栈出栈操作,避免把寄存器的工作范围扩大化,这样不利于程序的模块化。 (2)学会了如何运用汇编语言编写各种经典的分支循环结构(if…else分支及其嵌套、case分支、for循环、while循环、repeat循环)以及子程序的编写方法,对跳转指令也有了更深的认识, (3)学会了利用8253芯片进行计时和利用8255芯片作为i/o口扩展,学会了LED点阵的工作方式,对于进一步学习类似工作方式的器件如键盘阵列很有帮助。 4.2测试结果 设计作品最后调试成功,运行情况理想。 实现了当初设计的要求——红色的文字滚动显示,在显示滚动文字的同时,有一黄色光点在屏幕的边上旋绕。 5.总结 在这次课程设计过程中我学到了很多东西。 调试程序的过程是辛苦的,当一个故障发生的时候,往往不知道故障是发生在什么地方,来自硬件还是软件? 如果是硬件,是接触不良还是器件损坏? 如果是接触不良,是哪里接触不良? 如果是器件损坏,是哪里损坏了? 如果故障来自软件,是实验环境出错了还是编写的代码出错了? 出错的地方在哪里? 我们在调试的过程中遇到的最大的问题在于实验板的可靠性不高,有的时候原本正常运行的程序,在第二次运行的时候出现了显示结果混乱,更换一块实验板后恢复正常。 另外,实验环境存在bug,表现为不能生成目标文件,重启环境后能够恢复正常。 通过一次综合的小型微机应用系统的软硬件设计,通过课程设计,进一步巩固所学的知识,并将所学的内容加以综合运用。 将所学的理论与实际问题或应用相结合,进一步培养了我们自主学习的能力,综合运用知识的能力,以及创新实践的能力。 并且了解双色点阵LED显示器的基本原理,掌握PC机控制双色点阵LED显示程序的设计方法。 6.参考文献 [1]周明德.微型计算机系统原理及应用.北京: 清华大学出版社 [2]唐朔飞.计算机组成原理.北京: 高等教育出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计