简易电子琴的设计

一、             设计题目:

设计一简易电子琴,要求能够发出1、2、3、4、5、6、7等七个音符。

使用元件:AT 89C51 、LM324,喇叭,按键等

二、             设计目的

(1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。

(2)熟悉8051单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。

(3)为实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件。

(4)对软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。

三、             系统硬件图

(一)   音乐产生原理及硬件设计

由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。本次设计中单片机晶振为12MHZ,那么定时器的计数周期为1MHZ,假如选择工作方式1,那T值便为T= 216--5﹡105/相应的频率 ,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数T0相关的计数值如下表所示:

音符

频率(HZ)

简谱码(T值)

中 1 DO

523

64580

中 2 RE

587

64684

中 3 M

659

64777

中 4 FA

698

64820

中 5 SO

784

64898

中 6 LA

880

64968

中 7 SI

988

65030

采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:

TABLE DW 64580,64684,64777,64820,64898,64968,65030

源程序:

方案一:产生按键音符

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP BREAK

MAIN:  MOV TMOD,#01H       ;设置定时器0的工作方式

SETB EA

SETB ET0               ; 设置定时器0中断

SETB TR0               ; 启动定时器0

WAIT1: LCALL KEY             ; 调用KEY子程序,判断有键按下否?第几个键?

CLR EA                 ;屏蔽中断

CJNE R3,#00H,WAIT1     ;如果R3=0,表示有键按下

MOV A,22H              ;将22H里存放的按键号送给A

RL A                   ; 因为查表里都是字,所以得乘2查得数据

MOV DPTR,#TABLE      ;指向表头

MOVC A,@A+DPTR      ; 查表

MOV TH0,A             ;将数据高位送TH0

MOV 21H,A             ; 将高位备份

MOV A,22H             ;将22H里存放的按键号送给A

RL A                   ;因为查表里都是字,所以得乘2查得数据

INC A                  ;取低位数据

MOVC A,@A+DPTR

MOV TL0,A

MOV 20H,A

WAIT2: LCALL KEY

SETB EA

CJNE R3,#00H,WAIT1

JMP WAIT2

KEY:   MOV R3,#00H          ; KEY子程序,判断有键按下否?第几个键?

MOV R1,#0FFH

MOV R0,#00H

MOV A,R1

MOV P2,A

MOV A,P2

CLR C

CPL C               ;利用标志位CY来判断是哪个键按下

MOV R2,#08H

WAIT3: RLC A               ;移位判断

JNC STORE

INC R0

DJNZ R2,WAIT3

STORE: MOV 22H,R0        ; 将按键号存22H,R3=0有键按下

MOV R3,#00H

RET

BREAK: PUSH ACC          ;  中断产生方波,从P1.0口输出

PUSH PSW

MOV TL0,20H

MOV TH0,21H

CPL P1.0

POP PSW

POP ACC

RETI

TABLE: DW 65030,64968,64898,64820,64777,64684,64580 ; 7,6,5,4,3,2,1

END

方案二:产生按键音符

ORG 0000H

SJMP START

ORG 000BH

AJMP INT_0

ORG 0030H

START: MOV P1,#00H

SETB EA

SETB ET0                       ;计数器0

MOV TMOD,#02H

MOV TH1,#09CH

MOV TL1,#09CH                 ;定时器初植

CLR TR0                        ;定时器不允许

SCAN:                                 ;键盘扫描

MOV A,P2                   ;判断键盘按下,跳到SCAN_1,若未按,继续扫描

CJNE A,#0FFH,SCAN_1

NOP

SJMP SCAN

SCAN_1:ACALL DELAY ;是不是真的要按下?如果是,则跳转SU_KEY查询是哪个按下?

MOV A,P2

CJNE A,#0FFH,SU_KEY

NOP

SJMP SCAN

SU_KEY:JNB P2.1,MU_1                  ;判断是哪个键按下?

JNB P2.2,MU_2

JNB P2.3,MU_3

JNB P2.4,MU_4

JNB P2.5,MU_5

JNB P2.6,MU_6

JNB P2.7,MU_7

SJMP SCAN

;R1信号周期

MU_1:  MOV R1,#19                ;如果第一个按键按下,则R1=19,同时程序转NEXT

SJMP NEXT

MU_2:  MOV R1,#17

SJMP NEXT

MU_3:  MOV R1,#15

SJMP NEXT

MU_4:  MOV R1,#14

SJMP NEXT

MU_5:  MOV R1,#13

SJMP NEXT

MU_6:  MOV R1,#11

SJMP NEXT

MU_7:  MOV R1,#10

SJMP NEXT

NEXT:  MOV A,R1

MOV R0,A

SETB TR0                       ;启动定时器0

NEXT_1:MOV A,P2                     ; 没键按下继续执行,有键按下,返回读引脚

CJNE A,#0FFH,NEXT_1

ACALL DELAY

MOV A,P2                       ;真的没键按下?

CJNE A,#0FFH,NEXT_1

CLR TR0                        ;不响

AJMP SCAN                     ;扫描键盘去

INT_0:                                 ;中断程序

DJNZ R0,RE                      ;R0不等于0时,返回

CPL P1.0

MOV A,R1

MOV R0,A

RE:   RETI

DELAY:MOV R7,#100                    ;延长时间等待,键盘消抖

D1:   MOV R6,#10

D2:   DJNZ R6,D2

DJNZ R7,D1

RET

END

生日快乐歌:(扩展功能部分程序)

ORG 0000H

JMP MAIN

ORG 000BH

JMP TT0

MAIN: MOV TMOD,#01H               ;设置定时器0工作方式

MOV IE,#82H                    ;设置中断

MAIN0:MOV 30H,#00H

NEXT: MOV A,30H

MOV DPTR,#TABLE              ;查表

MOVC A,@A+DPTR

MOV R2,A

JZ STOP

ANL A,0FH

MOV R5,A

MOV A,R2

SWAP A

ANL A,#0FH

JNZ SING

CLR TR0

JMP W1

SING: DEC A

MOV 22H,A

RL A

MOV DPTR,#TABLE1                   ;查表

MOVC A,@A+DPTR

MOV TH0,A

MOV 21H,A

MOV A,22H

RL A

INC A

MOVC A,@A+DPTR

MOV TL0,A

MOV 20H,A

SETB TR0

W1:   CALL DELAY

INC 30H

JMP NEXT

STOP: CLR TR0

JMP MAIN0

TT0:  PUSH ACC                            ;中断服务程序

PUSH PSW

MOV TL0,20H

MOV TH0,21H

CPL P1.0

POP PSW

POP ACC

RETI

DELAY:MOV R7,#2                      ;延时187ms

W2:  MOV R4,#187

W3:  MOV R3,#248

DJNZ R3,$

DJNZ R4,W3

DJNZ R7,W2

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:DB 82H,01H,81H,94H,84H           ;节拍表

DB 0B4H, 0A4H,04H

DB 82H,01H,81H,94H,84H

DB 0C4H ,0B4H,04H

DB 82H,01H,81H, 0F4H,0D4H

DB 0B4H, 0A4H,94H

DB 0E2H,01H,0E1H,0D4H,0B4H

DB 0C4H ,0B4H,04H

DB 82H,01H,81H,94H,84H

DB 0B4H, 0A4H,04H

DB 82H,01H,81H,94H,84H

DB 0C4H ,0B4H,04H

DB 82H,01H,81H, 0F4H,0D4H

DB 0B4H, 0A4H,94H

DB 0E2H,01H,0E1H,0D4H,0B4H

DB 0C4H ,0B4H,04H

DB 00H

END

简易电子琴的设计( 汇编)相关推荐

  1. 单片机多功能电子琴课设_基于单片机的简易电子琴课程设计.doc

    基于单片机的简易电子琴课程设计.doc 还剩 16页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 15 14可在实际的应用时这些是不能被忽略的,我们不 ...

  2. 基于8086简易电子琴系统仿真设计、基于8086红外自动门控制胸设计-全套设计资料【转发】

    1189基于8086简易电子琴系统仿真设计-设计资料 编写一实现电子琴的程序,并实现若干扩展功能. 基本功能:用键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶: 扩展功 ...

  3. 基于8086简易电子琴系统仿真设计-基于8086红外自动门控制系统设计-基于单片机8x8矩阵键盘两机串口通信-基于单片机8层电梯控制系统仿真设计-基于单片机ADC0809和DAC0832模数和数模设计

    1189基于8086简易电子琴系统仿真设计-设计资料 编写一实现电子琴的程序,并实现若干扩展功能. 基本功能:用键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶: 扩展功 ...

  4. VHDL简易电子琴的设计

    主要内容:本课程设计主要是利用硬件描述语言VHDL的设计思想,采用自顶向下的方法,划分模块来设计简易电子琴中的几个模块.通过课程设计深入理解和掌握计算机的基本知识,并且掌握课堂上所学到的理论知识,达到 ...

  5. 单片机多功能电子琴课设_基于51单片机的简易电子琴课程设计

    1.本设计采用51单片机作为主控制器 2.外部加上放音设备如喇叭等,来实现音乐演奏控制器的硬件电路 3.用8个手工的按键发出八个音阶 制作出来的电子琴实物图如下: 仿真原理图如下(proteus仿真工 ...

  6. 计算机电子电路原理图,简易电子琴设计电路图大全(八款模拟电路设计原理图详解) - 消费类电子电路图...

    简易电子琴设计电路图(一) 电子琴稳定的+5V电源的电路如图所示. 电子琴电源电路 电路工作原理:集成块ICCA6722是该电源电路的核心元件.它能输出精确而稳定的+5V直流电压.从IC第1脚输人+9 ...

  7. 基于matlab的数字信号发生器及简易电子琴设计,简易电子琴电路的设计仿真与实现课程设计...

    简易电子琴电路的设计仿真与实现课程设计 课程设计任务书 学生姓名: 专业班级: 指导教师: 工作单位: 信息工程学院 题 目: 简易电子琴电路的设计仿真与实现 初始条件: 可选元件:集成运算放大器LM ...

  8. 简易电子琴设计(c语言)

    目录 1  设计内容: 1.1 矩阵键盘代表琴键,实现至少8个音的弹奏,分别为1,2,3,4,5,6,7,i. 1.2 键按下时间的长短代表节拍的长短 1.3 用蜂鸣器发出声音 1.4 8*8led点 ...

  9. 基于VHDL的FPGA简易电子琴(实现三音阶切换与弹奏)

    目录 一.设计内容简介 二.系统框图 1.简易框图 2.总电路图(quarters软件自动生成) 三.代码说明 1.总体代码 2.代码思路 四.仿真实现结果与分析总结 1.仿真思路 2.仿真建立过程 ...

最新文章

  1. 【书评】OSPF Anatomy of an Internet Routing Protocol
  2. 《疯狂Java讲义》4
  3. linux禁用页面拷贝粘贴,【Linux基础】VI命令模式下删除拷贝与粘贴
  4. dll模块化设计与编程_FPGA设计原则经验分享
  5. Swift学习笔记_数据类型_整数类型
  6. python前后台tcp/udp通讯示例
  7. 斐波那契数列c语言编程递归,C语言实现Fibonacci数列递归
  8. 2017张宇高数18讲
  9. stm32 无线打印机服务器,STM32开发的蓝牙热敏打印机
  10. 苹果U盘格式化了怎么恢复
  11. Java判断时间在5分钟的之内方法
  12. C++ 语法篇之 static 用法
  13. python gpu加速库比matlab快吗_Python之Unittest和Requests库详解
  14. html中鼠标悬停图片变大,JavaScript通过mouseover()实现图片变大效果的示例
  15. 浅谈 MVC、MVP 和 MVVM 架构模式
  16. ASP.NET Form Authentication - Membership Authentication
  17. freetype用法
  18. 三分钟带你搞懂什么是向上转型和向下转型
  19. 全国各省-土地转让收入(1995-2019年)
  20. 京东文件存储服务器,紫晶存储智能家庭云服务器登录中国移动和彩云 首个京东官方旗舰店助力消费者业务...

热门文章

  1. 害死人的自动递增,不偿命的自动递减
  2. python人工智能 动漫生成_用 Python 实现抖音上的“人像动漫化”特效,原来这么简单!...
  3. 大学生计算机基础知识竞赛策划,大学计算机基础知识竞赛活动策划书(含题目).doc...
  4. js剪切板复制的表格自动识别
  5. 康拓展开和逆康拓展开
  6. Java中的字节输入出流和字符输入输出流
  7. Re24:读论文 IOT-Match Explainable Legal Case Matching via Inverse Optimal Transport-based Rationale Ext
  8. 易优cms 忘记eyoucms后台密码怎么办? Eyoucms快速入门
  9. SD/MMC/SDIO 驱动分析
  10. 城固一中2021年高考成绩查询,2021年汉中今年的中考成绩