⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 warm.asm

📁 汇编语言课程设计:生急速上滑报警音响
💻 ASM
字号:
;*****************************产生滑音***************************************
;****************************************************************************
DATA     SEGMENT
OUTMSG    DB        0DH,0AH               ;定义菜单 
          DB        '*******THIS IS A GLIDE PROGREAM*******',0DH,0AH 
          DB        0DH,0AH
          DB        0DH,0AH
          DB        '***********WELCOME TO HEAR!***********',0DH,0AH
          DB        0DH,0AH
          DB        0DH,0AH
          DB        0DH,0AH
          DB        'PLEASE SELECET:',0DH,0AH 
          DB        0DH,0AH
          DB        0DH,0AH
          DB        'R---RISE',0DH,0AH 
          DB        0DH,0AH
          DB        'F---FALL',0DH,0AH
          DB        0DH,0AH
          DB        'Q---EXIT',0DH,0AH 
          DB        0DH,0AH
          DB        'Your choice:','$'
freq1     DB 6,?,6 dup(?)
freq2     DB 6,?,6 dup(?)
Y         DW ? 
X         DW ? 
time      DB 6,?,6 dup(?)
RATE      DB 6,?,6 DUP(?)
inputrr   DB 0DH,0AH ,'please input RANGE of frequent rising:','$'
inputIF   DB 0DH,0AH ,'please input INITIAL frequent :','$'
inputrf   DB 0DH,0AH ,'please input RANGE of frequent falling:','$'
inputFF   DB 0DH,0AH ,'please input FINAL frequent :','$'
inputT    DB 0DH,0AH ,'please input duration time:','$'
error     DB  0DH,0AH ,'Input error!Please selecet again:','$' 
DIS1      DB 0DH,0AH,'RISE','$' 
DIS2      DB 0DH,0AH,'FALL','$'     
DATA      ENDS
;******************************************************************************
CODE      SEGMENT    
          ASSUME    CS:CODE,DS:DATA
MAIN      PROC      FAR 
START:    mov       AX,data
          mov       DS,AX
          MOV       AH,0             
          MOV       AL,04
          INT       10H
          MOV       AH,0BH            ;设置图形方式显示下的背景色
          MOV       BH,0
          MOV       BL,5          
          INT       10H
          MOV       AH,0BH            ;设置彩色组 
          MOV       BH,6
          MOV       BL,2
          INT       10H
;***********定义一个宏***********************************
;显示输入初始频率,以及脉冲持续时间,声音上滑和下滑的幅度的提示信息
;输入相关信息
INPUT   macro   b,c
          lea       DX,b
          mov       AH,09
          int       21h
          mov       AH,0AH                       
          lea       DX,c
          int       21h
          lea       SI,c
 endm
;宏定义结束
;********************************************************
          LEA       DX,OUTMSG               ;显示菜单
          MOV       AH,09
          INT       21H       
          MOV       AH,01H 
          INT       21H                     ;等待输入选择 
          CMP       AL,'Q' 
          JE        EXIT
          CMP       AL,'R'                    
          JE        RISE                    ;输入字符等于'R'执行上滑音的过程
          CMP       AL,'F' 
          JE        FALL                    ;输入字符等于'F'执行上滑音的过程
          lea       dx,error
          mov       ah,09h
          int       21h
          JMP       START
EXIT:     MOV       AX,4C00H                ;返回DOS 
          INT       21H                          
MAIN      ENDP                              
;主过程结束 
;********************************************************************
;下滑音过程
FALL  :   
          INPUT    inputIf,freq1           ;调用宏
          CALL      CHANGE
          MOV       DI,DX                   ;设定频率初值 
          CALL      CHANGE1
          mov       Y,Dx                    ;设定频率终止值  
          INPUT    inputT,TIME
          CALL      CHANGE 
          MOV       X,DX                    ;设定脉冲持续时间
          INPUT    inputRF,RATE
          CALL      CHANGE
          MOV       SI,DX                   ;设定频率下滑的幅度
