?? “梁祝”樂曲演奏電路.txt
字號:
“梁祝”樂曲演奏電路
//信號定義與說明:
//clk_4Hz: 用于控制音長(節拍)的時鐘頻率;
//clk_6MHz: 用于產生各種音階頻率的基準頻率;
//speaker: 用于激勵揚聲器的輸出信號,本例中為方波信號;
//high, med, low:分別用于顯示高音、中音和低音音符,各驅動一個數碼管來顯示。
module song(clk_6MHz,clk_4Hz,speaker,high,med,low);
input clk_6MHz, clk_4Hz;
output speaker;
output[3:0] high,med,low;
reg[3:0] high,med,low;
reg[13:0] divider,origin;
reg[7:0] counter;
reg speaker;
wire carry;
assign carry=(divider==16383);
always @(posedge clk_6MHz)
begin if(carry) divider=origin;
else divider=divider+1;
end
always @(posedge carry)
begin
speaker=~speaker; //2 分頻產生方波信號
end
always @(posedge clk_4Hz)
begin
case({high,med,low}) //分頻比預置
'b000000000011: origin=7281;
'b000000000101: origin=8730;
'b000000000110: origin=9565;
'b000000000111: origin=10310;
'b000000010000: origin=10647;
'b000000100000: origin=11272;
'b000000110000: origin=11831;
'b000001010000: origin=12556;
'b000001100000: origin=12974;
'b000100000000: origin=13516;
'b000000000000: origin=16383;
endcase
end
always @(posedge clk_4Hz)
begin
if(counter==63) counter=0; //計時,以實現循環演奏
else counter=counter+1;
case(counter) //記譜
0: {high,med,low}='b000000000011; //低音“3”
1: {high,med,low}='b000000000011; //持續4 個時鐘節拍
2: {high,med,low}='b000000000011;
3: {high,med,low}='b000000000011;
4: {high,med,low}='b000000000101; //低音“5”
5: {high,med,low}='b000000000101; //發3 個時鐘節拍
6: {high,med,low}='b000000000101;
7: {high,med,low}='b000000000110; //低音“6”
8: {high,med,low}='b000000010000; //中音“1”
9: {high,med,low}='b000000010000; //發3 個時鐘節拍
10: {high,med,low}='b000000010000;
11: {high,med,low}='b000000100000; //中音“2”
12: {high,med,low}='b000000000110; //低音“6”
13: {high,med,low}='b000000010000;
14: {high,med,low}='b000000000101;
15: {high,med,low}='b000000000101;
16: {high,med,low}='b000001010000; //中音“5”
17: {high,med,low}='b000001010000; //發3 個時鐘節拍
18: {high,med,low}='b000001010000;
19: {high,med,low}='b000100000000; //高音“1”
20: {high,med,low}='b000001100000;
21: {high,med,low}='b000001010000;
22: {high,med,low}='b000000110000;
23: {high,med,low}='b000001010000;
24: {high,med,low}='b000000100000; //中音“2”
25: {high,med,low}='b000000100000; //持續11 個時鐘節拍
26: {high,med,low}='b000000100000;
27: {high,med,low}='b000000100000;
28: {high,med,low}='b000000100000;
29: {high,med,low}='b000000100000;
30: {high,med,low}='b000000100000;
31: {high,med,low}='b000000100000;
32: {high,med,low}='b000000100000;
33: {high,med,low}='b000000100000;
34: {high,med,low}='b000000100000;
35: {high,med,low}='b000000110000; //中音“3”
36: {high,med,low}='b000000000111; //低音“7”
37: {high,med,low}='b000000000111;
38: {high,med,low}='b000000000110; //低音“6”
39: {high,med,low}='b000000000110;
40: {high,med,low}='b000000000101; //低音“5”
41: {high,med,low}='b000000000101;
42: {high,med,low}='b000000000101;
43: {high,med,low}='b000000000110; //低音“6”
44: {high,med,low}='b000000010000; //中音“1”
45: {high,med,low}='b000000010000;
46: {high,med,low}='b000000100000; //中音“2”
47: {high,med,low}='b000000100000;
48: {high,med,low}='b000000000011; //低音“3”
49: {high,med,low}='b000000000011;
50: {high,med,low}='b000000010000; //中音“1”
51: {high,med,low}='b000000010000;
52: {high,med,low}='b000000000110;
53: {high,med,low}='b000000000101; //低音“5”
54: {high,med,low}='b000000000110;
55: {high,med,low}='b000000010000; //中音“1”
56: {high,med,low}='b000000000101; //低音“5”
57: {high,med,low}='b000000000101; //持續8 個時鐘節拍
58: {high,med,low}='b000000000101;
59: {high,med,low}='b000000000101;
60: {high,med,low}='b000000000101;
61: {high,med,low}='b000000000101;
62: {high,med,low}='b000000000101;
63: {high,med,low}='b000000000101;
endcase
end
endmodule
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -