找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2046|回复: 0
打印 上一主题 下一主题
收起左侧

“梁祝”乐曲演奏vhdl源程序

[复制链接]
跳转到指定楼层
楼主
ID:704585 发表于 2020-6-16 10:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. “梁祝”乐曲演奏电路
  2. //信号定义与说明:
  3. //clk_4Hz: 用于控制音长(节拍)的时钟频率;
  4. //clk_6MHz: 用于产生各种音阶频率的基准频率;
  5. //speaker: 用于激励扬声器的输出信号,本例中为方波信号;
  6. //high, med, low:分别用于显示高音、中音和低音音符,各驱动一个数码管来显示。
  7. module song(clk_6MHz,clk_4Hz,speaker,high,med,low);
  8. input clk_6MHz, clk_4Hz;
  9. output speaker;
  10. output[3:0] high,med,low;
  11. reg[3:0] high,med,low;
  12. reg[13:0] divider,origin;
  13. reg[7:0] counter;
  14. reg speaker;
  15. wire carry;
  16. assign carry=(divider==16383);
  17. always @(posedge clk_6MHz)
  18. begin if(carry) divider=origin;
  19. else divider=divider+1;
  20. end
  21. always @(posedge carry)
  22. begin
  23. speaker=~speaker; //2 分频产生方波信号
  24. end
  25. always @(posedge clk_4Hz)
  26. begin
  27. case({high,med,low}) //分频比预置
  28. 'b000000000011: origin=7281;
  29. 'b000000000101: origin=8730;
  30. 'b000000000110: origin=9565;
  31. 'b000000000111: origin=10310;
  32. 'b000000010000: origin=10647;
  33. 'b000000100000: origin=11272;
  34. 'b000000110000: origin=11831;
  35. 'b000001010000: origin=12556;
  36. 'b000001100000: origin=12974;
  37. 'b000100000000: origin=13516;
  38. 'b000000000000: origin=16383;
  39. endcase
  40. end
  41. always @(posedge clk_4Hz)
  42. begin
  43. if(counter==63) counter=0; //计时,以实现循环演奏
  44. else counter=counter+1;
  45. case(counter) //记谱
  46. 0: {high,med,low}='b000000000011; //低音“3”
  47. 1: {high,med,low}='b000000000011; //持续4 个时钟节拍
  48. 2: {high,med,low}='b000000000011;
  49. 3: {high,med,low}='b000000000011;
  50. 4: {high,med,low}='b000000000101; //低音“5”
  51. 5: {high,med,low}='b000000000101; //发3 个时钟节拍
  52. 6: {high,med,low}='b000000000101;
  53. 7: {high,med,low}='b000000000110; //低音“6”
  54. 8: {high,med,low}='b000000010000; //中音“1”
  55. 9: {high,med,low}='b000000010000; //发3 个时钟节拍
  56. 10: {high,med,low}='b000000010000;
  57. 11: {high,med,low}='b000000100000; //中音“2”
  58. 12: {high,med,low}='b000000000110; //低音“6”
  59. 13: {high,med,low}='b000000010000;
  60. 14: {high,med,low}='b000000000101;
  61. 15: {high,med,low}='b000000000101;
  62. 16: {high,med,low}='b000001010000; //中音“5”
  63. 17: {high,med,low}='b000001010000; //发3 个时钟节拍
  64. 18: {high,med,low}='b000001010000;
  65. 19: {high,med,low}='b000100000000; //高音“1”
  66. 20: {high,med,low}='b000001100000;
  67. 21: {high,med,low}='b000001010000;
  68. 22: {high,med,low}='b000000110000;
  69. 23: {high,med,low}='b000001010000;
  70. 24: {high,med,low}='b000000100000; //中音“2”
  71. 25: {high,med,low}='b000000100000; //持续11 个时钟节拍
  72. 26: {high,med,low}='b000000100000;
  73. 27: {high,med,low}='b000000100000;
  74. 28: {high,med,low}='b000000100000;
  75. 29: {high,med,low}='b000000100000;
  76. 30: {high,med,low}='b000000100000;
  77. 31: {high,med,low}='b000000100000;
  78. 32: {high,med,low}='b000000100000;
  79. 33: {high,med,low}='b000000100000;
  80. 34: {high,med,low}='b000000100000;
  81. 35: {high,med,low}='b000000110000; //中音“3”
  82. 36: {high,med,low}='b000000000111; //低音“7”
  83. 37: {high,med,low}='b000000000111;
  84. 38: {high,med,low}='b000000000110; //低音“6”
  85. 39: {high,med,low}='b000000000110;
  86. 40: {high,med,low}='b000000000101; //低音“5”
  87. 41: {high,med,low}='b000000000101;
  88. 42: {high,med,low}='b000000000101;
  89. 43: {high,med,low}='b000000000110; //低音“6”
  90. 44: {high,med,low}='b000000010000; //中音“1”
  91. 45: {high,med,low}='b000000010000;
  92. 46: {high,med,low}='b000000100000; //中音“2”
  93. 47: {high,med,low}='b000000100000;
  94. 48: {high,med,low}='b000000000011; //低音“3”
  95. 49: {high,med,low}='b000000000011;
  96. 50: {high,med,low}='b000000010000; //中音“1”
  97. 51: {high,med,low}='b000000010000;
  98. 52: {high,med,low}='b000000000110;
  99. 53: {high,med,low}='b000000000101; //低音“5”
  100. 54: {high,med,low}='b000000000110;
  101. 55: {high,med,low}='b000000010000; //中音“1”
  102. 56: {high,med,low}='b000000000101; //低音“5”
  103. 57: {high,med,low}='b000000000101; //持续8 个时钟节拍
  104. 58: {high,med,low}='b000000000101;
  105. 59: {high,med,low}='b000000000101;
  106. 60: {high,med,low}='b000000000101;
  107. 61: {high,med,low}='b000000000101;
  108. 62: {high,med,low}='b000000000101;
  109. 63: {high,med,low}='b000000000101;
  110. endcase
  111. end
  112. endmodule
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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