兰花草c语言编码蜂鸣器,蜂鸣器奏乐-多种音乐分享
蜂鸣器奏乐-多种音乐分享
大小: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语言编码蜂鸣器,蜂鸣器奏乐-多种音乐分享相关推荐
- 蜂鸣器发出兰花草c语言程序,兰花草源程序
SPK EQU P3.7 ; 蜂鸣器所在端口 ORG 0000H LJMP START ORG 000BH LJMP TIM0 ORG 0030H START: MOV TMOD,#01H MOV I ...
- c语言中二进制用什么字母表示方法,看C语言编码转换--------负数的二进制表示方法...
今天在看C语言编码转换时,既然对负数的二进制表示有些遗忘,查了下网上的资料,他们说的是个P!误人子弟!和大家讨论了下,贴出来已备在此遗忘: 假设有一个 int 类型的数,值为5,那么,我们知道它在计算 ...
- 来自 Google 的 R 语言编码风格指南
来自 Google 的 R 语言编码风格指南 R 语言是一门主要用于统计计算和绘图的高级编程语言. 这份 R 语言编码风格指南旨在让我们的 R 代码更容易阅读.分享和检查. 以下规则系与 Google ...
- Java语言编码规范(1)
Java语言编码规范 原文出处http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html 2 文件名(File Names) 这部分列出了常 ...
- c语言编码风格,讲嵌入式C语言编码风格.ppt
讲嵌入式C语言编码风格 目 录 简介及说明 语言规则 1.基础 2.数据 3.说明与表达式 4.函数 5.内存及资源 6.源文件 风格指导 7.程序书写 8.命名 9.文档 简介及说明 正确性 易维护 ...
- c语言把一段编码注释,C语言编码规范——着重注意点整理
C语言编码规范--着重注意点整理 发布时间:2018-05-26 21:50, 浏览次数:260 C语言编码规范--着重注意点整理 编码规范的目的: 保证不同背景和经历的开发同学可以良好的协同开发 保 ...
- 【转】嵌入式软件:C语言编码规范
引 言 嵌入式系统是指以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能.可靠性.成本.体积和功耗严格要求的专门计算机系统.嵌入式技术并不是一个独立的学科,它是伴随着微电子技术和计算 ...
- 如何查看笔记本的语言编码_在编码笔记本电脑中寻找什么
如何查看笔记本的语言编码 Did you just graduate from your coding bootcamp and now have to return your loaner lapt ...
- android国际化语言编码对照表
android国际化语言编码对照表 (查询整理以备不时之需,以下内容均已附原文连接) 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-z ...
- 国际标准之语言编码 - ISO-639
ISO-639-1是两个字母的语言编码,ISO-639-2和ISO-639-3是3个字母的编码. 在我们在软件配置或相关开发时需要对语言进行操作,作为参数或进行识别时,就需要用到这个语言编码了. IS ...
最新文章
- 马腾宇:AI 学界一颗冉冉升起的新星
- 一款Windows管理Linux的软件
- 设置timeout限制在爬虫中的运用
- abap的子程序参数 USING 和 CHANGING 使用问题
- 科大星云诗社动态20210522
- SDNU 1019.礼物(水题)
- iOS开发之UIApplication
- 实践中 XunSearch(讯搜)更新索引方案对比
- Springboot devtools热部署Mybatis报错:Could not load [mapper/]
- java关键字false_无聊,null,true,false是java关键字吗
- matlab中计算sinad,FFT频谱测试法Matlab代码
- excel随机抽取一个数据,抽奖
- 分享从零开始学习网络设备配置--2.1 交换机基本配置
- win10可以登录QQ微信 浏览器不能打开网页
- 判断听云是否正常嵌入及注意事项
- Ubuntu下使用“Windows徽标键+R”打开终端
- PHP计算一年有多少周,每周开始日期和结束日期
- py4j开发配置idea+python
- Windows 7钉子户
- 【论文笔记】AAAI2022多智能体强化学习论文五篇