汇编_电子琴_带界面_带时钟_源程序
2009-04-24 09:12
381 查看
汇编_电子琴_带界面_带时钟_源程序
data segment
Freq dw 262,294,330,347,392,440,494,523 ;频率有改动
Tips db 20h,0eh,' Please Input 1-8,Esc to Quit: ',0eh,20h
count equ $-Tips
X1 dw (10*80+10)*2
X2 dw (10*80+70)*2
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,3
int 10h ;置03H文本显示模式
mov ax,0b800h
mov es,ax
mov di,(6*80+22)*2 ;找显示位置
;(行号*80+列号)*2
lea si,Tips
cld
mov cx,count
TS:
lodsb ;提示
stosb
mov al,1ah ;字符颜色
stosb
loop TS
call clear ;局部清屏
mov dh,10 ;DH=行
mov dl,70 ;DL=列
mov ah,2
int 10h ;定位光标
Q1:
mov ah,1 ;测试键盘
int 16h
jnz @1
call time ;显示时间
jmp Q1
@1:
mov ah,0
int 16h ;接收一字符
cmp al,1bh
jz quit
cmp al,'1';数据校验
jb Q1
cmp al,'8'
ja Q1
call move ;左卷
mov di,X2
mov es:[di],al;显示有效键
and ax,0fh
dec al
shl al,1 ;求表内偏移
lea si,Freq ;定位表首
add si,ax
call sound ;奏乐
jmp Q1 ;转输入等待
quit:
mov ah,4ch ;退出
int 21h
sound: ;演奏子程序
mov al,0b6h
out 43h,al ;设定方波模式
mov dx,14h ;定时器发音常数
mov ax,4f38h
div word ptr [si] ;频率
out 42h,al ;输出低位
mov al,ah
out 42h,al ;输出高位
in al,61h ;读控制字
mov ah,al
or al,03h
out 61h,al ;开启扬声器
mov bx,3600;延时1秒
R1:mov cx,2801H
loop $
dec bx
jnz R1
mov al,ah ;关闭扬声器
out 61h,al
ret
clear:;局部清屏
mov di,X1
inc di
mov al,0E0h
mov cx,61
qp:mov es:[di],al
inc di
inc di
loop qp
ret
move: ;左卷子程序
mov bp,ax
mov dx,ds
mov si,X1
mov di,si
add si,2
mov ax,es
mov ds,ax
cld
mov cx,61
gp:
lodsb
stosb
inc si
inc di
loop gp
mov ds,dx
mov ax,bp
ret
Time: ;时间显示子程序
mov ax,0b800h
mov es,ax
mov di,(14*80+32)*2
push di
mov al,10
rdate:
dec al
cmp al,7
jb rtime
call disp
add di,6
jmp short rdate
rtime:
sub al,2
cmp al,0feh
je sign
call disp
add di,6
jmp short rtime
sign:
pop di
add di,4
mov byte ptr es:[di],'-'
mov byte ptr es:[di+1],0ECh
add di,6
mov byte ptr es:[di],'-'
mov byte ptr es:[di+1],0ECh
add di,12
mov byte ptr es:[di-6],20H
mov byte ptr es:[di-5],0ECh
mov byte ptr es:[di],':'
mov byte ptr es:[di+1],0ECh
add di,6
mov byte ptr es:[di],':'
mov byte ptr es:[di+1],0ECh
ret
disp:
push ax
push cx
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,0fh
add ax,3030h
mov byte ptr es:[di],ah
mov byte ptr es:[di+1],0ECh
mov byte ptr es:[di+2],al
mov byte ptr es:[di+3],0ECh
pop cx
pop ax
ret
code ends
end start
data segment
Freq dw 262,294,330,347,392,440,494,523 ;频率有改动
Tips db 20h,0eh,' Please Input 1-8,Esc to Quit: ',0eh,20h
count equ $-Tips
X1 dw (10*80+10)*2
X2 dw (10*80+70)*2
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,3
int 10h ;置03H文本显示模式
mov ax,0b800h
mov es,ax
mov di,(6*80+22)*2 ;找显示位置
;(行号*80+列号)*2
lea si,Tips
cld
mov cx,count
TS:
lodsb ;提示
stosb
mov al,1ah ;字符颜色
stosb
loop TS
call clear ;局部清屏
mov dh,10 ;DH=行
mov dl,70 ;DL=列
mov ah,2
int 10h ;定位光标
Q1:
mov ah,1 ;测试键盘
int 16h
jnz @1
call time ;显示时间
jmp Q1
@1:
mov ah,0
int 16h ;接收一字符
cmp al,1bh
jz quit
cmp al,'1';数据校验
jb Q1
cmp al,'8'
ja Q1
call move ;左卷
mov di,X2
mov es:[di],al;显示有效键
and ax,0fh
dec al
shl al,1 ;求表内偏移
lea si,Freq ;定位表首
add si,ax
call sound ;奏乐
jmp Q1 ;转输入等待
quit:
mov ah,4ch ;退出
int 21h
sound: ;演奏子程序
mov al,0b6h
out 43h,al ;设定方波模式
mov dx,14h ;定时器发音常数
mov ax,4f38h
div word ptr [si] ;频率
out 42h,al ;输出低位
mov al,ah
out 42h,al ;输出高位
in al,61h ;读控制字
mov ah,al
or al,03h
out 61h,al ;开启扬声器
mov bx,3600;延时1秒
R1:mov cx,2801H
loop $
dec bx
jnz R1
mov al,ah ;关闭扬声器
out 61h,al
ret
clear:;局部清屏
mov di,X1
inc di
mov al,0E0h
mov cx,61
qp:mov es:[di],al
inc di
inc di
loop qp
ret
move: ;左卷子程序
mov bp,ax
mov dx,ds
mov si,X1
mov di,si
add si,2
mov ax,es
mov ds,ax
cld
mov cx,61
gp:
lodsb
stosb
inc si
inc di
loop gp
mov ds,dx
mov ax,bp
ret
Time: ;时间显示子程序
mov ax,0b800h
mov es,ax
mov di,(14*80+32)*2
push di
mov al,10
rdate:
dec al
cmp al,7
jb rtime
call disp
add di,6
jmp short rdate
rtime:
sub al,2
cmp al,0feh
je sign
call disp
add di,6
jmp short rtime
sign:
pop di
add di,4
mov byte ptr es:[di],'-'
mov byte ptr es:[di+1],0ECh
add di,6
mov byte ptr es:[di],'-'
mov byte ptr es:[di+1],0ECh
add di,12
mov byte ptr es:[di-6],20H
mov byte ptr es:[di-5],0ECh
mov byte ptr es:[di],':'
mov byte ptr es:[di+1],0ECh
add di,6
mov byte ptr es:[di],':'
mov byte ptr es:[di+1],0ECh
ret
disp:
push ax
push cx
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,0fh
add ax,3030h
mov byte ptr es:[di],ah
mov byte ptr es:[di+1],0ECh
mov byte ptr es:[di+2],al
mov byte ptr es:[di+3],0ECh
pop cx
pop ax
ret
code ends
end start
相关文章推荐
- win32汇编实现一个时钟
- 汇编语言入门:源程序(一)
- 【汇编】TSR内存驻留程序实现与删除及热键设置——以实现时钟为例
- 基于汇编语言的电子琴设计(5)
- 基于汇编语言的电子琴设计(2)
- 16*16精确字幕时钟汇编代码
- [Intel汇编-MASM]源程序的组成以及编译调试
- 汇编课程设计 时钟
- 汇编语言(学习笔记----源程序)
- 用普通IO驱动LCD的控制方法-松瀚汇编源程序
- 图形界面 时钟表盘
- 窗口界面AVR反汇编工具
- VC++界面编程之--获取父窗口背景画刷(附带时钟控件)
- 源程序、目标程序、汇编程序、编译程序、解释程序
- 汇编源程序命名问题
- [汇编] 在屏幕中央显示时钟
- 170322 PyQt-后台界面设置、WidgetList的使用 汇编5.1
- 基于汇编语言的电子琴设计(4)
- VxWorks中高精度实时时钟的实现及C语言汇编混合编程
- 5.S5PV210 时钟初始化汇编代码