找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2217|回复: 2
收起左侧

单片机电子音调发生器设计 含汇编语言源码

[复制链接]
ID:353237 发表于 2018-6-17 14:03 | 显示全部楼层 |阅读模式
一、背景单片机自70年代问世以来得到蓬勃发展,目前单片机功能正日渐完善:单片机集成越来越多资源,内部存储资源日益丰富,用户不需要扩充资源就可以完成项目开发,不仅是开发简单,产品小巧美观,同时抗干扰能力加强,系统也更加稳定,使得它更加适合工业控制领域,具有更加广阔的市场前景;提供在线编程能力,加速了产品的开发进程,为企业产品上市赢得宝贵时间。此外单片机具有性能高、速度快、体积小、价格低、稳定可靠、应用广泛、通用性强等突出优点。单片机的设计目标主要是增强“控制”能力,满足实时控制(就是快速反应) 的需要。无论是从事科学研究工作,还是开办电子器件的工厂还是经营电子厂品的贸易,不仅要熟练地使用通用微机进行各种数据处理,还要把计算机技术运用到本专业领域或相关领域,既具有开发创新能力。这就要求我们要熟练地掌握单片机。单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效地完成程序设计者实现规定的任务。二、指标要求利用JD51开发板上的按键S1~S4和蜂鸣器设计电子音调发生器,指标要求为:(1)利用JD51开发板上的按键S1~S4进行音调选择,即按下不同的开关产生不同的音调,依次按动S1~S4 及组合按键,蜂鸣器发出1234567i八个音调;并在数码管上显示。(2)编写2支歌曲,并可进行选择播放。三、设计目的(1)了解计算机发声原理。(2)熟悉键盘扫描电路的工作原理及编程方法。(3)掌握利用定时器结合中断的方法来设计信号的方波输出。(4)学会运用计数器定时器计算初值的方法计算音调对应初值。四、设计原理音节由不同频率的方波产生,音节与频率的关系通过查表可得。要产生音频方波,需要算出某一音频的周期(1/频率),然后利用定时器对半个周期进行计时并通过某个I/0脚输出,再利用中断程序反相输出信号,不断重复这个过程就可在I/O脚得到此频率的方波,在JD51单片机上,产生方波的I/O脚选用P2.4,通过跳线选择器将单片机的P2.4与蜂鸣器的驱动电路相连。这样P2.4输出不同频率的方波,蜂鸣器便会发出不同的声音。另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍。每个音节相应的定时器初值X可按下法计算: (1/2)*(1/f)=(12/fose)*(216-x)即 x=216-(fose/24f)其中f:音调频率,当晶振fose=11.0592MHz时,音节“1”相应的定时器初值为x,则可得x=63777D=F921H其它的可同样求得。                          表1                      音调      频率(Hz)      X(HEX)        1      262      F921        2      294      F9E1        3      330      FA8C        4      349      FAD8        5      392      FB68        6      440      FBE9        7      494      FC5B          i          523          FC8F   五、Proteus仿真设计按键一:数码管显示1,同时能听到蜂鸣器响音调1按键二:数码管显示2,同时能听到蜂鸣器响音调2按键三:数码管显示3,同时能听到蜂鸣器响音调3按键四:数码管显示4,同时能听到蜂鸣器响音调4 六、设计方案及思路1总体框图      
                          