LOOP1:    
          PUSH      DI
	  CALL      SOUND                   ;输出频率 
          lea       dx,DIS2
          mov       ah,09h
          int       21h
          POP       DI 
          sub       di,si                   ;频率降低
          CMP       di,Y 
          JAE       LOOP1                   ;循环输出 
          JMP       START                   ;循环结束无条件跳转到开始过程,等待下一次输入
;下滑音过程结束  
;********************************************************************
;上滑音过程
RISE:     
          INPUT    inputIF,freq1            ;调用宏
          CALL      CHANGE
          MOV       DI,DX                    ;设定频率初值 
          CALL      CHANGE1
          mov       Y,Dx                     ;设定频率终止值 
          INPUT    inputT,TIME
          CALL      CHANGE                 
          MOV       X,DX                     ;设定脉冲持续时间
          INPUT    inputRR,RATE
          CALL      CHANGE
          mov       SI,DX                    ;设定频率上滑的幅度
LOOP2:   
          push      DI
          CALL      SOUND                    ;输出频率 
          lea       DX,DIS1
          mov       AH,09h
          int       21h
          pop       DI
          add       DI,SI                    ;频率升高 
          CMP       DI,Y                     ;是否到预定频率终止值
          JBE        LOOP2                    ;若未到,循环输出 
          JMP       START                    ;循环结束无条件跳转到开始过程,等待下一次输入
;上滑音过程结束
;******************************************************************** 
; 发声子程序,利用定时器产生声音  
SOUND proc near
       
          MOV       BX,X
          mov       al,10110110B             ;位组合格式:通道2,两字节计数,模式3 ,二进制码                                                                                         
          out       43h,AL                   ;幻数送方式寄存器
          mov       DX,12h   
          mov       AX,34Dch         
          div       DI                       ;(DI)=频率
          out       42h,AL                   ; 频率计数值送通道2           
          mov       AL,AH 
          out       42h,AL
          in        AL,61h
          mov       AH,al             
          or        AL,3              
          out       61h,AL                   ;接通扬声器
wait1:
          mov       CX,0FFFFH                ;特定音长的计数值
delay:                                     
          loop      delay                    ;延时循环
          dec       BX                       ;(BX)=特定音长的倍数值
          jnz       wait1
          mov       AL,AH            
          out       61h,AL                   ;关闭扬声器
          ret
SOUND endp
;发声子程序结束返回到滑音过程相应位置
;**************************************************************************
;数制转换子程序,0~9 ASCII码转换成十进制数字 
CHANGE    PROC                   
          mov      AL,[si+2]
          SUB      AL,30H
          mov      BL,125
          mul      BL
          MOV      BX,AX
          MOV      CL,6
          SHL      AX,CL
          MOV      CL,4
          SHL      BX,CL
          ADD      AX,BX                    ;(AX)=十进制数的万位 
          PUSH     AX                        
          mov      AL,[si+3]
          SUB      AL,30H
          mov      BL,125
          mul      BL
          MOV      BX,AX
          MOV      CL,3
          SHL      AX,CL                    ;(AX)=十进制数的千位
          PUSH     AX                        
          mov      AL,[si+4]
          SUB      AL,30H
          mov      BL,100
          mul      BL                       ;(AX)=十进制数的百位
          PUSH     AX                         
          mov      AL,[si+5]
          SUB      AL,30H
          mov      BL,10
          mul      BL                       ;(AX)=十进制数的十位 
          PUSH     AX                        
          mov      AL,[si+6]
          SUB      AL,30H 
          CBW                               ;(AX)=十进制数的个位 
          mov      DX,AX
          pop      AX
          ADD      DX,AX
          pop      AX
          ADD      DX,AX
          pop      AX
          ADD      DX,AX
          pop      AX
          ADD      DX,AX                    ;(DX)=十进制数
          RET   
 CHANGE ENDP
;***************************************************************************
;键入终止频率的值,并转换为十进制子程序
CHANGE1  proc          
          lea      DX,inputff
          mov      AH,09
          int      21h
          mov      AH,0Ah                        
          lea      DX,freq2
          int      21h
          lea      SI,freq2
          call     change
          ret
change1 endp
;子程序结束
;*****************************
CODE      ENDS 
          END      start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -