单片机电子琴电路图及源程序代码

发布者:blq0681最新更新时间:2015-11-02 来源: eefocus关键字:单片机  电子琴  程序代码 手机看文章 扫描二维码
随时随地手机看文章
[转载]单片机电子琴电路图及源程序代码

实验仿真图

源程序代码:(弹奏部分代码暂时去掉,见谅,需要的留言,转载请注明出处,谢谢!)

    DUAN EQU 0c000H
    WEI EQU  0a000H 
    LED0 EQU 8000H
 ORG 0000H          ;复位地址  
    LJMP MAIN          ;跳转到主程序
 ORG 0003H          ;外部中断0入口地址
 LJMP INT00    ;跳转到外部中断0服务程序
 ORG 000BH          ;T0中断入口
 LJMP TIM0          ;跳转到T0中断服务程序
       
 
 ORG 0030H          ;主程序入口地址  
MAIN:

MOV DPTR,#LED0
MOV A,#00H
MOVX @DPTR,A 
  
   
    MOV TMOD,#01H      ;写入T0控制字, 16位定时方式
 SETB IT0           ;外部中断为下降沿触发
 MOV  IE,#83H       ;开中断
 MOV  30H,#00H      ;取简谱码指针
 MOV  R6,#0FFH       ;选择音乐节奏灯循环次数
 CLR  23H           ;功能选择标志 00:键盘 01:音乐

NEXT:  CLR  TR0
        JNB  23H,KEYPLAY   ;若标志位是0则转到键盘程序
        SETB P2.2
  MOV  A,30H         ;简谱码指针装入A
        JNB P0.1,START1    ;否则查询播放哪一首歌曲   
        JNB P0.2,START2
        JNB P0.3,START3
        LJMP NEXT

;确定不同歌曲的基地址
START1:

 MOV  DPTR,#TABLE   ;从TABLE处取简谱码
 MOV 60H,DPH
 MOV 61H,DPL
 MOV A,#00H
        LJMP NEXT1
START2:

 MOV  DPTR,#TABLE2  ;从TABLE2处取简谱码
  MOV 60H,DPH
 MOV 61H,DPL
   MOV A,#01H
        LJMP NEXT1
START3:

 MOV  DPTR,#TABLE3  ;从TABLE处取简谱码
  MOV 60H,DPH
 MOV 61H,DPL
   MOV A,#02H
        LJMP NEXT1

;键盘弹奏程序入口
KEYPLAY:    ;键盘程序入口
    SETB P2.1
 CLR P2.2
 JNB P0.4,LOWTONE     ;查询是高音还是其他的音
 JNB P0.5,MIDDLETONE
 JNB P0.6,HIGHTONE
 LJMP NEXT           ;没有选择高中低音则重新查询


;确定高中低音基地址
LOWTONE:
 MOV DPTR,#LOWTABLE   ;赋基地址值
 MOV 50H,DPH
 MOV 51H,DPL
 LJMP KEY      ;跳转到按键查询程序

MIDDLETONE:
        MOV DPTR,#MIDDLETABLE
  MOV 50H,DPH
 MOV 51H,DPL
 LJMP KEY

HIGHTONE: 
  MOV DPTR,#HIGHTABLE
  MOV 50H,DPH
 MOV 51H,DPL
  LJMP KEY


;歌曲播放程序
NEXT1: MOV DPTR,#SEG7
   MOVC A,@A+DPTR
  MOV DPTR,#DUAN
     MOVX @DPTR,A
     MOV DPTR,#WEI
 MOV A,#000BH
    MOVX @DPTR,A
    MOV DPH,60H
 MOV DPL,61H
 MOV A,30H
    MOVC A,@A+DPTR
 MOV  R2,A          ;取得的简谱码暂存于R2
 JZ   END0          ;是否取到结束码00H
 ANL  A,#0FH        ;不是,则取节拍码
 MOV  R5,A          ;节拍码存于R5
 MOV  A,R2          ;将简谱码装入A
 SWAP A             ;高、低4位交换
 ANL  A,#0FH        ;取音符码
 JNZ  SING          ;取得的音符码是否为0?
 CLR  TR0           ;是则不发音
 lJMP  D1           ;跳转到D1

