微机课设七段数码管的循环显示

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件设计平台为多功能微型计算机实验软件MFS中的微机原理实验集成环境MF2KP。
要求完成的主要任务:
设计汇编语言程序,实现七段码显示效果,具体功能要求如下:
(1)数字0~9或A~F中的每个数字、字母用“¦”和“—”字符组成的“七段”码图形表示;(2)运行程序后,要求数字0~9或字母A~F依次循环显示;(3)单击“Q”或“q”键退出程序。。
系主任(或责任教师)签名:年月日
七段码显示汇编语言程序设计
1.
1.1
双击进入程序,显示DOS界面。屏幕上出现提示“If you want toquit,please press 'q'or'Q'!”字样。同时模拟七段数码管循环显示数字0-9。若在键盘输入'q'or'Q'则退出该程序,如果输入的为其他符号或者没有输入则程序继续运行。
4.
运行程序结果倒数从9到0如下列截图4-1到4-10所示:
9
图4-1
8
图4-2
7
图4-3
6
图4-4
5
图4-5
4
图4-6
3
图4-7
2
图4-8
1
图4-9
0
图4-10
在程序运行的任何时候按“Q”或者“q”程序退出。
5.
这次微机原理课程设计总共进行了十天,在这十天当中是苦多于甜。同时学到很多有用的东西,不但巩固了以前所学知识,而且学到了很多平时上课没有讲解的问题。以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图画出来,但是我开始总觉得这样做没必要,很浪费时间。这次课程设计彻底改变了我以前的错误认识。我认识到由于之前接触的程序都是很短、很基础的,所以可以不用事先把程序原理方框图画出来,但是在课程设计中碰到的编程需要很多代码才能完成的任务,画程序方框图是很有必要的。只有通过程序方框图,才能明白每一步要做什么,需要完成什么任务。必须要有一个清晰的思路,在程序的调试过程中才能更容易的查处出错的部分。
字形
11 1 1 1 1 10
111011 10
11 110 1 10
0 010 0 100
BAH
11 1 11100
1011 1 0 10
0 101 1 110
101101 10
11001 010
0 1 110 100
CAH
D6H
0011 1 1 1 0
11010110
3EH
DEH
1101 1 010
2.
程序流程图如下图2-1
B






A
A
B




图2-1
从程序流程图可以看出,程序一旦开始运行就不会自动停止,需要人工输入“Q”或者“q”来终止程序。程序分为如下部分:七段码数据定义部分;循环显示数字部分;显示每一个数字部分;判断键盘输入部分;子程序延时部分。
3.
3.1
datasegment
bufdb' __ ',0DH,0AH
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,毕竟第一次用汇编语言编写这么长的程序,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。在解决问题的过程中学会了如何利用手中的资源来为自己服务,替自己解决个难以解决的问题。比如说百度或者查阅资料。也体会到相互帮助的好处,相互帮助才能做得更好。
m2:
movah,08h
int21h
cmpal, 'Q'
jeexit
cmpal,'q'
jeexit
jmpagain;
调用DOS的第08h号功能,判断al中的是否为“Q”或者“q”,如果是两者中的一个则调转到exit结束DOS以及跳出语句。如果不是则跳转到下一个数字的显示。
3.11
exit:
movah,4ch
3.2
codesegment
assumecs:code,ds:data,es:data
mainprocnear
start:
movax,data
movds,ax
moves,ax
3.3
T:
movtimer,9
again:
leasi,buf
leadi,res
cld
movcx,32
rep movsb
为数字显示赋初值timer为9,程序从9开始到0的循环显示。程序把buf中的内容传送到res中。
根据功能要求绘制程序流程图、编写完整的汇编语言程序并上机调试:
撰写课程设计说明书。课程设计说明书的撰写格式如下:
(1)设计说明书包括封面、任务书(指导老师提供)、正文、参考文献(3~5篇)、附录(程序清单,要求有注释)、成绩评定表(指导老师提供)。(2)说明书正文包含总体方案论证(算法说明);程序流程图设计及其说明;软件设计关键问题或程序段落的说明;程序调试说明、结果记录及分析;课程设计收获及心得体会。(3)同一选题若为合作完成,设计说明书中需注明本人承担的设计部分。
3.9
movbl,25
N:
calldly_qrtr
decbl
jnzN
给bl赋值确定延时部分调用延时子程序的循环次数。
3.10
m1:
movah,0bh
int21h
cmpal,00h
jnem2
jmpagain
调用DOS的第0bh号功能,判断al中的数值,如果为00h则有输入跳转到下一部判断输入的字符,如果为0ffh则直接跳转到again循环执行下一个数字的显示。
[4]温冬婵,沈美明著.IBM-PC汇编语言程序设计例题习题集.北京:清华大学出版社,1991.6
[5]蒋本珊.微机原理与接口技术实验指导与习题集.北京:人民邮电出版社,2002.5
附录
程序清单
datasegment
bufdb' __ ',0DH,0AH;定义模拟数码管
db'| |',0DH,0AH
3.4
movah,06h
xoral,al
movbh,7
xorcx,cx
movdx,186Fh
int10h
调用BIOS的第06h号功能。给ah赋值06h表示调用的是第06h号功能。al与al相与达到al置零的效果,清屏。为bh赋值7为滚入行属性。cx与cx相与置零,左上角行列号置零。Dx赋值186fh为显示的右下角赋行列号。
时间安排:(本次课程设计时间:2010年1月18日至1月29日,历时两周)
周次
具体时间
设计内容
第一周
1月18日
指导老师就课程设计内容、设计要求、设计进度安排、评分标准等作具体介绍。强调课程设计期间纪律要求。
学生确定选题,明确设计内容及要求。
1月19~20日
根据选题查阅资料,完成方案的初步设计,绘制程序流程草图。
db' -- ',0DH,0AH
db'| |',0DH,0AH
db' -- ',0DH,0AH,24H
resdb32dup(?);开辟此空间让每次显示不至于破坏buf数据
deskdb1,6,8,13,18,20,25;每段数码管在buf的偏移量
leddb0EEh,24H,0BAH,0B6H,74H,0D6H,0DEH,0A4H,0FEH,0F6H;0-9的10个数的数码编码,最低位不空,其他从左往右,为0的则关闭相应数码管
db'| |',0DH,0AH
db' -- ',0DH,0AH
db'| |',0DH,0AH
db' -- ',0DH,0AH,24H
resdb32dup(?)
deskdb1,6,8,13,18,20,25
leddb0EEh,24H,0BAH,0B6H,74H,0D6H,0DEH,0A4H,0FEH,0F6H
这次微机原理的课程设计是一个发挥所学知识的舞台,巩固了所学知识并且学会了如何应用到实际工作当中。在同学和老师的帮助下受益匪浅。
参考文献
[1]周佩玲,彭虎,傅忠谦著.微机原理与接口技术(基于16位机).北京:电子工业出版社,2005.4
[2]王爽.汇编语言(第2版).北京:清华大学出版社,2008
[3]朱定华.微机原理、汇编与接口技术学习指导.北京:清华大学出版社,2006.12
3.7
movcl,7
leadi,desk
move:
rolal,1
jcnext
movbl,[di]
movsi,bx
movres[si],20h
movres[si+1],20h
next:
incdi
loopmove
为cl赋值7,因为没个七段数码管有7个部分要显示,将数字的数码编码每一位循环左移到CF中,然后把CF中的数值与1相比较,如果是1则跳转到next(该段数码管的显示),如果是0则继续执行下面的程序,由于每个数码管占两个字节所以用20h(空格)填充res[si]跟res[si+1]以完成原字符的模拟。
timerdb?
messagedb'If you want to quit,please press ''q''or''Q''!',0ah,0dh,'$'
dataends
在数据定义段,定义了模拟七段数码管的显示,同时给为buf开辟空间res。定义每段数码管在buf里面的偏移量。为0-9的每一位数字的七段数码管显示编码,以及循环显示的数字个数即起始显示数字timer。定义系统提示推出的信息。
学号:
0120711360120
课程设计
题目
七段码显示汇编语言程序设计
学院
自动化学院
专业
自动化
班级
自动化0701班
姓名
袁骏
指导教师
黄珍
2010

1

25

课程设计任务书
学生姓名袁骏专业班级自动化0701
指导教师黄珍工作单位自动化学院
课程设计题目七段码显示汇编语言程序设计
初始条件:
采用16位微处理器8086 CPU以及86系列微型计算机的指令系统;
int21h
至此主函数结束
3.12
dly_qrtrprocnear
pushcx
pushdx
movdx,90
dll:
movcx,65500
dl2:
loopdl2
decdx
jnzdll
popdx
popcx
ret
dly_qrtrendp
延时子程序给dx赋值90,赋值loop循环次数cx=65500,每次循环dx减1,检测dx是否为0,不为0则返回dll处。延时时间为90*65500*(系统执行一条指令时间)。
timerdb?
messagedb'If you want to quit,please press ''q''or''Q''!',0ah,0dh,'$';系统提示信息
1101 1 110
DAH
A4H
110110 00
1010 0 100
D8H
表1-1
由于本程序只需要循环显示数字0-9,所以数据段定义的七段码的数字为0F6H,0FEH,0A4H,0DEH,0D6H,74H,0B6H,0BAH,24H,0EEH(9-0)。
然后程序循环显示每一位数字,从所赋初值开始,以此减1循环显示,循环的同时检测键盘是否有输入,如果有输入则与"Q"和"q"想比较,如果输入的是这两个则结束循环,否则循环继续。每次循环中调用延时子程序来达到调节数码管刷新的频率。
3.5
movbh,0
movdx,0
movah,2
int10h
调用BIOS的第2h号功能。置页号bh为0。置行列号dx为0。
3.6
xห้องสมุดไป่ตู้rbx,bx
movbl,timer
moval,led[bx]
cmpbl,0
jl T
decbl
movtimer,bl
取得初始计数timer以及其在定义的数据段led中的数码编码。判断timer数值是否为0,如果为0则跳转到程序的开头重新为timer赋值,如果timer不为0则将timer减1后的数值赋给timer作为下次循环的初值。
1.2
由于程序需要在DOS界面上显示七段数码管,所以要模拟七段数码管。在数据定义的时候要给予定义。
按照七段数码管显示数字的形状来对显示的每一位数字进行二进制编码,列表(1-1)如下
七段码显示器字形与代码的对应关系如下:
12345678
FEH
F6H
FCH
5EH
74H
B6H
24H
EEH
代码
字形
代码
12345678
1月21日
中期检查及答疑(向指导老师阐述设计思路,并解释程序流程图)。
1月22日
根据中期检查意见修改程序流程图,编写程序代码。
第二周
1月25日
程序调试、修改。
1月26日
指导老师检查程序运行效果,并就结果进行评分。
1月27~28日
学生撰写课程设计说明书。
1月29日
上交课程设计说明书,以及答辩。
指导教师签名:年月日
3.8
movah,09h
movdx,seg message
movds,dx
movdx,offset message
movah,09h
int21h
leadx,res
movah,09h
int21h
调用DOS的09h号功能输出字符,显示所需要输出的字符。首先输出数据段定义的系统提示信息。然后由于数字数码管模拟部分已经存储在res中,所以显示res的内容就是显示的是该数字的数码管模拟。
相关文档
最新文档