单片机七阶音符_单片机对于音乐的编程中 ,音符的十六位数据表是怎样
展开全部
只有音乐发声汇编程序,没有加入LED灯,供参考。数据代码已改为小星星发声
;**********************************************
ORG 0000H
SJMP MAIN
ORG 0BH
AJMP TIME0
;*************主程序************************
MAIN: MOV SP,#60
MOV TMOD,#01H ;T0定时工作方式
MOV IE,#82H ;CPU 中断允许e69da5e6ba9062616964757a686964616f31333363383364,T0中断允许
START0: MOV 30H,#00H ;TABLE 相对地址指针
NEXT: MOV A,30H
MOV DPTR,#TABLE ;到TABLE处取 简谱码 节拍 码
MOVC A,@A+DPTR
MOV R2,A ;取到的简谱码 节拍码 暂存于R2中
JZ ENDF ;取到 00 结束
ANL A,#0FH ;否,取低四位 节拍 码
MOV R5,A ;将节拍码存于R5中
MOV A,R2 ;简谱码 节拍 码 给A
SWAP A ;高4位 与 低4位 交换
ANL A,#0FH ;取简谱 码
JNZ SING ;取到的简谱 码不是0,则去发声
CLR TR0 ;取到0 则不发声
SJMP DLY1 ;节拍延时子程序( 随节拍码变化,延时时间不同)
;---------------发声-----------------------
SING: DEC A ;取到的简谱码减1
;(简谱码计数值16位数据存储首地址从TABLE1 《相对地址》0处开始放起,所以要减1)
MOV 22H,A ;存入(22H)中
RL A ;乘2 因为取的数据占两字节(16位)
;所以指针增加量要乘2
MOV DPTR,#TABLE1
;...........简谱码转换为相应定时器16位计数值.............
MOVC A,@A+DPTR ;到TABLE1取相应的高字节计数值
MOV TH0,A ;高字节计数值存入TH0和(21H)中
MOV 21H,A
MOV A,22H ;减1的简谱码给A
RL A ;乘2 因为取的数据占两字节(16位)
;所以指针增加量要乘2
INC A ;A 增加 取下一个字节计数值
;...........简谱码转换为相应定时器16位计数值.............
MOVC A,@A+DPTR ;到TABLE1取相应的低字节计数值
MOV TL0,A ;低字节计数值存入TL0和(20H)中
MOV 20H,A
SETB TR0 ;启动T0定时器让喇叭发出不同频率声音
;---------------节拍延时-------------------
DLY1: ACALL DELAY ;基本单位时间为1/4拍 187ms
INC 30H ;取下一个简谱码 节拍 码
SJMP NEXT
;---------------歌放完结束---------------
ENDF: CLR TR0 ;关闭T0定时器
AJMP START0 ;反复循环
;****T0中断子程序(用来驱动喇叭发出不同频率声音)**************
TIME0: PUSH ACC
PUSH PSW
MOV TL0,20H ;重装计数值
MOV TH0,21H
CPL P3.7 ;驱动发声
POP PSW
POP ACC
RETI
;******************节拍延时187ms****************************
DELAY: MOV R7,#187 ;187ms延时子程序
DLY2: MOV R4,#02
DLY3: MOV R3,#248
DJNZ R3,$
DJNZ R4,DLY3
DJNZ R7,DLY2
DJNZ R5,DELAY
RET
;*******音符T值表(用来让定时器发出不同的频率)**DW 表示一个 计数值 占两个字节存储单元***************
TABLE1: DW 64260,64400,64524,64580,64684 ;低音SO 低音LA 低音SI /中音DO 中音RE
DW 64777,64820,64898,64968,65030 ;中音MI 中音FA 中音SO 中音LA 中音SI
DW 65058,65110,65157,65178,65217 ;高音DO 高音RE 高音MI 高音FA 高音SO
;*********简谱码 节拍码(高4位简谱码 ,低4位节拍码)*************
TABLE: DB 44H,44H,84H,84H ; 1 1 5 5
DB 094H,094H,88h ; 6 6 5 -
DB 74H,74H,63H,63H ; 4 4 3 3
DB 52H,52H,48h ; 2 2 1-
DB 84H,84H,74H,74H ; 5 5 4 4
DB 64H,64H,58h ; 3 3 2-
DB 84H,84H,74H,74H ; 5 5 4 4
DB 64H,64H,58h ; 3 3 2-
DB 44H,44H,84H,84H ; 1 1 5 5
DB 094H,094H,88h ; 6 6 5 -
DB 74H,74H,63H,63H ; 4 4 3 3
DB 52H,52H,48h ; 2 2 1-
END
加入了LED灯,水平有限,效果有点不太好
;**********************************************
ORG 0000H
SJMP MAIN
ORG 0BH
AJMP TIME0
;*************主程序************************
MAIN: MOV SP,#60
MOV TMOD,#01H ;TO定时工作方式
MOV IE,#82H ;CPU 中断允许,TO中断允许
START0: MOV 30H,#00H ;TABLE 相对地址指针
NEXT: MOV A,30H
MOV DPTR,#TABLE ;到TABLE处取 简谱码 节拍 码
MOVC A,@A+DPTR
MOV R2,A ;取到的简谱码 节拍码 暂存于R2中
JZ ENDF ;取到 00 结束
ANL A,#0FH ;否,取低四位 节拍 码
MOV R5,A ;将节拍码存于R5中
MOV A,R2 ;简谱码 节拍 码 给A
SWAP A ;高4位 与 低4位 交换
ANL A,#0FH ;取简谱 码
JNZ SING ;取到的简谱 码不是0,则去发声
CLR TR0 ;取到0 则不发声
SJMP DLY1 ;节拍延时子程序( 随节拍码变化,延时时间不同)
;---------------发声-----------------------
SING: DEC A ;取到的简谱码减1
;(简谱码计数值16位数据存储首地址从TABLE1 《相对地址》0处开始放起,所以要减1)
MOV 22H,A ;存入(22H)中
RL A ;乘2 因为取的数据占两字节(16位)
;所以指针增加量要乘2
MOV DPTR,#TABLE1
;...........简谱码转换为相应定时器16位计数值.............
MOVC A,@A+DPTR ;到TABLE1取相应的高字节计数值
MOV TH0,A ;高字节计数值存入TH0和(21H)中
MOV 21H,A
MOV A,22H ;减1的简谱码给A
RL A ;乘2 因为取的数据占两字节(16位)
;所以指针增加量要乘2
INC A ;A 增加 取下一个字节计数值
;...........简谱码转换为相应定时器16位计数值.............
MOVC A,@A+DPTR ;到TABLE1取相应的低字节计数值
MOV TL0,A ;低字节计数值存入TL0和(20H)中
MOV 20H,A
SETB TR0 ;启动T0定时器让喇叭发出不同频率声音
;---------------节拍延时-------------------
DLY1: ACALL DELAY ;基本单位时间为1/4拍 187ms
INC 30H ;取下一个简谱码 节拍 码
CPL P1.0 LED灯 闪烁
CPL P1.1
CPL P1.2
CPL P1.3
CPL P1.4
CPL P1.5
CPL P1.6
CPL P1.7
SJMP NEXT
;---------------歌放完结束---------------
ENDF: CLR TR0 ;关闭T0定时器
AJMP START0 ;反复循环
;****T0中断子程序(用来驱动喇叭发出不同频率声音)**************
TIME0: PUSH ACC
PUSH PSW
MOV TL0,20H ;重装计数值
MOV TH0,21H
CPL P3.7 ;驱动发声
POP PSW
POP ACC
RETI
;******************节拍延时187ms****************************
DELAY: MOV R7,#187 ;187ms延时子程序
DLY2: MOV R4,#02
DLY3: MOV R3,#248
DJNZ R3,$
DJNZ R4,DLY3
DJNZ R7,DLY2
DJNZ R5,DELAY
RET
;*******音符T值表(用来让定时器发出不同的频率)**DW 表示一个 计数值 占两个字节存储单元***************
TABLE1: DW 64260,64400,64524,64580,64684 ;低音SO 低音LA 低音SI /中音DO 中音RE
DW 64777,64820,64898,64968,65030 ;中音MI 中音FA 中音SO 中音LA 中音SI
DW 65058,65110,65157,65178,65217 ;高音DO 高音RE 高音MI 高音FA 高音SO
;*********简谱码 节拍码(高位简谱码 ,低位节拍码)*************
TABLE: DB 44H,44H,84H,84H ; 1 1 5 5
DB 094H,094H,88h ; 6 6 5 - -表示有节拍
DB 74H,74H,63H,63H ; 4 4 3 3
DB 52H,52H,48h ; 2 2 1-
DB 84H,84H,74H,74H ; 5 5 4 4
DB 64H,64H,58h ; 3 3 2-
DB 84H,84H,74H,74H ; 5 5 4 4
DB 64H,64H,58h ; 3 3 2-
DB 44H,44H,84H,84H ; 1 1 5 5
DB 094H,094H,88h ; 6 6 5 -
DB 74H,74H,63H,63H ; 4 4 3 3
DB 52H,52H,48h ; 2 2 1-
END
已赞过
已踩过<
你对这个回答的评价是?
评论
收起
单片机七阶音符_单片机对于音乐的编程中 ,音符的十六位数据表是怎样相关推荐
- arduino uno r3单片机封装图_单片机实例分享,数字电子秤制作方案
力传感器可以用来测量物体的质量,最常见的应用就是电子秤.而关于力传感器的信号处理,在开发设计中未必是一帆风顺的,为此笔者为大家提供两种以前在项目开发过程中使用过的非常经典的设计方案,通过对比两种方案的 ...
- spotify文件下载路径_从计算机的音乐文件夹中自动执行Spotify上的播放列表
spotify文件下载路径 In modern society music streaming platforms are gaining a lot of popularity compared t ...
- python预处理c语言_详解C语言编程中预处理器的用法
预处理最大的标志便是大写,虽然这不是标准,但请你在使用的时候大写,为了自己,也为了后人. 预处理器在一般看来,用得最多的还是宏,这里总结一下预处理器的用法. #include #define MACR ...
- 单片机七阶音符_单片机演奏音乐(F调3个8度7音阶)程序+Proteus仿真
/********本程序中,FOSC=11.0592M*********/ #include #include #define uchar unsigned char #define uint un ...
- 单片机七阶音符_(单片机问题)让蜂鸣器发出do,ri,mi,fa,so,la,si,按这个顺序发声,每个音符各发声1秒....
问题描述: (单片机问题)让蜂鸣器发出do,ri,mi,fa,so,la,si,按这个顺序发声,每个音符各发声1秒. 蜂鸣器接在单片机的P2.4口,用C语言来编写,求具体的单片机程序,不要框架型的程序 ...
- 单片机七阶音符_单片机 演奏音符
演奏音阶 /* 名称:演奏音阶 说明:本例使用定时器演奏一段音阶,播放由 K1 控制. */ #include #define uchar unsigned char #define uint uns ...
- 十天征服单片机百度云_单片机资料百度盘.
一. 51 单片机 1 .祥云 51 单片机学习光盘(视频教程.例程.操作系统)适合 初学者 资 料 下 载 链 接 : https://yunpan.cn/cJzLQdrBfp2KD 访 问 密 码 ...
- 单片机蓝牙初始化_单片机程序那些事
最近在做一个项目的时候,需要进行增量式固件升级,因为固件特别大,一共有900+K,通过蓝牙4.0接口升级,这个数据量非常大,不可能每次全部更新,我们只需要将修改过的函数更新进去就好了,那么就必须要将函 ...
- hc05与单片机连接图_单片机科普:单片机的IO口不够用了怎么办?如何扩展单片机的IO口...
单片机是一种可编程器件,在各种消费类电子.工业电子.汽车电子等行业应用广泛,目前开发产品的构架就是以单片机为核心,根据不同的功能搭建不同的外设电路.同样的功能,每个人.每个团队所做的技术方案都不会相同 ...
最新文章
- 应用程序基础知识:activity和intent——Android开发秘籍
- 性能测试知多少---系统架构分析
- OpenCV 霍夫线变换Hough Line Transform
- css盒模型中margin很牛逼
- python遍历文件夹下所有文件名中含有指定_Python 遍历目录找出包含指定字符串的文件夹...
- 【华为云技术分享】盘点物联网常用开发板
- STM32 BOOT 引脚配置
- 计算机组成原理 mov(r0),-(sp),第三章作业
- 高级Javascript调试——console.table()
- Android 数字格式化
- HyperLynx(三)传输线类型及相关设置
- 对网络化云计算时代的美好憧憬
- EXCEL 查漏补缺内容
- c语言程序设计基本模板,《C语言程序设计基础教程》试讲教案模板
- 将JPG图片直接转换成PDF软件操作步骤
- 软件测试自动生成测试数据,软件测试中测试数据的自动生成方法浅析
- Javaweb酒店预约管理系统(框架SpringBoot+Vue)
- 爬取图片-工作常用小工具01
- python提取excel内容
- Go语言GoFrame开发框架
热门文章
- 人称代词和Be动词的现在简单肯定式_1
- 【英语学习】【Level 07】U07 Stories of my Life L4 Not my best moment
- Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - MMX技术(7) - 状态清除指令 小结
- mysql中timestamp,datetime,int类型的区别与优劣
- php 小程序自定义图,微信小程序之如何使用自定义组件封装原生 image 组件
- Hyper Text Transfer Protocol(超文本传输协议)
- 怕死吗?研究人员推出可模拟“灵魂出窍”的VR系统
- Xcode 7 3打包注意事项
- 07-OSPF区域类型--NSSA区域/完全NSSA区域
- 日立数据系统进一步加强与IBM zHPF大型机合作