SING:   DEC             ;取得的音符码减1(不含0)
 MOV  22H,A         ;存入22H单元
 RL              ;乘2
 MOV  DPTR,#TABLE1  ;到TABLE1中取相对的高位字节值
 MOVC A,@A+DPTR
 MOV  TH0,A         ;取得的高位字节装入TH0和21H单元
 MOV  21H,A
 MOV  A,22H         ;再装入取得的音符码
        Rl              ;乘2
 INC             ;加1
 MOVC A,@A+DPTR     ;到TABLE1中取相对的低位字节值
 MOV  TL0,A         ;取得的高位字节装入TL0和20H单元
 MOV  20H,A
 SETB TR0           ;启动T0
D1:     LCALL DELAY        ;基本单位时间1/4拍,延时187毫秒
 INC  30H           ;取简谱码指针加1
 LJMP NEXT          ;取下一个码
END0:   CLR  TR0           ;停止T0
 CLR 30H            ;清零简朴指针
 LJMP NEXT          ;重复循环

[page]
;按键查询程序
KEY:                ;判断是哪个音的按键按下
 JNB P1.0,M0        ;分别是DO,RE,ME....
 JNB P1.1,M1
 JNB P1.2,M2
 JNB P1.3,M3
 JNB P1.4,M4
 JNB P1.5,M5
 JNB P1.6,M6
 LJMP NEXT          ;没有按键按下则跳转到循环查询

;按键软件防抖动程序
M0:    
 LCALL DELAY1       ;延时一段时间判断按键是否继续按下,是则跳转到确定偏移量程序
 JNB P1.0,M00
 SJMP  KEY
M1:    
 LCALL DELAY1
 JNB P1.1,M11
 SJMP  KEY
M2:    
 LCALL DELAY1
 JNB P1.2,M22
 SJMP  KEY
M3:    
 LCALL DELAY1
 JNB P1.3,M33
 SJMP  KEY
M4:    
 LCALL DELAY1
 JNB P1.4,M44
 SJMP  KEY
M5:    
 LCALL DELAY1
 JNB P1.5,M55
 SJMP  KEY
M6:    
 LCALL DELAY1
 JNB P1.6,M66
 SJMP  KEY


;确定按键的偏移地址程序
M00:
 MOV A,#00H
 LJMP PLAY
M11:
 MOV A,#01H
 LJMP  PLAY
M22:
 MOV A,#02H
 LJMP  PLAY
M33:
 MOV A,#03H
 LJMP  PLAY
M44:
 MOV A,#04H
 LJMP  PLAY 
M55:
 MOV A,#05H
 LJMP  PLAY
M66:
 MOV A,#06H
 LJMP  PLAY
       

;按键音弹奏程序

 


;音符对应的定时器初值表:   
TABLE1:
DW 64580,64684,64777,64820
DW 64898,64968,65030,64260
DW 64400,64524,65058,63835,64021

LOWTABLE:
DW 63628,63835,64021,64103,64260,64400,64524
MIDDLETABLE:
DW 64580 ,64684,64777,64820,64898,64968,65030
HIGHTABLE:
DW 65058,65110,65157,65178,65217,65252,65283
SEG7:
DB 06H, 5BH, 4FH,66H, 6DH, 7DH,07H

