找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4985|回复: 0
收起左侧

《小星星》单片机汇编程序

[复制链接]
ID:433984 发表于 2018-11-27 10:19 | 显示全部楼层 |阅读模式
  1. 只有音乐发声汇编程序,没有加入LED灯,供参考。数据代码已改为小星星发声
  2. ;**********************************************
  3. ORG 0000H
  4. SJMP MAIN
  5. ORG 0BH
  6. AJMP TIME0

  7. ;*************主程序************************

  8. MAIN:        MOV SP,#60
  9. MOV TMOD,#01H        ;T0定时工作方式
  10. MOV IE,#82H        ;CPU 中断允许,T0中断允许

  11. START0:        MOV 30H,#00H        ;TABLE 相对地址指针
  12. NEXT:        MOV A,30H
  13.         MOV DPTR,#TABLE        ;到TABLE处取 简谱码  节拍 码
  14. MOVC A,@A+DPTR
  15. MOV R2,A        ;取到的简谱码  节拍码 暂存于R2中

  16. JZ ENDF        ;取到 00 结束

  17. ANL A,#0FH        ;否,取低四位 节拍 码
  18. MOV R5,A        ;将节拍码存于R5中
  19. MOV A,R2        ;简谱码  节拍 码 给A
  20. SWAP A        ;高4位 与 低4位 交换
  21. ANL A,#0FH        ;取简谱 码
  22. JNZ SING        ;取到的简谱 码不是0,则去发声
  23. CLR TR0        ;取到0 则不发声
  24. SJMP DLY1        ;节拍延时子程序( 随节拍码变化,延时时间不同)

  25. ;---------------发声-----------------------
  26. SING:        DEC A        ;取到的简谱码减1
  27. ;(简谱码计数值16位数据存储首地址从TABLE1 《相对地址》0处开始放起,所以要减1)
  28. MOV 22H,A        ;存入(22H)中
  29. RL A        ;乘2 因为取的数据占两字节(16位)
  30. ;所以指针增加量要乘2

  31. MOV DPTR,#TABLE1
  32. ;...........简谱码转换为相应定时器16位计数值.............
  33. MOVC A,@A+DPTR        ;到TABLE1取相应的高字节计数值
  34. MOV TH0,A        ;高字节计数值存入TH0和(21H)中
  35. MOV 21H,A
  36. MOV A,22H        ;减1的简谱码给A
  37. RL A        ;乘2 因为取的数据占两字节(16位)
  38. ;所以指针增加量要乘2
  39. INC A        ;A 增加 取下一个字节计数值

  40. ;...........简谱码转换为相应定时器16位计数值.............
  41. MOVC A,@A+DPTR        ;到TABLE1取相应的低字节计数值
  42. MOV TL0,A        ;低字节计数值存入TL0和(20H)中
  43. MOV 20H,A
  44. SETB TR0        ;启动T0定时器让喇叭发出不同频率声音

  45. ;---------------节拍延时-------------------
  46. DLY1:        ACALL DELAY        ;基本单位时间为1/4拍 187ms
  47. INC 30H        ;取下一个简谱码  节拍 码
  48. SJMP NEXT

  49. ;---------------歌放完结束---------------
  50. ENDF:        CLR TR0        ;关闭T0定时器
  51. AJMP START0        ;反复循环


  52. ;****T0中断子程序(用来驱动喇叭发出不同频率声音)**************
  53. TIME0:        PUSH ACC
  54. PUSH PSW
  55. MOV TL0,20H        ;重装计数值
  56. MOV TH0,21H
  57. CPL P3.7        ;驱动发声
  58. POP PSW
  59. POP ACC
  60. RETI


  61. ;******************节拍延时187ms****************************
  62. DELAY: MOV R7,#187        ;187ms延时子程序
  63. DLY2:        MOV R4,#02
  64. DLY3:        MOV R3,#248
  65. DJNZ R3,$
  66. DJNZ R4,DLY3
  67. DJNZ R7,DLY2
  68. DJNZ R5,DELAY
  69. RET


  70. ;*******音符T值表(用来让定时器发出不同的频率)**DW 表示一个 计数值 占两个字节存储单元***************

  71. TABLE1:        DW 64260,64400,64524,64580,64684 ;低音SO 低音LA 低音SI  /中音DO 中音RE
  72. DW 64777,64820,64898,64968,65030 ;中音MI 中音FA 中音SO 中音LA 中音SI
  73. DW 65058,65110,65157,65178,65217 ;高音DO 高音RE 高音MI 高音FA 高音SO


  74. ;*********简谱码  节拍码(高4位简谱码 ,低4位节拍码)*************

  75. TABLE:        DB 44H,44H,84H,84H          ; 1 1 5 5        
  76. DB 094H,094H,88h                           ; 6 6 5 -        

  77. DB 74H,74H,63H,63H                ;  4 4 3 3
  78. DB 52H,52H,48h                               ;  2 2 1-

  79. DB 84H,84H,74H,74H                        ; 5 5 4 4
  80. DB 64H,64H,58h                         ; 3 3 2-

  81. DB 84H,84H,74H,74H                        ; 5 5 4 4
  82. DB 64H,64H,58h                                ; 3 3 2-

  83. DB 44H,44H,84H,84H                 ; 1 1 5 5         
  84. DB 094H,094H,88h                     ; 6 6 5 -   

  85. DB 74H,74H,63H,63H                 ;  4 4 3 3
  86. DB 52H,52H,48h                         ;  2 2 1-

  87. END
复制代码


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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