题目: 字符串动画显示
设计内容要求:
1、菜单
内容包括:①输入字符串;②字符串动画显示;③退出。
2、输入字符串
选择该项后,可以输入一个字符串。该字符串即为动画显示时所显示的字符串。
3、字符串动画显示
所显示字符串在一矩形框内从无到有,从右至左移动,完全从框内移出后,又从右至左移动,直到有任意键按下,停止字符串动画显示返回到主菜单。
4、在主菜单中选择退出项,则结束程序返回DOS。
内容要求:以下几项必不可少:
1、完成软件的关键技术(如:使用了什么DOS功能)
2、程序设计流程图,如有必要可有多个,可包括主程序流程图,关键部分程序流
由于时间很紧,希望各位大侠给予解救!我在电脑上验证成功后,另追加50分!!!
ä¸ã设计çç®çï¼
ææ¡å¾®æºåççåºæ¬åºç¨æ¹æ³ãéè¿å®éªçæå¾®æºåºæ¬æ¥å£è¯ççå¤åãå¼èãç¼ç¨ç»æï¼ææ¡æ±ç¼è¯è¨ç¨åºè®¾è®¡åå¾®æºåºæ¬æ¥å£çµè·¯ç设计ãåºç¨æ¹æ³ï¼åå°ç论èç³»å®é ã
äºãç³»ç»ç主è¦åè½ãä½ç¨å主è¦æ§è½ææ
æç §æ¶é´æ§å¶ååï¼å©ç¨å¹¶è¡æ¥å£åå®æ¶å¨ï¼éç¨æ¶é´ä¸ææ¹å¼è®¾è®¡ä¸å¥ååè·¯å£ç交éç¯ç®¡çç³»ç»ï¼éè¡æ¶é´ï¼æç¦æ¢æ¶é´ï¼30ç§ï¼åå¤æ¶é´3ç§ï¼å¨åå¤æ¶é´éé»ç¯éªç3次ï¼éªçé¢ç为0.5ç§ï¼å¨èå¤å§ãå¯å©ç¨8255ã8253ã8259çæ¥å£çµè·¯ã
æ»ä½è®¾è®¡
1ãåºæ¬å·¥ä½åç 设æä¸ä¸ªååè·¯å£ï¼1ã3为åï¼åæ¹åï¼
2ã4为ä¸ï¼è¥¿æ¹åã åå§åä¹åï¼ 1ã3è·¯å£ç绿ç¯äº®ï¼ 2ã4è·¯å£ç红ç¯äº®ï¼ 1ãè·¯å£æ¹åé车ã 延è¿ä¸æ®µæ¶é´ï¼30ç§ï¼åï¼ 1ã3è·¯å£ç绿ç¯ççï¼è1ã3è·¯å£çé»ç¯å¼å§éªçãéªç3次ï¼å»¶æ¶3ç§ï¼åï¼ 1ã3è·¯å£ç红ç¯äº®ï¼ åæ¶2ã4è·¯å£ç绿ç¯äº®ï¼ 2ã4è·¯å£æ¹åå¼å§é车ã 延è¿ä¸æ®µæ¶é´ï¼30ç§ï¼åï¼ 2ã4è·¯å£ç绿ç¯ççï¼èé»ç¯å¼å§éªçãéªç3次ï¼å»¶æ¶3ç§ï¼åï¼ååæ¢å°1ã3è·¯å£æ¹åã ä¹åï¼éå¤ä¸è¿°è¿ç¨
2 ã硬件æ»ä½è®¾è®¡
ï¼1ï¼ç¡¬ä»¶çµè·¯è®¾è®¡
åè¯ç主è¦ç®¡èçåè½å¦ä¸ï¼ 8255A PC0:å8253çOUT0端ç¸ä¸åå¾å°é»ç¯ä¿¡å·ï¼å ¶ä¸1表示 2 亮ï¼0表示æ PC1:表示绿ç¯ä¿¡å·ï¼å ¶ä¸1表示亮ï¼0表示æ PC2:表示红ç¯ä¿¡å·ï¼å ¶ä¸1表示亮ï¼0表示æ PC3:å8253GATE1端ç¸è¿ï¼ä¸ºæ¶å¨1çé¨æ§åå· PC4: å8253GATE2端ç¸è¿ï¼ä¸ºæ¶å¨2çé¨æ§åå· PA0~PA7,PB0~PB7:å¯æ¥ä¸¤ä¸ª8段LEDæ¾ç¤ºå¨ï¼ç¨äºæ¾ç¤ºå½åç亮æ¶é´ 8253ï¼ å®æ¶å¨0ï¼è¾å ¥ä¿¡å·è®¾ä¸º10KHZ,å·¥ä½å¨æ¹å¼3ï¼è¾åºä¸º1HZæ¹æ³¢ï¼OUT0åPC0ç¸ä¸å¾å°é»ç¯ä¿¡å·ã å®æ¶å¨1ï¼è¾å ¥ä¿¡å·ä¸ºOUT0ï¼å·¥ä½ç«æ¹å¼2ï¼è®¡æ°åå¼ä¸º30ï¼å®ç°å»¶è¿30Så产çä¸æãæ§å¶å为ï¼01010100 å®æ¶å¨2ï¼è¾å ¥ä¿¡å·ä¸ºOUT0ï¼å·¥ä½ç«æ¹å¼2ï¼è®¡æ°åå¼ä¸º3ï¼å®ç°å»¶è¿3Så产çä¸æãæ§å¶å为ï¼10010100 8259ï¼ éç¨è¾¹æ²¿è§¦åï¼æ²¡æ级èï¼éè¦è®¾ICW1,ICW2,ICW4,ä¸ç¨ICW3ã
ä¸ã设计è¦æ±
1ãé¢ä¹ è¦æ±ï¼
1ï¼é¢ä¹ ãSTAR ES598PCIå®éªä»ªå¾®æºåçå®éªæ导书ãéå½ä¸ï¼
2ï¼ é¢ä¹ ãSTAR ES598PCIå®éªä»ª å¾®æºåçå®éªæ导书ãéå½äºä¹2.7 B2åºï¼2.9 B4
åºï¼2.15 C5åºï¼2.36 G5åºï¼2.37 G6åºã
3ï¼é¢ä¹ ãSTAR ES598PCIå®éªä»ªå¾®æºåçå®éªæ导书ãä¹âå®éªä¹8255æ§å¶äº¤éå®éªâåâå®éªå8253æ¹æ³¢å®éªâã
4ï¼é¢ä¹ æ¬ä»»å¡ä¹¦ï¼æ ¹æ®è®¾è®¡ä»»å¡ï¼é¢å ç»åºçµè·¯åçå¾ãç¨åºæµç¨å¾ï¼ç¼ååºå®éªç¨åºã
2ã设计æ¥åè¦æ±ï¼
1ï¼ç»åºæ¥å£é¨åçµè·¯åçå¾ï¼å¹¶éè¿°ç³»ç»å·¥ä½åçã
2ï¼ç»å¶ç¨åºæµç¨å¾åæºç¨åºæ¸ åã
3ï¼è°è¯è¿ç¨åç»æã
4ï¼è¦æ±ç¨WORDæ°å课ç¨è®¾è®¡æ¥åï¼ä¸äº¤æå°çåçµå稿ã
ææ¡å¾®æºåççåºæ¬åºç¨æ¹æ³ãéè¿å®éªçæå¾®æºåºæ¬æ¥å£è¯ççå¤åãå¼èãç¼ç¨ç»æï¼ææ¡æ±ç¼è¯è¨ç¨åºè®¾è®¡åå¾®æºåºæ¬æ¥å£çµè·¯ç设计ãåºç¨æ¹æ³ï¼åå°ç论èç³»å®é ã
äºãç³»ç»ç主è¦åè½ãä½ç¨å主è¦æ§è½ææ
æç §æ¶é´æ§å¶ååï¼å©ç¨å¹¶è¡æ¥å£åå®æ¶å¨ï¼éç¨æ¶é´ä¸ææ¹å¼è®¾è®¡ä¸å¥ååè·¯å£ç交éç¯ç®¡çç³»ç»ï¼éè¡æ¶é´ï¼æç¦æ¢æ¶é´ï¼30ç§ï¼åå¤æ¶é´3ç§ï¼å¨åå¤æ¶é´éé»ç¯éªç3次ï¼éªçé¢ç为0.5ç§ï¼å¨èå¤å§ãå¯å©ç¨8255ã8253ã8259çæ¥å£çµè·¯ã
æ»ä½è®¾è®¡
1ãåºæ¬å·¥ä½åç 设æä¸ä¸ªååè·¯å£ï¼1ã3为åï¼åæ¹åï¼
2ã4为ä¸ï¼è¥¿æ¹åã åå§åä¹åï¼ 1ã3è·¯å£ç绿ç¯äº®ï¼ 2ã4è·¯å£ç红ç¯äº®ï¼ 1ãè·¯å£æ¹åé车ã 延è¿ä¸æ®µæ¶é´ï¼30ç§ï¼åï¼ 1ã3è·¯å£ç绿ç¯ççï¼è1ã3è·¯å£çé»ç¯å¼å§éªçãéªç3次ï¼å»¶æ¶3ç§ï¼åï¼ 1ã3è·¯å£ç红ç¯äº®ï¼ åæ¶2ã4è·¯å£ç绿ç¯äº®ï¼ 2ã4è·¯å£æ¹åå¼å§é车ã 延è¿ä¸æ®µæ¶é´ï¼30ç§ï¼åï¼ 2ã4è·¯å£ç绿ç¯ççï¼èé»ç¯å¼å§éªçãéªç3次ï¼å»¶æ¶3ç§ï¼åï¼ååæ¢å°1ã3è·¯å£æ¹åã ä¹åï¼éå¤ä¸è¿°è¿ç¨
2 ã硬件æ»ä½è®¾è®¡
ï¼1ï¼ç¡¬ä»¶çµè·¯è®¾è®¡
åè¯ç主è¦ç®¡èçåè½å¦ä¸ï¼ 8255A PC0:å8253çOUT0端ç¸ä¸åå¾å°é»ç¯ä¿¡å·ï¼å ¶ä¸1表示 2 亮ï¼0表示æ PC1:表示绿ç¯ä¿¡å·ï¼å ¶ä¸1表示亮ï¼0表示æ PC2:表示红ç¯ä¿¡å·ï¼å ¶ä¸1表示亮ï¼0表示æ PC3:å8253GATE1端ç¸è¿ï¼ä¸ºæ¶å¨1çé¨æ§åå· PC4: å8253GATE2端ç¸è¿ï¼ä¸ºæ¶å¨2çé¨æ§åå· PA0~PA7,PB0~PB7:å¯æ¥ä¸¤ä¸ª8段LEDæ¾ç¤ºå¨ï¼ç¨äºæ¾ç¤ºå½åç亮æ¶é´ 8253ï¼ å®æ¶å¨0ï¼è¾å ¥ä¿¡å·è®¾ä¸º10KHZ,å·¥ä½å¨æ¹å¼3ï¼è¾åºä¸º1HZæ¹æ³¢ï¼OUT0åPC0ç¸ä¸å¾å°é»ç¯ä¿¡å·ã å®æ¶å¨1ï¼è¾å ¥ä¿¡å·ä¸ºOUT0ï¼å·¥ä½ç«æ¹å¼2ï¼è®¡æ°åå¼ä¸º30ï¼å®ç°å»¶è¿30Så产çä¸æãæ§å¶å为ï¼01010100 å®æ¶å¨2ï¼è¾å ¥ä¿¡å·ä¸ºOUT0ï¼å·¥ä½ç«æ¹å¼2ï¼è®¡æ°åå¼ä¸º3ï¼å®ç°å»¶è¿3Så产çä¸æãæ§å¶å为ï¼10010100 8259ï¼ éç¨è¾¹æ²¿è§¦åï¼æ²¡æ级èï¼éè¦è®¾ICW1,ICW2,ICW4,ä¸ç¨ICW3ã
ä¸ã设计è¦æ±
1ãé¢ä¹ è¦æ±ï¼
1ï¼é¢ä¹ ãSTAR ES598PCIå®éªä»ªå¾®æºåçå®éªæ导书ãéå½ä¸ï¼
2ï¼ é¢ä¹ ãSTAR ES598PCIå®éªä»ª å¾®æºåçå®éªæ导书ãéå½äºä¹2.7 B2åºï¼2.9 B4
åºï¼2.15 C5åºï¼2.36 G5åºï¼2.37 G6åºã
3ï¼é¢ä¹ ãSTAR ES598PCIå®éªä»ªå¾®æºåçå®éªæ导书ãä¹âå®éªä¹8255æ§å¶äº¤éå®éªâåâå®éªå8253æ¹æ³¢å®éªâã
4ï¼é¢ä¹ æ¬ä»»å¡ä¹¦ï¼æ ¹æ®è®¾è®¡ä»»å¡ï¼é¢å ç»åºçµè·¯åçå¾ãç¨åºæµç¨å¾ï¼ç¼ååºå®éªç¨åºã
2ã设计æ¥åè¦æ±ï¼
1ï¼ç»åºæ¥å£é¨åçµè·¯åçå¾ï¼å¹¶éè¿°ç³»ç»å·¥ä½åçã
2ï¼ç»å¶ç¨åºæµç¨å¾åæºç¨åºæ¸ åã
3ï¼è°è¯è¿ç¨åç»æã
4ï¼è¦æ±ç¨WORDæ°å课ç¨è®¾è®¡æ¥åï¼ä¸äº¤æå°çåçµå稿ã
温馨提示:答案为网友推荐,仅供参考
第1个回答 2010-01-05
; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
push ax
lea dx,Str_Addr
mov ah,9
int 21h
pop ax
EndM
; -------------------------------------
; 功能:输出回车换行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
; -------------------------------------
; 功能:延时指定的时钟嘀嗒数
; 入口:
; Didas=时钟嘀嗒数(1秒钟约嘀嗒18.2次,10秒钟嘀嗒182次。若延时不是秒的10数次倍,误差稍微大点)
Delay Proc Near
push dx
push cx
push ax
xor ax,ax
int 1ah
mov cs:@@Times,dx
mov cs:@@Times[2],cx
Read_Time: xor ax,ax
int 1ah
sub dx,cs:@@Times
sbb cx,cs:@@Times[2]
cmp dx,Didas
jb Read_Time
pop ax
pop cx
pop dx
ret
@@Times dw 0,0
Delay EndP
; -------------------------------------
; 功能:键盘输入字符串
Input_String Proc Near
Output Prompt_Str ;提示输入字符串
lea dx,Buffer
@@Input_Str: mov ah,0ah
int 21h
mov cl,Buffer[1] ;取字符串长度
cmp cl,2
jb @@Input_Str ;要求输入的字符串最少2个字符,否则,重新输入字符串
xor ch,ch
mov Str_Lenth,cx ;字符串字符数
ret
Input_String EndP
; -------------------------------------
; 功能:字符显示方式下,画一个矩形框
Rectangler Proc Near
mov di,160*17+10*2
mov al,201 ;左上角字符
mov ah,9 ;LightBlue
stosw
mov al,205 ;横线符
mov cx,58
rep stosw
mov al,187 ;右上角字符
stosw
mov di,160*18+10*2
mov al,186 ;竖线符
stosw
mov Screen_Buffer,di ;矩形框左边界显示缓冲区地址
mov cx,58
mov al,20h ;空格符
rep stosw
mov Screen_Buffer[2],di ;矩形框右边界显示缓冲区地址
mov al,186 ;竖线符
stosw
mov di,160*19+10*2
mov al,200 ;左下角字符
stosw
mov al,205 ;横线符
mov cx,58
rep stosw
mov al,188 ;右下角字符
stosw
ret
Rectangler EndP
; -------------------------------------
Disp_Str Proc Near
push di
@@Disp_Str: lodsb
stosw
loop @@Disp_Str
pop di
ret
Disp_Str EndP
; -------------------------------------
; 所显示字符串在一矩形框内从无到有,从右至左移动,完全从框内移出后,又从
; 右至左移动,直到有任意键按下,停止字符串动画显示返回到主菜单。
Dynamic_Disp Proc Near
call Rectangler ;画矩形框
mov bx,Str_Lenth ;字符串长度
mov Buffer[bx][2],20h
@@Moving_0: mov di,Screen_Buffer[2]
dec di
dec di
mov cx,Str_Lenth ;字符串长度
mov bx,cx
inc bx
@@Moving_1: lea si,Buffer[2]
mov ah,14 ;字符显示属性:黄色字符
push cx
mov dx,cx
mov cx,bx
sub cx,dx
call Disp_Str ;写字符串到显示缓冲区
dec di
dec di
pop cx
call Delay ;延时
mov ah,1
int 16h
jz $+3
ret
loop @@Moving_1
mov cx,Str_Lenth ;字符串长度
inc cx
mov bx,cx
@@Moving_2: lea si,Buffer[2]
mov ah,14 ;字符显示属性:黄色字符
mov cx,bx
call Disp_Str ;写字符串到显示缓冲区
call Delay ;延时
mov ah,1
int 16h
jz $+3
ret
dec di
dec di
cmp di,Screen_Buffer
jae @@Moving_2
inc di
inc di
lea si,Buffer[3]
mov cx,Str_Lenth ;字符串长度
@@Moving_3: push cx
push si
mov ah,14 ;字符显示属性:黄色字符
call Disp_Str ;写字符串到显示缓冲区
pop si
inc si
pop cx
call Delay ;延时
mov ah,1
int 16h
jz $+3
ret
loop @@Moving_3
jmp @@Moving_0
ret
Dynamic_Disp EndP
; -------------------------------------
Didas equ 1 ;延时1个嘀嗒时间
Prompt_Menu db 4 dup(10)
db 35 dup(20h),'Main Menu',13,10
db 30 dup(20h),201,17 dup(205),187,13,10
db 30 dup(20h),186,' Input a String ',186,13,10
db 30 dup(20h),186,' Dynamic Display ',186,13,10
db 30 dup(20h),186,' Return to DOS ',186,13,10
db 30 dup(20h),200,17 dup(205),188,13,10
db 32 dup(20h),'Choice(I,D,R):$'
Cursor_Tmp dw ?
Str_Lenth dw ? ;字符串字符数
Screen_Buffer dw 2 dup(?) ;显示缓冲区左右边界地址
Prompt_Str db 13,10,10,'Please input a string:$'
Press_Key db 7,13,12 dup(10),'The complated. Press any key to exit...$'
Start: push cs
pop ds ;使数据段与代码段同段
push cs
pop es ;使附加段与代码段同段
mov ax,3 ;设置25*80字符显示方式
int 10h
Output Prompt_Menu ;显示主菜单
xor bx,bx
mov ah,3
int 10h
mov Cursor_Tmp,dx
mov ax,0b800h
mov es,ax ;设置字符显示方式缓冲区段地址
mov di,160*4+35*2+1
mov al,13 ;LightMagenta
mov cx,10
cld
Attribute: stosb
inc di
loop Attribute
mov di,160*6+32*2+1
stosb
add di,159
stosb
add di,159
stosb
mov di,160*10+39*2+1
stosb
add di,3
stosb
add di,3
stosb
Choice_Func: mov dx,Cursor_Tmp
xor bx,bx
mov ah,2
int 10h
mov ah,1
int 21h
and al,0dfh
cmp al,'R'
jz Exit_Proc
cmp al,'I'
jnz $+7
call Input_String
jmp Choice_Func
cmp al,'D'
jnz Choice_Func
call Dynamic_Disp
jmp Choice_Func
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
mov ah,4ch ;结束程序
int 21h
Buffer db 25 ;输入字符串缓冲区
Code ENDS
END Start ;编译到此结束
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
push ax
lea dx,Str_Addr
mov ah,9
int 21h
pop ax
EndM
; -------------------------------------
; 功能:输出回车换行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
; -------------------------------------
; 功能:延时指定的时钟嘀嗒数
; 入口:
; Didas=时钟嘀嗒数(1秒钟约嘀嗒18.2次,10秒钟嘀嗒182次。若延时不是秒的10数次倍,误差稍微大点)
Delay Proc Near
push dx
push cx
push ax
xor ax,ax
int 1ah
mov cs:@@Times,dx
mov cs:@@Times[2],cx
Read_Time: xor ax,ax
int 1ah
sub dx,cs:@@Times
sbb cx,cs:@@Times[2]
cmp dx,Didas
jb Read_Time
pop ax
pop cx
pop dx
ret
@@Times dw 0,0
Delay EndP
; -------------------------------------
; 功能:键盘输入字符串
Input_String Proc Near
Output Prompt_Str ;提示输入字符串
lea dx,Buffer
@@Input_Str: mov ah,0ah
int 21h
mov cl,Buffer[1] ;取字符串长度
cmp cl,2
jb @@Input_Str ;要求输入的字符串最少2个字符,否则,重新输入字符串
xor ch,ch
mov Str_Lenth,cx ;字符串字符数
ret
Input_String EndP
; -------------------------------------
; 功能:字符显示方式下,画一个矩形框
Rectangler Proc Near
mov di,160*17+10*2
mov al,201 ;左上角字符
mov ah,9 ;LightBlue
stosw
mov al,205 ;横线符
mov cx,58
rep stosw
mov al,187 ;右上角字符
stosw
mov di,160*18+10*2
mov al,186 ;竖线符
stosw
mov Screen_Buffer,di ;矩形框左边界显示缓冲区地址
mov cx,58
mov al,20h ;空格符
rep stosw
mov Screen_Buffer[2],di ;矩形框右边界显示缓冲区地址
mov al,186 ;竖线符
stosw
mov di,160*19+10*2
mov al,200 ;左下角字符
stosw
mov al,205 ;横线符
mov cx,58
rep stosw
mov al,188 ;右下角字符
stosw
ret
Rectangler EndP
; -------------------------------------
Disp_Str Proc Near
push di
@@Disp_Str: lodsb
stosw
loop @@Disp_Str
pop di
ret
Disp_Str EndP
; -------------------------------------
; 所显示字符串在一矩形框内从无到有,从右至左移动,完全从框内移出后,又从
; 右至左移动,直到有任意键按下,停止字符串动画显示返回到主菜单。
Dynamic_Disp Proc Near
call Rectangler ;画矩形框
mov bx,Str_Lenth ;字符串长度
mov Buffer[bx][2],20h
@@Moving_0: mov di,Screen_Buffer[2]
dec di
dec di
mov cx,Str_Lenth ;字符串长度
mov bx,cx
inc bx
@@Moving_1: lea si,Buffer[2]
mov ah,14 ;字符显示属性:黄色字符
push cx
mov dx,cx
mov cx,bx
sub cx,dx
call Disp_Str ;写字符串到显示缓冲区
dec di
dec di
pop cx
call Delay ;延时
mov ah,1
int 16h
jz $+3
ret
loop @@Moving_1
mov cx,Str_Lenth ;字符串长度
inc cx
mov bx,cx
@@Moving_2: lea si,Buffer[2]
mov ah,14 ;字符显示属性:黄色字符
mov cx,bx
call Disp_Str ;写字符串到显示缓冲区
call Delay ;延时
mov ah,1
int 16h
jz $+3
ret
dec di
dec di
cmp di,Screen_Buffer
jae @@Moving_2
inc di
inc di
lea si,Buffer[3]
mov cx,Str_Lenth ;字符串长度
@@Moving_3: push cx
push si
mov ah,14 ;字符显示属性:黄色字符
call Disp_Str ;写字符串到显示缓冲区
pop si
inc si
pop cx
call Delay ;延时
mov ah,1
int 16h
jz $+3
ret
loop @@Moving_3
jmp @@Moving_0
ret
Dynamic_Disp EndP
; -------------------------------------
Didas equ 1 ;延时1个嘀嗒时间
Prompt_Menu db 4 dup(10)
db 35 dup(20h),'Main Menu',13,10
db 30 dup(20h),201,17 dup(205),187,13,10
db 30 dup(20h),186,' Input a String ',186,13,10
db 30 dup(20h),186,' Dynamic Display ',186,13,10
db 30 dup(20h),186,' Return to DOS ',186,13,10
db 30 dup(20h),200,17 dup(205),188,13,10
db 32 dup(20h),'Choice(I,D,R):$'
Cursor_Tmp dw ?
Str_Lenth dw ? ;字符串字符数
Screen_Buffer dw 2 dup(?) ;显示缓冲区左右边界地址
Prompt_Str db 13,10,10,'Please input a string:$'
Press_Key db 7,13,12 dup(10),'The complated. Press any key to exit...$'
Start: push cs
pop ds ;使数据段与代码段同段
push cs
pop es ;使附加段与代码段同段
mov ax,3 ;设置25*80字符显示方式
int 10h
Output Prompt_Menu ;显示主菜单
xor bx,bx
mov ah,3
int 10h
mov Cursor_Tmp,dx
mov ax,0b800h
mov es,ax ;设置字符显示方式缓冲区段地址
mov di,160*4+35*2+1
mov al,13 ;LightMagenta
mov cx,10
cld
Attribute: stosb
inc di
loop Attribute
mov di,160*6+32*2+1
stosb
add di,159
stosb
add di,159
stosb
mov di,160*10+39*2+1
stosb
add di,3
stosb
add di,3
stosb
Choice_Func: mov dx,Cursor_Tmp
xor bx,bx
mov ah,2
int 10h
mov ah,1
int 21h
and al,0dfh
cmp al,'R'
jz Exit_Proc
cmp al,'I'
jnz $+7
call Input_String
jmp Choice_Func
cmp al,'D'
jnz Choice_Func
call Dynamic_Disp
jmp Choice_Func
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
mov ah,4ch ;结束程序
int 21h
Buffer db 25 ;输入字符串缓冲区
Code ENDS
END Start ;编译到此结束
第2个回答 2010-01-04
给你大概写写吧,毕竟学习的事情还是要自己搞定的。
完成软件的关键技术“1,使用了dos的0AH号功能(字符串输入)、2号功能(字符显示)等,如果想显示彩色字符,也可以在此基础上加以调整,包括调用BIOS中断;2,利用子程序反复调用,减少代码量,增加程序可读性;3,矩形框采用ASCII字符绘制,提高程序效率,当然同样可以再次基础上加以调整,调用BIOS中断在绘图模式下绘制”。
程序设计流程图仅表示大概意思
清屏幕→屏幕初始化→绘制矩形框→动画显示提示语等→初始菜单待输入字符串或者退出命令→绘制矩形框→以多个字符动画显示字符串→等待输入→根据输入返回到初始菜单
完成软件的关键技术“1,使用了dos的0AH号功能(字符串输入)、2号功能(字符显示)等,如果想显示彩色字符,也可以在此基础上加以调整,包括调用BIOS中断;2,利用子程序反复调用,减少代码量,增加程序可读性;3,矩形框采用ASCII字符绘制,提高程序效率,当然同样可以再次基础上加以调整,调用BIOS中断在绘图模式下绘制”。
程序设计流程图仅表示大概意思
清屏幕→屏幕初始化→绘制矩形框→动画显示提示语等→初始菜单待输入字符串或者退出命令→绘制矩形框→以多个字符动画显示字符串→等待输入→根据输入返回到初始菜单
第3个回答 2010-01-02
很麻烦,手头没有protel,画不了图,简单跟你说下思路,上了课也应该多少明白点的……
使用74161异步4位计数器做个8位的计数器,然后输入时钟CLK,DA0832使用直通模式,接在8位计数器上,随着计数输出电压会逐渐升高,如果是锯齿波就计数多少然后清零就可以了,有了锯齿波,正弦波和方波均可以用运放使用模拟的方法实现
使用74161异步4位计数器做个8位的计数器,然后输入时钟CLK,DA0832使用直通模式,接在8位计数器上,随着计数输出电压会逐渐升高,如果是锯齿波就计数多少然后清零就可以了,有了锯齿波,正弦波和方波均可以用运放使用模拟的方法实现
第4个回答 2015-05-17
题目: 字符串动画显示
设计内容要求:
1、菜单
内容包括:①输入字符串;②字符串动画显示;③退出。
2、输入字符串
选择该项后,可以输入一个字符串。该字符串即为动画显示时所显示的字符串。
3、字符串动画显示
所显示字符串在一矩形框内从无到有,从右至左移动,完全从框内移出后,又从右至左移动,直到有任意键按下,停止字符串动画显示返回到主菜单。
4、在主菜单中选择退出项,则结束程序返回DOS。
内容要求:以下几项必不可少:
1、完成软件的关键技术(如:使用了什么DOS功能)
2、程序设计流程图,如有必要可有多个,可包括主程序流程图,关键部分程序流
设计内容要求:
1、菜单
内容包括:①输入字符串;②字符串动画显示;③退出。
2、输入字符串
选择该项后,可以输入一个字符串。该字符串即为动画显示时所显示的字符串。
3、字符串动画显示
所显示字符串在一矩形框内从无到有,从右至左移动,完全从框内移出后,又从右至左移动,直到有任意键按下,停止字符串动画显示返回到主菜单。
4、在主菜单中选择退出项,则结束程序返回DOS。
内容要求:以下几项必不可少:
1、完成软件的关键技术(如:使用了什么DOS功能)
2、程序设计流程图,如有必要可有多个,可包括主程序流程图,关键部分程序流