;音符节拍表:   
TABLE: 
DB 02H,82H
DB 16H,32H,54H,02H,52H
DB 0A6H,32H,54H,02H,52H
DB 64H,74H,0B6H,64H
DB 52H,5CH,32H,22H
DB 16H,12H,14H,32H,22H
DB 16H,12H,14H,22H,32H
DB 26H,12H,94H,22H,32H
DB 2CH
DB 32H,52H
DB 36H,22H,14H,54H
DB 0ACH,92H,0A2H
DB 96H,0A2H,96H,82H
DB 3CH,54H
DB 36H,22H,14H,54H
DB 0ACH,92H,0A2H
DB 16H,12H,14H,22H,32H
DB 2CH,02H,82H
DB 16H,32H,56H,12H
DB 0A6H,32H,56H,52H
DB 66H,72H,0B6H,62H
DB 62H,52H,58H,32H,22H
DB 16H,12H,14H,32H,22H
DB 16H,12H,14H,22H,32H
DB 26H,92H,0A4H,12H,22H
DB 1CH
DB 00
TABLE2:
DB 88h,14h,24h,36H,42H,34H,14H,28H,14H,94H
DB 1fH,88H,14H,24H,34H,32H,42H,54H,14H
DB 46H,32H,54H,22H,32H,32H,22H,2CH,38H,54H,74H
DB 76H,62H,68H,54H,52H,62H,74H,62H,52H,3fH
DB 46H,42H,54H,64H,54H,42H,32H,28H,0a4H,0a2H
DB 92H,84H,94H,1fH,0b8H,68H,46H,52H,68H
DB 74H,72H,72H,74H,62H,52H,3fH,0b8H,68H
DB 46H,52H,68H,64H,62H,62H,64H,42H,32H,2fH
DB 58H,14H,24H,36H,42H,34H,12H,12H,26H,22H,24H,22H,12H
DB 94H,9cH,0a8H,0a6H,92H,84H,64H,54H,22H,22H,46H,42H,44H,32H,22H,5fH
DB 00
TABLE3:
DB 82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24H
DB 22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,52H,64H,52H,32H
DB 22H,32H,22H,12H,94H,82H,92H,12H,14H,12H,14H,94H,1cH
DB 82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24H
DB 22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,52H,64H,52H,32H
DB 22H,32H,22H,12H,94H,82H,92H,12H,14H,12H,14H,22H,12H,1cH,32H,52H
DB 62H,64H,62H,64H,0b2H,62H,52H,54H,62H,54H,32H,22H
DB 12H,14H,12H,14H,24H,3cH,32H,22H,12H,14H,12H,14H,0b2H,62H,52H,54H,62H,54H,32H,52H
DB 66H,0b2H,0b4H,62H,52H,5cH,32H,52H,62H,64H,62H,64H,0b2H,62H,52H,54H
DB 62H,54H,32H,22H,12H,14H,12H,14H,54H,3cH,32H,22H,12H,14H,12H,14H,22H,32H
DB 52H,54H,32H,54H,32H,52H,6fH,04H,02H,92H,32H,24H,12H,1fH
DB 00


END

关键字:单片机  电子琴  程序代码 引用地址:单片机电子琴电路图及源程序代码

上一篇:51单片机中的一些关键字(不断更新中)
下一篇:用汇编语言编八路彩灯控制系统

推荐阅读最新更新时间:2024-03-16 14:38

基于单片机的 复杂可编程逻辑器件快速配置方法
摘要:介绍基于SRAM的可重配置CPLD的原理,通过对多种串行配置的比较,提出了由单片机和FLASH存储器组成的串行配置方式,并从系统复杂度、可靠性和经济性等方面进行了比较和分析。 关键词:复杂可编程逻辑器件 静态随机存储器 被动串行 基于SRAM(静态随机存储器)的可重配置PLD(可编程逻辑器件)的出现,为系统设计者动态改变运行电路中PLD的逻辑功能创造了条件。PLD使用SRAM单元来保存配置数据。这些配置数据决定了PLD内部的互连关系和逻辑功能,改变这些数据,也就改变了器件的逻辑功能。由于SRAM的数据是易失的,因此这些数据必须保存在PLD器件以外的EPROM、EEPROM或FLASH ROM等非易失存储器内,以便使系统在
[工业控制]
51单片机数码管动态扫描驱动的设计
数码管由于发光亮度强,指示效果好,非常适合于电梯楼层等数值显示应用中。对于一位数码管,可以采用静态显示,但实际应用中都是需要显示多位数值,数码管模块也只能动态显示,因此笔者在这里简单分析一下数码管动态扫描驱动的实现。 1. 数码管原理概述 数码管由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。数码管根据内部接法又可分成共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管(如下图SM*10501),共阴数
[单片机]
51<font color='red'>单片机</font>数码管动态扫描驱动的设计
17.所有中断函数的定义
所有中断函数的定义全在 .s 文件中定义 WWDG_IRQHandler PVD_IRQHandler TAMPER_IRQHandler RTC_IRQHandler FLASH_IRQHandler RCC_IRQHandler EXTI0_IRQHandler EXTI1_IRQHandler EXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler DMA1_Channel1_IRQHandler DMA1_Channel2_IRQHandler DMA1_Channel3_IRQHandler DMA1_Channel4_IRQHandler DMA1_Channel5_I
[单片机]
STM32单片机-资料查找
一、中国店铺选型选购 意法半导体STM | STM32/STM8微控制器 | MCU单片机 ----------------------------------------------------------------------------------------------------------------- 二、ST单片机选型 STM8选型手册与STM32最新选型手册移步:download.csdn.net/download/liht1634/33432832。 1、官网选型 ------------------------------------------------------
[单片机]
STM32<font color='red'>单片机</font>-资料查找
51单片机最小系统的构成与绘制
一、51单片机最小系统构成 51单片机最小系统是一个最基本的硬件配置,通常由一个51单片机、晶体振荡器、电源、外部芯片(如LCD屏幕、键盘、LED等)以及必要的电路组成。其主要功能是提供一种简单的方式来开始使用和学习51单片机,使其能够进行基本的输入、输出、计算和控制其具体构成如下: 1、51单片机芯片:51单片机是一种基于哈佛结构的8位微控制器,具有强大的输入输出能力、易于编程、稳定可靠等特点。目前市面上流行的有AT89C51、AT89S51、STC89C51等。 2、晶体振荡器:晶体振荡器是提供时钟信号的重要组成部分,一般为11.0592MHz,它能够提供稳定的时钟信号,保证51单片机的正常工作。 3、电源:为51单片机最
[单片机]
51<font color='red'>单片机</font>最小系统的构成与绘制
at89s52最小系统图 单片机最小系统介绍与设计
  本文介绍一款以AT89S52单片机为原型设计的最小系统实例,包括单片机引脚图、晶振电路图及复位电路图等构建的51单片机最小系统图,希望对各位电子初学者和发烧友提供一定的最小系统设计基础知识起到了解和借鉴作用。   单片机最小系统指的是能让单片机运行起来所需电子器件最少构建起来的电路系统。在本文的示例中,最小系统以AT89S52单片机为中心控制器,包括电源模块和USB下载电路、晶振电路、复位电路。   一、51单片机最小系统及复位电路   如下图1-1、1-2、1-3所示,为AT89S52单片机引脚图及其晶振和复位电路。      1-1 AT89S52单片机引脚图   AT89S52单片机是ATMEL公司生产的一款低功耗
[单片机]
at89s52最小系统图 <font color='red'>单片机</font>最小系统介绍与设计
多媒体投影机遥控器的STC12C5410单片机仿真
当前,投影机已是高校多媒体教室的常规设备,但是由于使用频繁,人员又杂,投影机遥控器损坏及遗失的情况时有发生。因为学校用的投影机均为进口产品,遥控器很难配到,并且能买到的话价格也是异常昂贵。利用单片机仿真遥控器的功能,制作成本很低的投影机遥控器具有实用推广价值。 制作投影机遥控器的关键是先要读出原投影机遥控器(同型号)的所有按键的控制码数据,然后做成按键控制码表格,当仿真时在按键操作下单片机将不同的控制码数据发射出去,达到遥控投影机的目的。 1 读遥控器按键码方法 1.1读遥控器按键码硬件电路 如图1为单片机读投影机遥控键码的控制电路。单片机使用宏晶公司的STC12C5410,P1.6口灯用作读码状态的指示,灯亮代表读码状
[单片机]
多媒体投影机遥控器的STC12C5410<font color='red'>单片机</font>仿真
意法推出STM32WBA5系列微控制器:强化物联网连接与安全
意法半导体(ST)近日宣布推出全新的STM32WBA5系列微控制器,该系列不仅继承了STM32家族在性能、能效及易用性方面的优良传统,更在无线连接与安全性方面进行了显著的提升,以满足日益增长的物联网设备需求。 STM32WBA5系列微控制器内置了Arm Cortex-M33内核,运行频率高达100MHz,配备了丰富的外设接口和高达1MB的闪存、128kB的静态RAM(SRAM)。此外,该系列还支持Arm TrustZone安全隔离架构,为物联网设备提供了硬件级别的安全保障。 在无线连接方面,STM32WBA5系列整合了蓝牙5.4低功耗(BLE)、Zigbee、Thread和Matter等多种网络协议,实现了与各类物联网设备
[物联网]
意法推出STM32WBA5系列<font color='red'>微控制器</font>:强化物联网连接与安全
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved