蜂鸣器奏乐-多种音乐分享

大小:0.1 MB 人气: 2017-09-06 需要积分:0

1、蜂鸣器奏乐(祝你平安)

ORG 0000H

LJMP START

ORG 000BH

INC 20H ;中断服务,中断计数器加1

MOV TH0,#0D8H

MOV TL0,#0EFH ;12M晶振,形成10毫秒中断

RETI

START:

MOV SP,#50H

MOV TH0,#0D8H

MOV TL0,#0EFH

MOV TMOD,#01H

MOV IE,#82H

MUSIC0:

NOP

MOV DPTR,#DAT ;表头地址送DPTR

MOV 20H,#00H ;中断计数器清0

MOV B,#00H ;表序号清0

MUSIC1:

NOP

CLR A

MOVC A,@A+DPTR ;查表取代码

JZ END0 ;是00H,则结束

CJNE A,#0FFH,MUSIC5

LJMP MUSIC3

MUSIC5:

NOP

MOV R6,A

INC DPTR

MOV A,B

MOVC A,@A+DPTR ;取节拍代码送R7

MOV R7,A

SETB TR0 ;启动计数

MUSIC2:

NOP

CPL P3.7

MOV A,R6

MOV R3,A

LCALL DEL

MOV A,R7

CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?

;不等,则继续循环

MOV 20H,#00H ;等于,则取下一代码

INC DPTR

; INC B

LJMP MUSIC1

MUSIC3:

NOP

CLR TR0 ;休止100毫秒

MOV R2,#0DH

MUSIC4:

NOP

MOV R3,#0FFH

LCALL DEL

DJNZ R2,MUSIC4

INC DPTR

LJMP MUSIC1

END0:

NOP

MOV R2,#64H ;歌曲结束,延时1秒后继续

MUSIC6:

MOV R3,#00H

LCALL DEL

DJNZ R2,MUSIC6

LJMP MUSIC0

DEL:

NOP

DEL3:

MOV R4,#02H

DEL4:

NOP

DJNZ R4,DEL4

NOP

DJNZ R3,DEL3

RET

NOP

DAT:

db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h

db 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h

db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h

db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h

db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h

db 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h

db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h

db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h

db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h

db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h

db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h

db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h

db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h

db 20h,10h,2bh,10h,26h,30h,30h,80h,00H

END

2、蜂鸣器奏乐(八月桂花香)

;**********************************************************

ORG 0000H

LJMP START

ORG 000BH             ;中断入口

INC 20H               ;中断服务程序,中断计数器加1

MOV TH0,#0D8H

MOV TL0,#0EFH         ;12M晶振,形成10毫秒中断

RETI

START:

MOV SP,#50H

MOV TH0,#0D8H

MOV TL0,#0EFH

MOV TMOD,#01H

MOV IE,#82H

MUSIC0:

NOP

MOV DPTR,#DAT        ;表头地址送DPTR

MOV 20H,#00H         ;中断计数器清0

MOV B,#00H           ;表序号清0

MUSIC1:

NOP

CLR A

MOVC A,@A+DPTR       ;查表取代码

JZ END0              ;是00H,则结束

CJNE A,#0FFH,MUSIC5

LJMP MUSIC3

MUSIC5:

NOP

MOV R6,A

INC DPTR

MOV A,B

MOVC A,@A+DPTR       ;取节拍代码送R7

MOV R7,A

SETB TR0             ;启动计数

MUSIC2:

NOP

CPL P3.7

MOV A,R6

MOV R3,A

CPL A

MOV P1,A             ;显示(修改者加入的显示)

CPL A

LCALL DEL

MOV A,R7

CJNE A,20H,MUSIC2    ;中断计数器(20H)=R7否?

;不等,则继续循环

MOV 20H,#00H         ;等于,则取下一代码

INC DPTR

LJMP MUSIC1

MUSIC3:

NOP

CLR TR0              ;休止100毫秒

MOV R2,#0DH

MUSIC4:

NOP

MOV R3,#0FFH

LCALL DEL

DJNZ R2,MUSIC4

INC DPTR

LJMP MUSIC1

END0:

NOP

MOV R2,#64H          ;歌曲结束,延时1秒后继续

MUSIC6:

MOV R3,#00H

LCALL DEL

DJNZ R2,MUSIC6

LJMP MUSIC0

DEL:

NOP

DEL3:

