键盘控制发声的程序,发出6,7,1,2,3,4,5,6,7,i,十个音调

根据《IBM—PC汇编语言程序设计》的八度音程的钢琴程序,整理,
能发出6,7,1,2,3,4,5,6,7,i,十个音调
DATAS SEGMENT para 'data'
table dw 494  ;0,7.
      dw 524  ;1
      dw 588  ;2
      dw 660  ;3
      dw 698  ;4
      dw 784  ;5
      dw 880  ;6
      dw 988  ;7
      dw 1048 ;8,i
      dw 440  ;9,6.
message db 'Paly the piano with number key(1-9) ,exit with space bar!',13,10,'$'
DATAS ENDS
STACKS SEGMENT  para  'stack'
      db 64 dup('stack...')
STACKS ENDS
CODES SEGMENT
main proc far
     ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
     MOV   AX,DATAS
     MOV   DS,AX
     mov   ah,9
     mov   dx,offset message
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一段简单的汇编语言程序,使用8255芯片控制蜂鸣器间断发声,并模拟救护车发声: ``` ORG 100H MOV AL, 10000000B ; 初始化控制字节,将PPI口A设为输出 OUT 61H, AL ; 将控制字节写入8255芯片 MOV CX, 1000 ; 设置计数器初值,用于控制发声时间 MOV DX, 40H ; 初始化计数器端口 MOV AL, 10110110B ; 设置计数器工作模式,2分频 OUT DX, AL ; 写入计数器工作模式 MOV DX, 61H ; 初始化8255口B IN AL, DX ; 将8255口B的值读入AL OR AL, 00000011B ; 设置蜂鸣器控制位,使其发声 OUT DX, AL ; 将8255口B的值写入,使蜂鸣器发声 WAIT: LOOP WAIT ; 等待一段时间 MOV DX, 61H ; 重新初始化8255口B IN AL, DX ; 将8255口B的值读入AL AND AL, 11111100B ; 清除蜂鸣器控制位,使其停止发声 OUT DX, AL ; 将8255口B的值写入,使蜂鸣器停止发声 MOV CX, 500 ; 设置计数器初值,用于模拟救护车发声 MOV DX, 40H ; 重新初始化计数器端口 MOV AL, 10110110B ; 设置计数器工作模式,2分频 OUT DX, AL ; 写入计数器工作模式 MOV DX, 61H ; 重新初始化8255口B IN AL, DX ; 将8255口B的值读入AL OR AL, 00000011B ; 设置蜂鸣器控制位,使其发声 OUT DX, AL ; 将8255口B的值写入,使蜂鸣器发声 WAIT2: LOOP WAIT2 ; 等待一段时间 MOV DX, 61H ; 重新初始化8255口B IN AL, DX ; 将8255口B的值读入AL AND AL, 11111100B ; 清除蜂鸣器控制位,使其停止发声 OUT DX, AL ; 将8255口B的值写入,使蜂鸣器停止发声 JMP WAIT ; 循环,使蜂鸣器间断发声 END ``` 请注意,这段程序是针对特定的硬件设备和操作系统编写的,并且只是一个简单的示例程序,不一定适用于所有情况。如果您需要编写类似的程序,请务必根据具体情况进行适当修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值