当前位置:文档之家› 七段码显示汇编语言程序设计

七段码显示汇编语言程序设计

课程设计任务书学生姓名专业班级指导教师黄珍工作单位自动化学院课程设计题目七段码显示汇编语言程序设计初始条件:采用16位微处理器8086 CPU以及86系列微型计算机的指令系统;软件设计平台为多功能微型计算机实验软件MFS中的微机原理实验集成环境MF2KP。

要求完成的主要任务:设计汇编语言程序,实现七段码显示效果,具体功能要求如下:(1)数字0~9或A~F中的每个数字、字母用“¦”和“—”字符组成的“七段”码图形表示;(2)运行程序后,要求数字0~9或字母A~F依次循环显示;(3)单击“Q”或“q”键退出程序。

根据功能要求绘制程序流程图、编写完整的汇编语言程序并上机调试:撰写课程设计说明书。

课程设计说明书的撰写格式如下:(1)设计说明书包括封面、任务书(指导老师提供)、正文、参考文献(3~5篇)、附录(程序清单,要求有注释)、成绩评定表(指导老师提供)。

(2)说明书正文包含总体方案论证(算法说明);程序流程图设计及其说明;软件设计关键问题或程序段落的说明;程序调试说明、结果记录及分析;课程设计收获及心得体会。

(3)同一选题若为合作完成,设计说明书中需注明本人承担的设计部分。

(本次课程设计时间:2011年1月10日-21日,历时两周)指导教师签名:年月日系主任(或责任教师)签名:年月日目录1 总体方案论证 (1)1.1 七段数码管显示功能分析 (1)1.2 算法说明 (1)2 程序流程图设计及其说明 (3)2.1 程序流程图 (3)2.2 程序流程图说明 (4)3程序段落的说明 (5)3.1 数据段定义 (5)3.2 程序初始化 (5)3.3 清空显示屏 (5)3.4 重置光标 (6)3.5 数码显示处理工作 (6)3.6 取得计数并为下次循环准备 (6)3.7 一个数字的数码管显示 (6)3.8 显示程序 (7)3.9 程序延时部分 (7)3.10 判断键盘输入部分 (7)3.11 结束DOS以及跳出语句 (8)4 程序调试说明、结果记录及分析 (9)5 课程设计收获及心得体会 (13)参考文献 (14)附录 (15)七段码显示汇编语言程序设计1 总体方案论证1.1 七段数码管显示功能分析双击进入程序,运行显示DOS 界面。

屏幕上出现提示“if you want to quit,please press 'q' or 'Q'!”字样。

同时模拟七段数码管循环显示数字从F 依次到0。

若在键盘输入'q' or 'Q'则退出该程序,如果输入的为其他符号或者没有输入则程序继续运行。

1.2 算法说明由于程序需要在DOS 界面上显示七段数码管,所以要模拟七段数码管。

在数据定义的时候要给予定义。

七段码显示器字形与代码的对应关系如下:本程序采用的是向左循环,根据标识符CF 是1或者是0来判断是否开启相对应的模拟数码管,故表1-1中代码(B )代码为高七位有效。

由于本程序需要循环显示数字F-0,所以数据段定义的七段码的数字为0fch,60h,0dah,0f2h,66h,0b6h,0Beh,0e0h,0feh,0f6h,0EEH,3EH,9CH,7AH,9EH,8EH (0-F )。

然后程序循环显示每一位数字,从所赋初值开始,以此减1循环显示,循环的同时检测键盘是否有输入,如果有输入则与'q'和'Q'相比较,如果输入的是这两个则结束循环,否则循环继续。

每次循环中调用延时子程序来达到调节数码管刷新的频率。

12 34567表1-1七段码显示字形与代码的对应关系2 程序流程图设计及其说明2.1 程序流程图A图2-1 程序流程图2.2 程序流程图说明从程序流程图可以看出,程序一旦开始运行就不会自动停止,需要人工输入“Q”或者“q”来终止程序。

程序分为如下部分:七段码数据定义部分;循环显示数字部分;显示每一个数字部分;延时部分;判断键盘输入部分。

七段码数据定义部分:由于程序需要在DOS界面上显示七段数码管,所以要模拟七段数码管。

故刚开始定义模拟数码管,并规定好每段数码管的偏移量。

循环显示数字部分:初始赋予起始循环数字,并清屏,定义光标,根据循环数字逐一显示。

当循环数字小于0时返回至初始值,继续循环。

显示每一个数字部分:根据定义的代码,采用做循环左移指令,根据CF位来选择对应数码管段,开启则继续保留,关闭则用空格填充。

延时部分:利用LOOP循环指令,延时为总循环次数*系统执行一条指令时间。

判断键盘输入部分:根据键盘是否有输入以及输入的是否为“Q”或者“q”来终止程序,否则继续循环。

3程序段落的说明3.1 数据段定义DATA SEGMENTBUFF DB ' -- ',0AH,0DH,35DUP( )DB '| |',0AH,0DH,35DUP( )DB ' -- ',0AH,0DH,35DUP( )DB '| |',0AH,0DH,35DUP( )DB ' -- ',0AH,0DH,35DUP( ),24HMEM DB207DUP(?)VAL DB1,43,125,165,123,41,83TAB DB0fch, 60h, 0dah, 0f2h, 66h, 0b6h, 0Beh, 0e0h, 0feh, 0f6h, 0EEH, 3EH, 9CH, 7AH, 9EH, 8EHMESSAGE DB 'If you want to quit,please press ''q'' or ' 'Q''!' ,0AH,0DH,0AH,0DH, 35DUP( ),24HNUMBER DB ?DATA ENDS在数据定义段,BUFF定义了模拟七段数码管的显示,其中35 dup ( )是将七段数码管显示在了屏幕中间。