MOV R4,#05H

DEL4:

NOP

DJNZ R4,DEL4

NOP

DJNZ R3,DEL3

RET

DAT:

DB 18H, 30H, 1CH, 10H

DB 20H, 40H, 1CH, 10H

DB 18H, 10H, 20H, 10H

DB 1CH, 10H, 18H, 40H

DB 1CH, 20H, 20H, 20H

DB 1CH, 20H, 18H, 20H

DB 20H, 80H, 0FFH,20H

DB 30H, 1CH, 10H, 18H

DB 20H, 15H, 20H, 1CH

DB 20H, 20H, 20H, 26H

DB 40H, 20H, 20H, 2BH

DB 20H, 26H, 20H, 20H

DB 20H, 30H, 80H, 0FFH

DB 20H, 20H, 1CH, 10H

DB 18H, 10H, 20H, 20H

DB 26H, 20H, 2BH, 20H

DB 30H, 20H, 2BH, 40H

DB 20H, 20H, 1CH, 10H

DB 18H, 10H, 20H, 20H

DB 26H, 20H, 2BH, 20H

DB 30H, 20H, 2BH, 40H

DB 20H, 30H, 1CH, 10H

DB 18H, 20H, 15H, 20H

DB 1CH, 20H, 20H, 20H

DB 26H, 40H, 20H, 20H

DB 2BH, 20H, 26H, 20H

DB 20H, 20H, 30H, 80H

DB 20H, 30H, 1CH, 10H

DB 20H, 10H, 1CH, 10H

DB 20H, 20H, 26H, 20H

DB 2BH, 20H, 30H, 20H

DB 2BH, 40H, 20H, 15H

DB 1FH, 05H, 20H, 10H

DB 1CH, 10H, 20H, 20H

DB 26H, 20H, 2BH, 20H

DB 30H, 20H, 2BH, 40H

DB 20H, 30H, 1CH, 10H

DB 18H, 20H, 15H, 20H

DB 1CH, 20H, 20H, 20H

DB 26H, 40H, 20H, 20H

DB 2BH, 20H, 26H, 20H

DB 20H, 20H, 30H, 30H

DB 20H, 30H, 1CH, 10H

DB 18H, 40H, 1CH, 20H

DB 20H, 20H, 26H, 40H

DB 13H, 60H, 18H, 20H

DB 15H, 40H, 13H, 40H

DB 18H, 80H, 00H

end

3、蜂鸣器奏乐(生日快乐)

;本程序实现蜂鸣器演奏歌曲功能

;乐曲名称:生日快乐

;///

BUZZER EQU P3.7

org 0000h  ;主程序起始地址

ajmp main  ;跳至主程序

org 000bh  ;TImer0中断起始地址

jmp TIm0  ;跳至timer0中断子程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

org 0030h

main:

mov tmod,#01h ;设timer0在MODE1

mov ie,#82h  ;中断使能

start0:

mov 30h,#00h ;取简谱码指针

next: mov a,30h  ;简谱码指针载入A

mov dptr,#table ;至table取简谱码

movc a,@a+dptr

mov r2,a  ;取到的简谱码暂存于R2

jz end0  ;是否取到00(结束码)?

anl a,#0fh  ;不是,则取低4位(节拍码)

mov r5,a  ;将节拍码存入R5

mov a,r2  ;将取到的简谱码再载入A

swap a  ;高低四位交换

anl a,#0fh  ;取低四位(音符码)

jnz sing  ;取到的音符码是否为零?

clr tr0  ;是,则不发音

jmp d1

sing: dec a  ;取到的音符码减1(不含0).

mov 22h,a  ;存入(22H).

rl a  ;乘2

mov dptr,#table1 ;至table1取相对的高位字节计数值

movc a,@a+dptr

mov th0,a  ;取到的高位字节存入TH0

mov 21h,a  ;取到的高位字节存入(21H)

mov a,22h  ;再载入取的的音符码

rl a  ;乘2

inc a  ;加1

movc a,@a+dptr ;至table1取相对的低位字节计数值

mov tl0,a  ;取到的高位字节存入TL0

mov 20h,a           ;取到的高位字节存入(20H)

setb tr0  ;启动timer0

d1: call delay  ;基本单位时间1/4拍187毫秒

inc 30h  ;取简谱码指针加1

jmp next  ;取下一个码

end0: clr tr0  ;停止timer0

