计算机打音乐两只老虎,两只老虎(音乐、汇编程序)

/*

程序效果:蜂鸣器发出两只老虎的音律

*/

ORG 0000H

AJMP START

ORG 000BH

AJMP TIM0

ORG 0030H

START:     MOV TMOD,#01H //工作在方式1

MOV IE,#82H  //开总控和分控

START0:    MOV 30H,#00H   //清零

NEXT:           MOV A,30H   //清零

MOV DPTR,#TABLE  //赋表首地址

MOVC A,@A+DPTR

MOV R2,A   //暂存A的值

JZ END0 //判断A是否为0

ANL A,#0FH    //屏蔽A的高半

MOV R5,A  //把A屏蔽高半的值赋给R5

MOV A,R2  //恢复A的原值

SWAP A  //高低位互换

ANL A,#0FH  //屏蔽原来A的高半

JNZ SING //判断原来A的高半是否为0

CLR TR0   //是0,则停止计时

SETB P2.0   //关闭蜂鸣器

LJMP D1   //转到标号为D1的地方

//原来A的高半不为零,开始唱歌

SING:           DEC A   //¥原来A的高半减1,用于读取相应的音律

MOV 22H,A //¥保存现在A的值

RL A    //¥左循环移位

MOV DPTR,#TABLE1 //赋表首地址

MOVC A,@A+DPTR

MOV TH0,A    //赋给TH0用于计时,用于控制蜂鸣器响的时间

MOV 21H,A //保存A的值

MOV A,22H //*

RL A //左循环移位

INC A  //加1,根据表的存储顺序

MOVC A,@A+DPTR

MOV TL0,A //用于把低八位赋给TL0,用于计时

MOV 20H,A  //*

SETB TR0  //启动定时器

D1:               LCALL DELAY   //调用延时子程序,能够听到该音律

INC 30H //加1

LJMP NEXT

END0:           CLR TR0   //停止计时

JMP START0  //无限循环

//定时器0

TIM0:            PUSH ACC //保护A的值

PUSH PSW

MOV TL0,20H  //赋初值

MOV TH0,21H

CPL P2.0 //给蜂鸣器高低电平,使蜂鸣器发声

POP PSW  //弹出相应的值

POP ACC

RETI //返回

//延时时间大约为:100ms=0.1s

DELAY:         MOV R4,#187

D3:                MOV R3,#248

DJNZ R3,$

DJNZ R4,D3

DJNZ R5,DELAY //R5代表节拍

RET

TABLE1:       DW 63745,63969,64140,64215 //$    ;七个音符

DW 64360,64489,64603  //$  他们之间存在一种对应关系

TABLE:    DB 14H,24H,34H,14H,01H  //$

DB 14H,24H,34H,14H,01H  //$

DB 34H,44H,54H,02H,34H,44H,54H,02H //$

DB 52H,62H,52H,42H,34H,14H,01H,52H,62H,52H,42H,34H,14H,02H //$

DB 14H,54H,14H,02H,14H,54H,14H,08H,00H //$

END

/*

注:程序源于查老师

完整程序:http://www.51hei.com/ziliao/file/lzlhasm.rar

*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值