同时给为BUFF开辟空间MEM,开辟此空间让每次显示不至于破坏BUFF数据。

同时定义VAL为每段数码管在BUFF里面的偏移量,TAB为0-F的每一位数字的七段数码管显示编码,以及循环显示的数字个数即起始显示数字NUMBER。

MESSAGE为定义系统提示退出的信息。

3.2 程序初始化CODE SEGMENTASSUME DS:DATA ,CS:CODE ,ES:DATASTART:MOV AX,DATAMOV DS,AXMOV ES,AXDS和ES对应于数据段DATA,CS对应于代码段CODE,并将DATA的地址赋予DS和ES。

3.3 清空显示屏A1:MOV AH,06HMOV AL,0MOV BH,7MOV CX,0MOV DX,986FHINT10H采用BIOS中断INT 10H的06H功能,AH=06H是向上滚屏,AL是滚动行数,当AL=0时是清屏,BH是空白区域的缺省属性,(CH、CL)是窗口的左上角位置(Y 坐标,X坐标),(DH、DL)是窗口的右下角位置(Y坐标,X坐标)3.4 重置光标MOV AH,02HMOV BH,0MOV DX,610HINT10H采用BIOS中断INT 10H的02H功能,用文本坐标下设置光标位置。

BH为显示页码数,DH是行(Y坐标),DL是列(X坐标)。

3.5 数码显示处理工作LEA SI,BUFFLEA DI,MEMCLDMOV CX,207REP MOVSB将BUFF的内容传至MEM中,开辟此空间让每次显示不至于破坏BUFF数据。

用CLD使DF=0,当DF=0时地址往增加方向移动。

3.6 取得计数并为下次循环准备MOV BL,NUMBERMOV AL,TAB[BX]CMP BL,0JL ROUNDDEC BLMOV NUMBER,BL取得初始计数NUMBER以及其在定义的数据段TAB中的数码编码。

判断NUMBER 数值是否小于0,如果小于0则跳转到程序的开头ROUND重新为NUMBER赋值,如果NUMBER不小于0则将NUMBER减1后的数值赋给NUMBER作为下次循环的初值。

3.7 一个数字的数码管显示LEA DI,VALMOV CX,7B1:ROL AL,1JC B2MOV BL,[DI]MOV SI,BXMOV MEM[SI],20HMOV MEM[SI+1],20HB2:INC DILOOP B1为CX赋值7,因为每个七段数码管有7个部分要显示,将数字的数码编码每一位循环左移到CF中,然后判断CF,如果是1则跳转到B2(该段数码管显示),如果是0则继续执行下面的程序,由于每个数码管占两个字节所以用20h (空格)填充MEM[SI]跟MEM[SI+1]以完成原字符的模拟。

3.8 显示程序MOV AH,09HMOV DX,SEG MESSAGEMOV DS,DXMOV DX,OFFSET MESSAGEINT21HMOV AH,09HMOV DX,OFFSET MEMINT21H调用DOS的09H号功能输出字符,显示所需要输出的字符。

首先输出数据段定义的系统提示信息。

然后由于数字数码管模拟部分已经存储在MEM中,所以显示MEM的内容就是显示的是该数字的数码管模拟。

3.9 程序延时部分PUSH CXPUSH DXMOV DX,10000C1:MOV CX,65500C2:LOOP C2DEC DXJNZ C1POP DXPOP CX利用LOOP循环来延时,延时时间为10000*65500*系统执行一条指令时间3.10 判断键盘输入部分D1:MOV AH,0BHINT21HCMP AL,0JNZ D2JMP A1D2:MOV AH,08HINT21HCMP AL,'Q'JZ EXITCMP AL,'q'JZ EXITJMP A1D1调用DOS的第0BH号功能,判断AL中的数值,如果为00H则有输入跳转D2判断输入的字符,如果为0FFH则直接跳转到AL循环执行下一个数字的显示。

D2调用DOS的第08H号功能,判断AL中的是否为“Q”或者“q”,如果是两者中的一个则调转到EXIT结束DOS以及跳出语句。

如果不是则跳转到A1显示下一个数字。

3.11 结束DOS以及跳出语句EXIT:MOV AX,4C00HINT21HCODE ENDSEND START程序至此结束。

4 程序调试说明、结果记录及分析运行程序结果倒数从F到0如下列截图4-1到4-16所示:F:图4-1显示结果FE:图4-2显示结果ED:图4-3显示结果DC:图4-4显示结果CB:图4-5显示结果B A:图4-6显示结果A 9:图4-7显示结果9 8:图4-8显示结果8 7:图4-9显示结果76:图4-10显示结果6 5:图4-11显示结果5 4:图4-12显示结果4 3:图4-13显示结果3 2:图4-14显示结果21:图4-15显示结果10:图4-16显示结果0 在程序运行的任何时候按“Q”或者“q”程序退出。

相关主题