jmp start0  ;重复循环

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;time0中断服务子程序用来产生相应的音调脉冲频率。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

tim0:

push acc  ;将A的值暂存于堆栈

push psw  ;将psw的值暂存于堆栈

mov tl0,20h  ;重设计数值

mov th0,21h

cpl BUZZER  ;将蜂鸣器反相

pop psw  ;至堆栈取回psw的值

pop acc  ;至堆栈取回a的值

reti   ;返回主程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

delay: mov r7,#02h  ;187毫秒

d2: mov r4,#187

d3: mov r3,#248

djnz r3,$

djnz r4,d3

djnz r7,d2

djnz r5,delay ;决定节拍

ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

table1:

dw 64260,64400,64524,64580

dw 64684,64777,64820,64898

dw 64968,65030,65058,65110

dw 65157,65178,65217

table:

;1

db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h

;2

db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h

;3

db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h

;4

db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h,00

end

4、蜂鸣器奏乐

SPK EQU P3.7   ; 蜂鸣器所在端口

ORG 0000H

JMP START

START:

MOV R3,#00H

NEXT:

MOV A,R3

MOV DPTR,#TABLE

MOVC A,@A+DPTR

JZ START

MOV R7,A

INC R3

MOV A,R3

MOVC A,@A+DPTR

MOV R2,A

ACALL SONG

INC R3

SJMP NEXT

;===============================================================================

;===  歌曲播放子程序 ===

SONG:

MOV A,R2     ; 取出节拍

RL A

JNZ KEEP

MOV A,#01H

KEEP:

MOV R2,A

REPEAT:

ACALL EIGHTH

DJNZ R2,REPEAT

RET

;===============================================================================

;===  产生1/8拍延时子程序  ===

EIGHTH:

MOV A,R7     ; 查表取出廷时参数,保存到R4

MOV DPTR,#DELAY_T

MOVC A,@A+DPTR

MOV R4,A

MOV A,R7     ; 查表取出1/8拍周期数,保存到R5

MOV DPTR,#S_PARA

MOVC A,@A+DPTR

MOV R5,A

NEXTCYC:

ACALL SOUND

DJNZ R5,NEXTCYC

RET

;===============================================================================

;===  发声子程序 ===

SOUND:

SETB SPK

ACALL SDELAY

CLR SPK

ACALL SDELAY

RET

;===============================================================================

;===  延时子程序  ===

SDELAY:

MOV A,R4     ; 廷时值在R4内

MOV R0,A

XL2:

MOV R1,#03H

DL1:

NOP

DJNZ R1,DL1

DJNZ R0,XL2

RET

;===============================================================================

;===  1/8拍周期表  ===

S_PARA:

DS 1DH

DB 15H,16H,00

DB 19H,00H,1CH,00H,1FH,21H,00H,25H

DB 00H,29H,2CH,00H,31H,34H,37H,00H

DB 3EH,41H,00H,49H,00H,52H,57H,00H

DB 62H

;===============================================================================

;===  延时参数表  ===

DELAY_T:

DS 1DH

DB 7EH,77H,00H

DB 6AH,00H,5EH,00H,54H,4FH,00H,46H

DB 00H,3FH,3BH,00H,35H,32H,2FH,00H

DB 2AH,27H,00H,23H,00H,1FH,1DH,0C0H

DB 1AH

;===============================================================================

;===  歌曲表  ===

TABLE:

DW 2202H,2902H,2902H,2902H,2906H,2702H ;我从山中来

DW 2502H,2702H,2502H,2402H,2208H  ;带着兰花草

DW 2E02H,2E02H,2E02H,2E02H,2E06H,2C02H ;种在小园中

DW 2902H,2C02H,2D02H,2A02H,2908H  ;祈祷花开早

DW 2902H,2E02H,2E02H,2C02H,2906H,2702H ;一日看三回

DW 2502H,2702H,2502H,2402H,2206H,1D02H ;看得花时过

DW 1D02H,2502H,2502H,2402H,2206H,2902H ;兰花却依然

DW 2702H,2502H,2402H,2002H,2208H  ;苞也无一个

DW 0000H     ;

END