2蜂鸣电路模块鸣器驱动电路和89C51组成。 选择一只压电式蜂鸣器,压电式蜂鸣器工作时约需要100MA驱动电流。当89C51输出为低电平时蜂鸣器产生蜂鸣音,89C51 输出为高电平时,蜂鸣器不发声。七、软件设计流程及描述根据要实现的功能,流程图如下:熟悉定时器和键盘扫描电路的工作原理及编程方法。                             
1.软件设计思路电子琴主要的工作是将按键的信息读取,然后根据按键的数字,用计数器输出相对应的频率,实现电子琴的音调。程序主要为5部分,键盘扫描、中断计时、数码显示、音乐播放、主程序,他们分别执行不同的功能。2.各部分功能介绍(1)键盘键值读取程序键盘键值读取程序包括键盘扫描、消除抖动、键译码等内容。按键的识别主要有两种方法:行反转法和行扫描法。因为键盘为机械开关,容易引入抖动。为了消除抖动干扰,在程序中要加入消除抖动的部分。(2)中断计时中断部分,中断定时器1主要负责输出不同频率的方波,产生声音,中断定时器1主要是计时按键时间及按键间隔时间的功能,在播放音乐的时候,还担任着播放音乐的节拍的任务。(3)音乐播放音乐播放部分主要是播放音乐,实现按键重播和播放程序里面的音乐的功能。(4)数码显示按下不同的按键,则数码管显示对应的音调数字(5)主程序主程序主要是随时发出按键的声音功能,并且通过不同P口的扫描,判断是否是播放按键声音还是播放音乐,还是继续发出按键声音。八、实验源程序1.汇编程序:
  1. /*SB1 1音  SB2 2音   SB3 3音  SB4 4音 SB1SB2  5音   SB2SB3  6音   SB3SB4  7音   SB1SB4  i音   SB1SB3 第一首歌  SB2SB4  第二首歌 */
  2. ORG 0000H
  3.         LJMP KEYP0
  4. KEYP0: MOV R0,#00H   
  5.       CLR TR0
  6.       SETB P2.4     ;关蜂鸣器
  7.      SETB P2.3                           ;关数码管
  8. WU:  MOV R0,P3  ;扫描键盘输入
  9.     CJNE R0,#0FFH,KEYPO1         ;有输入时跳转
  10.           JMP WU
  11. KEYPO1:CJNE R0,#0FBH,KEYPO2  ;输入1音,非1音跳转
  12.   SETB P2.4     ;蜂鸣器置于高电平
  13.     MOV R3,#200
  14. MAIN01:MOV TMOD,#01H    ;初始化,工作方式1
  15.        MOV TL0,#21H     ;写入计数初值
  16.        MOV TH0,#0F9H
  17.        SETB TR0         ;启动计数
  18.                  
  19. WAIT1:JNB TF0,WAIT1     
  20.      CLR TF0         
  21.      CPL P2.4             ;蜂鸣器响
  22.           CLR P2.3             ;数码管显示1
  23.           MOV A,#11111001B
  24.                  MOV P0,A
  25.      DJNZ R3,MAIN01
  26.           LJMP KEYP0         ;返回程序KEYP0
  27.          
  28. KEYPO2:CJNE R0,#0F7H,KEYPO3  ; 输入2音,非2音跳转
  29. SETB P2.4        ;蜂鸣器置于高电平
  30.         MOV R3,#200  
  31. MAIN02:MOV TMOD,#01H   
  32.        MOV TL0,#0E1H         ;写入计数初值
  33.        MOV TH0,#0F9H
  34.        SETB TR0
  35. WAIT2:JNB TF0,WAIT2
  36.      CLR TF0
  37.      CPL P2.4            ;蜂鸣器响
  38.           CLR P2.3            ;数码管显示2
  39.           MOV A,#10100100B
  40.                  MOV P0,A
  41.      DJNZ R3,MAIN02
  42.         LJMP KEYP0

  43. KEYPO3:CJNE R0,#0EFH,KEYPO4  ; 输入3音,非3音跳转
  44. SETB P2.4         ;蜂鸣器置于高电平
  45.         MOV R3,#200
  46. MAIN03:MOV TMOD,#01H      
  47.        MOV TL0,#08CH
  48.        MOV TH0,#0FAH
  49.        SETB TR0
  50. WAIT3:JNB TF0,WAIT3
  51.      CLR TF0
  52.      CPL P2.4
  53.           CLR P2.3
  54.           MOV A,#10110000B
  55.                  MOV P0,A
  56.      DJNZ R3,MAIN03
  57.         LJMP KEYP0

  58. KEYPO4:
  59. CJNE R0,#0DFH,KEYPO5           ; 输入4音,非4音跳转
  60. SETB P2.4
  61.         MOV R3,#200
  62. MAIN04:MOV TMOD,#01H            
  63.        MOV TL0,#0D8H
  64.        MOV TH0,#0FAH
  65.        SETB TR0
  66. WAIT4:JNB TF0,WAIT4
  67.      CLR TF0
  68.      CPL P2.4
  69.           CLR P2.3
  70.           MOV A,#10011001B
  71.                  MOV P0,A
  72.      DJNZ R3,MAIN04
  73.         LJMP KEYP0

  74. KEYPO5:        CJNE R0,#0F3H,KEYPO6        ; 输入5音,非5音跳转
  75. SETB P2.4
  76.         MOV R3,#200   
  77. MAIN05:MOV TMOD,#01H           
  78.        MOV TL0,#068H
  79.        MOV TH0,#0FBH
  80.        SETB TR0
  81. WAIT5:JNB TF0,WAIT5
  82.      CLR TF0
  83.      CPL P2.4
  84.           CLR P2.3
  85.           MOV A,#10010010B
  86.                  MOV P0,A
  87.      DJNZ R3,MAIN05
  88.         LJMP KEYP0

  89. KEYPO6:CJNE R0,#0E7H,KEYPO7        ; 输入6音,非6音跳转
  90. SETB P2.4
  91.         MOV R3,#200            
  92. MAIN06:MOV TMOD,#01H
  93.        MOV TL0,#0E9H
  94.        MOV TH0,#0FBH
  95.        SETB TR0
  96. WAIT6:JNB TF0,WAIT6
  97.      CLR TF0
  98.      CPL P2.4
  99.           CLR P2.3
  100.           MOV A,#10000010B
  101.                  MOV P0,A
  102.      DJNZ R3,MAIN06
  103.         LJMP KEYP0

  104. KEYPO7:CJNE R0,#0CFH,KEYPO8       ; 输入7音,非7音跳转
  105. SETB P2.4
  106.         MOV R3,#200         
  107. MAIN07:MOV TMOD,#01H
  108.        MOV TL0,#05BH
  109.        MOV TH0,#0FCH
  110.        SETB TR0
  111. WAIT7:JNB TF0,WAIT7
  112.      CLR TF0
  113.      CPL P2.4
  114.           CLR P2.3
  115.           MOV A,#11111000B
  116.                  MOV P0,A
  117.      DJNZ R3,MAIN07
  118.         LJMP KEYP0

  119. KEYPO8:CJNE R0,#0DBH,KEYPO9      ; 输入i音,非i音跳转
  120.        SETB P2.4
  121.            MOV R3,#200      
  122. MAIN08:MOV TMOD,#01H
  123.        MOV TL0,#08FH
  124.        MOV TH0,#0FCH
  125.        SETB TR0
  126. WAIT8:JNB TF0,WAIT8
  127.      CLR TF0
  128.      CPL P2.4
  129.           CLR P2.3
  130.           MOV A,#10000000B
  131.                  MOV P0,A
  132.      DJNZ R3,MAIN08
  133.         LJMP KEYP0
  134. KEYPO9:CJNE R0,#0EBH,KEYPO10    ;跳转到第一首歌程序
  135.        LJMP MUSTART1
  136. KEYPO10:CJNE R0,#0D7H,JIELI     ;跳转到第二首歌程序
  137.        LJMP MUSTART2
  138. JIELI:JMP KEYP0                 ;返回主程序

  139. MUSTART1:                      ;歌曲1的播放程序
  140.      MOV R0,#00H               ;节拍表指针置零
  141.      MOV R1,#00H               ;音符表指针置零
  142. RTAB:MOV A,R0
  143.      MOV DPTR,#RYTH
  144.      MOVC A,@A+DPTR            ;查表法将一个节拍数据取出放R2计数器中
  145.      MOV R2,A
  146. TTAB:MOV A,R1
  147.      MOV DPTR,#TONE
  148.      MOVC A,@A+DPTR
  149.      MOV R3,A                  ;取出音符表高8位
  150.      INC R1                    ;指针加1
  151.      MOV A,R1
  152.      MOV DPTR,#TONE
  153.      MOVC A,@A+DPTR
  154.      MOV R4,A                  ;取出低8位
  155.      SETB P2.4                 ;输出相应音调的方波
  156. LOOP:MOV R5,#3BH
  157. MAIN:MOV TMOD,#01H
  158.      MOV TL0,R4
  159.      MOV TH0,R3
  160.      SETB TR0
  161. WAIT:JNB TF0,WAIT
  162.      CLR TF0
  163.      CPL P2.4
  164. MAYA:JB P3.2,MAYB             ;判断P3.2口是否有为1
  165.      JB P3.4,MAYB             ;判断P3.4口是否有为1
  166.      LJMP RA                  ;P3.4口为0则跳转到程序RA
  167. MAYB:JB P3.3,JIELI            ;判断P3.3口是否有为1
  168.      JB P3.5,JIELI            ;判断P3.5口是否有为1
  169.      LJMP MUSTART2            ;P3.5口为0则放第二首歌
  170. RA:  DJNZ R5,MAIN             ;无打断则继续放第一首歌
  171.      DJNZ R2,LOOP
  172. INC R0                        ;两个表的指针都加1
  173. INC R1
  174. CJNE R1,#88,RTAB              ;判断是否取完
  175. LJMP KEYP0
  176. TONE:
  177. DB 0FBH,68H,0FDH,6EH,0FDH,45H,0FCH,0EFH,0FCH,8FH,0FCH,8FH,0FCH,8FH,0FCH,5BH,0FCH,8FH
  178. DB 0FCH,0EFH,0FDH,45H,0FBH,68H,0FBH,68H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H,0FBH,68H
  179. DB 0FAH,0DBH,0FAH,8CH,0F9H,21H,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FBH,68H,0FBH,68H
  180. DB 0FBH,0E9H,0FBH,0E9H,0FBH,68H,0FBH,0E9H,0FCH,5BH,0FAH,8CH,0FCH,8FH,0FCH,8FH,0FCH,5BH
  181. DB 0FCH,8FH,0FCH,0EFH,0FCH,0EFH,0FCH,0EFH,0FCH,8FH,0FDH,45H,0FDH,6EH,0FCH,0EFH
  182. RYTH:
  183. DB 04,04,04,04,04,04,04,04,04,04
  184. DB 04,05,04,04,04,04,04,04,04,04
  185. DB 04,04,04,06,04,04,04,07,04,04
  186. DB 04,04,04,06,04,04,04,07,04,04
  187. DB 04,04,04,04
  188. MUSTART2:         
  189.      MOV R0,#00H
  190.      MOV R1,#00H

  191. RTAB2:
  192.      MOV A,R1
  193.      MOV DPTR,#TABLE1
  194.      MOVC A,@A+DPTR
  195.      MOV R2,A
  196. TTAB2: MOV A,R1
  197.      MOV DPTR,#TONE2
  198.      MOVC A,@A+DPTR
  199.      MOV R3,A
  200.      INC R1
  201.           MOV A,R1
  202.           MOV DPTR,#TONE2
  203.           MOVC A,@A+DPTR
  204.           MOV R4,A
  205.      SETB P2.4
  206. LOOP2: MOV R5,#9BH
  207. MAIN2:
  208.       MOV TMOD,#01H
  209.      MOV TL0,R4
  210.      MOV TH0,R3
  211.      SETB TR0
  212. WAITR:JNB TF0,WAITR
  213.      CLR TF0
  214.      CPL P2.4
  215. MAYA1:JB P3.3,MAYB1
  216.       JB P3.5,MAYB1
  217.       LJMP RB
  218. MAYB1:JB P3.2,BACK
  219.       JB P3.4,BACK
  220.       LJMP MUSTART1
  221. BACK:LJMP JIELI
  222. RB:  DJNZ R5,MAIN2
  223.      DJNZ R2,LOOP2
  224.    
  225. INC R0
  226. INC R1
  227. CJNE R1,#64,RTAB2
  228. LJMP KEYP0
  229. TONE2:
  230. DB 0FBH,68H,0FDH,6EH,0FDH,45H,0FCH,0EFH,0FCH,8FH,0FCH,8FH,0FCH,8FH,0FCH,5BH,0FCH,8FH
  231. DB 0FCH,0EFH,0FDH,45H,0FBH,68H,0FBH,68H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H,0FBH,68H
  232. DB 0FAH,0DBH,0FAH,8CH,0F9H,21H,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FBH,68H,0FBH,68H
  233. DB 0FBH,0E9H,0FBH,0E9H,0FBH,68H,0FBH,0E9H,0FCH,5BH,0FAH,8CH,0FCH,8FH,0FCH,8FH,0FCH,5BH
  234. DB 0FCH,8FH,0FCH,0EFH,0FCH,0EFH,0FCH,0EFH,0FCH,8FH,0FDH,45H,0FDH,6EH,0FCH,0EFH
  235. TABLE1:
  236. DB 04,04,04,04,04,04,04,04,04,04
  237. DB 04,05,04,04,04,04,04,04,04,04
  238. DB 04,04,04,06,04,04,04,07,04,04
  239. DB 04,04,04,06,04,04,04,07,04,04
  240. DB 04,04,04,04

  241. END
复制代码


电子音调发生器.rar

28.32 KB, 下载次数: 13, 下载积分: 黑币 -5

回复

使用道具 举报

ID:1 发表于 2018-6-20 05:39 | 显示全部楼层
word格式文章能分享吗?
回复

使用道具 举报

ID:765226 发表于 2020-5-30 20:05 | 显示全部楼层
有仿真图吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表