兰花草c语言编码蜂鸣器,蜂鸣器奏乐-多种音乐分享相关推荐

  1. 蜂鸣器发出兰花草c语言程序,兰花草源程序

    SPK EQU P3.7 ; 蜂鸣器所在端口 ORG 0000H LJMP START ORG 000BH LJMP TIM0 ORG 0030H START: MOV TMOD,#01H MOV I ...

  2. c语言中二进制用什么字母表示方法,看C语言编码转换--------负数的二进制表示方法...

    今天在看C语言编码转换时,既然对负数的二进制表示有些遗忘,查了下网上的资料,他们说的是个P!误人子弟!和大家讨论了下,贴出来已备在此遗忘: 假设有一个 int 类型的数,值为5,那么,我们知道它在计算 ...

  3. 来自 Google 的 R 语言编码风格指南

    来自 Google 的 R 语言编码风格指南 R 语言是一门主要用于统计计算和绘图的高级编程语言. 这份 R 语言编码风格指南旨在让我们的 R 代码更容易阅读.分享和检查. 以下规则系与 Google ...

  4. Java语言编码规范(1)

    Java语言编码规范 原文出处http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html 2 文件名(File Names) 这部分列出了常 ...

  5. c语言编码风格,讲嵌入式C语言编码风格.ppt

    讲嵌入式C语言编码风格 目 录 简介及说明 语言规则 1.基础 2.数据 3.说明与表达式 4.函数 5.内存及资源 6.源文件 风格指导 7.程序书写 8.命名 9.文档 简介及说明 正确性 易维护 ...

  6. c语言把一段编码注释,C语言编码规范——着重注意点整理

    C语言编码规范--着重注意点整理 发布时间:2018-05-26 21:50, 浏览次数:260 C语言编码规范--着重注意点整理 编码规范的目的: 保证不同背景和经历的开发同学可以良好的协同开发 保 ...

  7. 【转】嵌入式软件:C语言编码规范

    引  言 嵌入式系统是指以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能.可靠性.成本.体积和功耗严格要求的专门计算机系统.嵌入式技术并不是一个独立的学科,它是伴随着微电子技术和计算 ...

  8. 如何查看笔记本的语言编码_在编码笔记本电脑中寻找什么

    如何查看笔记本的语言编码 Did you just graduate from your coding bootcamp and now have to return your loaner lapt ...

  9. android国际化语言编码对照表

    android国际化语言编码对照表 (查询整理以备不时之需,以下内容均已附原文连接) 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-z ...

  10. 国际标准之语言编码 - ISO-639

    ISO-639-1是两个字母的语言编码,ISO-639-2和ISO-639-3是3个字母的编码. 在我们在软件配置或相关开发时需要对语言进行操作,作为参数或进行识别时,就需要用到这个语言编码了. IS ...

最新文章

  1. 马腾宇:AI 学界一颗冉冉升起的新星
  2. 一款Windows管理Linux的软件
  3. 设置timeout限制在爬虫中的运用
  4. abap的子程序参数 USING 和 CHANGING 使用问题
  5. 科大星云诗社动态20210522
  6. SDNU 1019.礼物(水题)
  7. iOS开发之UIApplication
  8. 实践中 XunSearch(讯搜)更新索引方案对比
  9. Springboot devtools热部署Mybatis报错:Could not load [mapper/]
  10. java关键字false_无聊,null,true,false是java关键字吗
  11. matlab中计算sinad,FFT频谱测试法Matlab代码
  12. excel随机抽取一个数据,抽奖
  13. 分享从零开始学习网络设备配置--2.1 交换机基本配置
  14. win10可以登录QQ微信 浏览器不能打开网页
  15. 判断听云是否正常嵌入及注意事项
  16. Ubuntu下使用“Windows徽标键+R”打开终端
  17. PHP计算一年有多少周,每周开始日期和结束日期
  18. py4j开发配置idea+python
  19. Windows 7钉子户
  20. 【论文笔记】AAAI2022多智能体强化学习论文五篇

热门文章

  1. 计算机网络技术知识点
  2. 普中28335开发攻略_DSP28335汇编教程
  3. 迅捷CAD格式转换器专业版
  4. 油猴脚本管理器的超详细下载安装使用教程—— 个性化浏览器
  5. 软件项目管理案例教程第4版课后习题第二章
  6. 国外动态住宅ip怎么使用?
  7. java opencv 之人脸识别
  8. ubuntu安装vasp_Ubuntu下p4vasp的安装
  9. java dateutils详解_java DateUtils
  10. 软件设计师历年真题(链接在文末)