用于计算定时器初值
This commit is contained in:
parent
c5e448b3a6
commit
6ce65791ab
23
other/csv2json.py
Normal file
23
other/csv2json.py
Normal file
@ -0,0 +1,23 @@
|
||||
#coding=utf-8
|
||||
import csv
|
||||
import json
|
||||
|
||||
# 文件路径
|
||||
file_path = 'note_data.txt'
|
||||
|
||||
# 读取文件并转换为 JSON
|
||||
notes_dict = {}
|
||||
with open(file_path, mode='r', encoding='utf-8') as file:
|
||||
reader = csv.DictReader(file, delimiter='\t')
|
||||
|
||||
for row in reader:
|
||||
note, frequency, wave_length = row['note'], row['frequency'], row['wave_length']
|
||||
notes_dict[note] = {'frequency': float(frequency), 'wave_length': float(wave_length)}
|
||||
|
||||
# 将数据转换为 JSON 并打印
|
||||
json_data = json.dumps(notes_dict, indent=4)
|
||||
print(json_data)
|
||||
|
||||
# 写入 JSON 文件
|
||||
with open('note_data.json', 'w', encoding='utf-8') as json_file:
|
||||
json_file.write(json_data)
|
66
other/note.py
Normal file
66
other/note.py
Normal file
@ -0,0 +1,66 @@
|
||||
#coding=utf-8
|
||||
import json
|
||||
|
||||
# 常量定义
|
||||
MCU_CLK = 1000000 # 12MHz,内部时钟12分频
|
||||
MCU_T = 1000000/MCU_CLK # 单位时间为1us
|
||||
# 音符映射
|
||||
note_mapping = {
|
||||
1: 'C4', 2: 'D4', 3: 'E4', 4: 'F4', 5: 'G4', 6: 'A4', 7: 'B4'
|
||||
}
|
||||
|
||||
# 根据频率计算计数器初值
|
||||
def freq_to_num(freq):
|
||||
T = 10**6/freq # 单位时间为1us
|
||||
time0 = int(2**16 - (T/2) / MCU_T)
|
||||
time0H = hex(time0>>8)
|
||||
time0L = hex(time0&0xff)
|
||||
print("freq = %0.2fHz, T = %dus, time0 = %d, time0H = %s, time0L = %s" % (freq, T, time0, time0H, time0L))
|
||||
return time0H, time0L
|
||||
|
||||
# 根据音符名称获取频率
|
||||
def note_to_freq(note_name):
|
||||
try:
|
||||
# 读取 JSON 文件
|
||||
with open('note_data.json', 'r') as file:
|
||||
notes = json.load(file)
|
||||
|
||||
# 获取特定音符的频率
|
||||
frequency = notes[note_name]['frequency']
|
||||
return frequency
|
||||
|
||||
except KeyError:
|
||||
return None
|
||||
except Exception as e:
|
||||
print(f"An error occurred: {e}")
|
||||
return None
|
||||
|
||||
# 根据音符名称获取计数器初值
|
||||
def note_to_num(note_name):
|
||||
frequency = note_to_freq(note_name.upper())
|
||||
if frequency is not None:
|
||||
print(f"{note_name}的频率为{frequency}Hz。")
|
||||
freq_to_num(frequency)
|
||||
else:
|
||||
print(f"{note_name} 不是有效的音符。")
|
||||
|
||||
|
||||
# 转换函数
|
||||
def map_tones_to_notes(tone_array):
|
||||
notes = []
|
||||
for tone in tone_array:
|
||||
# 将音调映射到相应的音符
|
||||
note = note_mapping.get((tone - 1) % 7 + 1 if tone <= 7 else (tone - 1) % 7 + 8)
|
||||
notes.append(note)
|
||||
return notes
|
||||
|
||||
# 原始数据:小星星歌曲
|
||||
soundtones = [
|
||||
1,1,5,5,6,6,5,4,4,3,3,2,2,1,
|
||||
5,5,4,4,3,3,2,5,5,4,4,3,3,2,
|
||||
1,1,5,5,6,6,5,4,4,3,3,2,2,1
|
||||
]
|
||||
if __name__ == '__main__':
|
||||
mapped_notes = map_tones_to_notes(soundtones)
|
||||
for note in mapped_notes:
|
||||
note_to_num(note)
|
342
other/note_data.json
Normal file
342
other/note_data.json
Normal file
@ -0,0 +1,342 @@
|
||||
{
|
||||
"C0": {
|
||||
"frequency": 16.35,
|
||||
"wave_length": 2109.89
|
||||
},
|
||||
"C#0": {
|
||||
"frequency": 17.32,
|
||||
"wave_length": 1991.47
|
||||
},
|
||||
"D0": {
|
||||
"frequency": 18.35,
|
||||
"wave_length": 1879.69
|
||||
},
|
||||
"D#0": {
|
||||
"frequency": 19.45,
|
||||
"wave_length": 1774.2
|
||||
},
|
||||
"E0": {
|
||||
"frequency": 20.6,
|
||||
"wave_length": 1674.62
|
||||
},
|
||||
"F0": {
|
||||
"frequency": 21.83,
|
||||
"wave_length": 1580.63
|
||||
},
|
||||
"F#0": {
|
||||
"frequency": 23.12,
|
||||
"wave_length": 1491.91
|
||||
},
|
||||
"G0": {
|
||||
"frequency": 24.5,
|
||||
"wave_length": 1408.18
|
||||
},
|
||||
"G#0": {
|
||||
"frequency": 25.96,
|
||||
"wave_length": 1329.14
|
||||
},
|
||||
"A0": {
|
||||
"frequency": 27.5,
|
||||
"wave_length": 1254.55
|
||||
},
|
||||
"A#0": {
|
||||
"frequency": 29.14,
|
||||
"wave_length": 1184.13
|
||||
},
|
||||
"B0": {
|
||||
"frequency": 30.87,
|
||||
"wave_length": 1117.67
|
||||
},
|
||||
"C1": {
|
||||
"frequency": 32.7,
|
||||
"wave_length": 1054.94
|
||||
},
|
||||
"C#1": {
|
||||
"frequency": 34.65,
|
||||
"wave_length": 995.73
|
||||
},
|
||||
"D1": {
|
||||
"frequency": 36.71,
|
||||
"wave_length": 939.85
|
||||
},
|
||||
"D#1": {
|
||||
"frequency": 38.89,
|
||||
"wave_length": 887.1
|
||||
},
|
||||
"E1": {
|
||||
"frequency": 41.2,
|
||||
"wave_length": 837.31
|
||||
},
|
||||
"F1": {
|
||||
"frequency": 43.65,
|
||||
"wave_length": 790.31
|
||||
},
|
||||
"F#1": {
|
||||
"frequency": 46.25,
|
||||
"wave_length": 745.96
|
||||
},
|
||||
"G1": {
|
||||
"frequency": 49.0,
|
||||
"wave_length": 704.09
|
||||
},
|
||||
"G#1": {
|
||||
"frequency": 51.91,
|
||||
"wave_length": 664.57
|
||||
},
|
||||
"A1": {
|
||||
"frequency": 55.0,
|
||||
"wave_length": 627.27
|
||||
},
|
||||
"A#1": {
|
||||
"frequency": 58.27,
|
||||
"wave_length": 592.07
|
||||
},
|
||||
"B1": {
|
||||
"frequency": 61.74,
|
||||
"wave_length": 558.84
|
||||
},
|
||||
"C2": {
|
||||
"frequency": 65.41,
|
||||
"wave_length": 527.47
|
||||
},
|
||||
"C#2": {
|
||||
"frequency": 69.3,
|
||||
"wave_length": 497.87
|
||||
},
|
||||
"D2": {
|
||||
"frequency": 73.42,
|
||||
"wave_length": 469.92
|
||||
},
|
||||
"D#2": {
|
||||
"frequency": 77.78,
|
||||
"wave_length": 443.55
|
||||
},
|
||||
"E2": {
|
||||
"frequency": 82.41,
|
||||
"wave_length": 418.65
|
||||
},
|
||||
"F2": {
|
||||
"frequency": 87.31,
|
||||
"wave_length": 395.16
|
||||
},
|
||||
"F#2": {
|
||||
"frequency": 92.5,
|
||||
"wave_length": 372.98
|
||||
},
|
||||
"G2": {
|
||||
"frequency": 98.0,
|
||||
"wave_length": 352.04
|
||||
},
|
||||
"G#2": {
|
||||
"frequency": 103.83,
|
||||
"wave_length": 332.29
|
||||
},
|
||||
"A2": {
|
||||
"frequency": 110.0,
|
||||
"wave_length": 313.64
|
||||
},
|
||||
"A#2": {
|
||||
"frequency": 116.54,
|
||||
"wave_length": 296.03
|
||||
},
|
||||
"B2": {
|
||||
"frequency": 123.47,
|
||||
"wave_length": 279.42
|
||||
},
|
||||
"C3": {
|
||||
"frequency": 130.81,
|
||||
"wave_length": 263.74
|
||||
},
|
||||
"C#3": {
|
||||
"frequency": 138.59,
|
||||
"wave_length": 248.93
|
||||
},
|
||||
"D3": {
|
||||
"frequency": 146.83,
|
||||
"wave_length": 234.96
|
||||
},
|
||||
"D#3": {
|
||||
"frequency": 155.56,
|
||||
"wave_length": 221.77
|
||||
},
|
||||
"E3": {
|
||||
"frequency": 164.81,
|
||||
"wave_length": 209.33
|
||||
},
|
||||
"F3": {
|
||||
"frequency": 174.61,
|
||||
"wave_length": 197.58
|
||||
},
|
||||
"F#3": {
|
||||
"frequency": 185.0,
|
||||
"wave_length": 186.49
|
||||
},
|
||||
"G3": {
|
||||
"frequency": 196.0,
|
||||
"wave_length": 176.02
|
||||
},
|
||||
"G#3": {
|
||||
"frequency": 207.65,
|
||||
"wave_length": 166.14
|
||||
},
|
||||
"A3": {
|
||||
"frequency": 220.0,
|
||||
"wave_length": 156.82
|
||||
},
|
||||
"A#3": {
|
||||
"frequency": 233.08,
|
||||
"wave_length": 148.02
|
||||
},
|
||||
"B3": {
|
||||
"frequency": 246.94,
|
||||
"wave_length": 139.71
|
||||
},
|
||||
"C4": {
|
||||
"frequency": 261.63,
|
||||
"wave_length": 131.87
|
||||
},
|
||||
"C#4": {
|
||||
"frequency": 277.18,
|
||||
"wave_length": 124.47
|
||||
},
|
||||
"D4": {
|
||||
"frequency": 293.66,
|
||||
"wave_length": 117.48
|
||||
},
|
||||
"D#4": {
|
||||
"frequency": 311.13,
|
||||
"wave_length": 110.89
|
||||
},
|
||||
"E4": {
|
||||
"frequency": 329.63,
|
||||
"wave_length": 104.66
|
||||
},
|
||||
"F4": {
|
||||
"frequency": 349.23,
|
||||
"wave_length": 98.79
|
||||
},
|
||||
"F#4": {
|
||||
"frequency": 369.99,
|
||||
"wave_length": 93.24
|
||||
},
|
||||
"G4": {
|
||||
"frequency": 392.0,
|
||||
"wave_length": 88.01
|
||||
},
|
||||
"G#4": {
|
||||
"frequency": 415.3,
|
||||
"wave_length": 83.07
|
||||
},
|
||||
"A4": {
|
||||
"frequency": 440.0,
|
||||
"wave_length": 78.41
|
||||
},
|
||||
"A#4": {
|
||||
"frequency": 466.16,
|
||||
"wave_length": 74.01
|
||||
},
|
||||
"B4": {
|
||||
"frequency": 493.88,
|
||||
"wave_length": 69.85
|
||||
},
|
||||
"C5": {
|
||||
"frequency": 523.25,
|
||||
"wave_length": 65.93
|
||||
},
|
||||
"C#5": {
|
||||
"frequency": 554.37,
|
||||
"wave_length": 62.23
|
||||
},
|
||||
"D5": {
|
||||
"frequency": 587.33,
|
||||
"wave_length": 58.74
|
||||
},
|
||||
"D#5": {
|
||||
"frequency": 622.25,
|
||||
"wave_length": 55.44
|
||||
},
|
||||
"E5": {
|
||||
"frequency": 659.25,
|
||||
"wave_length": 52.33
|
||||
},
|
||||
"F5": {
|
||||
"frequency": 698.46,
|
||||
"wave_length": 49.39
|
||||
},
|
||||
"F#5": {
|
||||
"frequency": 739.99,
|
||||
"wave_length": 46.62
|
||||
},
|
||||
"G5": {
|
||||
"frequency": 783.99,
|
||||
"wave_length": 44.01
|
||||
},
|
||||
"G#5": {
|
||||
"frequency": 830.61,
|
||||
"wave_length": 41.54
|
||||
},
|
||||
"A5": {
|
||||
"frequency": 880.0,
|
||||
"wave_length": 39.2
|
||||
},
|
||||
"A#5": {
|
||||
"frequency": 932.33,
|
||||
"wave_length": 37.0
|
||||
},
|
||||
"B5": {
|
||||
"frequency": 987.77,
|
||||
"wave_length": 34.93
|
||||
},
|
||||
"C6": {
|
||||
"frequency": 1046.5,
|
||||
"wave_length": 32.97
|
||||
},
|
||||
"C#6": {
|
||||
"frequency": 1108.73,
|
||||
"wave_length": 31.12
|
||||
},
|
||||
"D6": {
|
||||
"frequency": 1174.66,
|
||||
"wave_length": 29.37
|
||||
},
|
||||
"D#6": {
|
||||
"frequency": 1244.51,
|
||||
"wave_length": 27.72
|
||||
},
|
||||
"E6": {
|
||||
"frequency": 1318.51,
|
||||
"wave_length": 26.17
|
||||
},
|
||||
"F6": {
|
||||
"frequency": 1396.91,
|
||||
"wave_length": 24.7
|
||||
},
|
||||
"F#6": {
|
||||
"frequency": 1479.98,
|
||||
"wave_length": 23.31
|
||||
},
|
||||
"G6": {
|
||||
"frequency": 1567.98,
|
||||
"wave_length": 22.0
|
||||
},
|
||||
"G#6": {
|
||||
"frequency": 1661.22,
|
||||
"wave_length": 20.77
|
||||
},
|
||||
"A6": {
|
||||
"frequency": 1760.0,
|
||||
"wave_length": 19.6
|
||||
},
|
||||
"A#6": {
|
||||
"frequency": 1864.66,
|
||||
"wave_length": 18.5
|
||||
},
|
||||
"B6": {
|
||||
"frequency": 1975.53,
|
||||
"wave_length": 17.46
|
||||
},
|
||||
"C7": {
|
||||
"frequency": 2093.0,
|
||||
"wave_length": 1.0
|
||||
}
|
||||
}
|
86
other/note_data.txt
Normal file
86
other/note_data.txt
Normal file
@ -0,0 +1,86 @@
|
||||
note frequency wave_length
|
||||
C0 16.35 2109.89
|
||||
C#0 17.32 1991.47
|
||||
D0 18.35 1879.69
|
||||
D#0 19.45 1774.2
|
||||
E0 20.60 1674.62
|
||||
F0 21.83 1580.63
|
||||
F#0 23.12 1491.91
|
||||
G0 24.50 1408.18
|
||||
G#0 25.96 1329.14
|
||||
A0 27.50 1254.55
|
||||
A#0 29.14 1184.13
|
||||
B0 30.87 1117.67
|
||||
C1 32.70 1054.94
|
||||
C#1 34.65 995.73
|
||||
D1 36.71 939.85
|
||||
D#1 38.89 887.1
|
||||
E1 41.20 837.31
|
||||
F1 43.65 790.31
|
||||
F#1 46.25 745.96
|
||||
G1 49.00 704.09
|
||||
G#1 51.91 664.57
|
||||
A1 55.00 627.27
|
||||
A#1 58.27 592.07
|
||||
B1 61.74 558.84
|
||||
C2 65.41 527.47
|
||||
C#2 69.30 497.87
|
||||
D2 73.42 469.92
|
||||
D#2 77.78 443.55
|
||||
E2 82.41 418.65
|
||||
F2 87.31 395.16
|
||||
F#2 92.50 372.98
|
||||
G2 98.00 352.04
|
||||
G#2 103.83 332.29
|
||||
A2 110.00 313.64
|
||||
A#2 116.54 296.03
|
||||
B2 123.47 279.42
|
||||
C3 130.81 263.74
|
||||
C#3 138.59 248.93
|
||||
D3 146.83 234.96
|
||||
D#3 155.56 221.77
|
||||
E3 164.81 209.33
|
||||
F3 174.61 197.58
|
||||
F#3 185.00 186.49
|
||||
G3 196.00 176.02
|
||||
G#3 207.65 166.14
|
||||
A3 220.00 156.82
|
||||
A#3 233.08 148.02
|
||||
B3 246.94 139.71
|
||||
C4 261.63 131.87
|
||||
C#4 277.18 124.47
|
||||
D4 293.66 117.48
|
||||
D#4 311.13 110.89
|
||||
E4 329.63 104.66
|
||||
F4 349.23 98.79
|
||||
F#4 369.99 93.24
|
||||
G4 392.00 88.01
|
||||
G#4 415.30 83.07
|
||||
A4 440.00 78.41
|
||||
A#4 466.16 74.01
|
||||
B4 493.88 69.85
|
||||
C5 523.25 65.93
|
||||
C#5 554.37 62.23
|
||||
D5 587.33 58.74
|
||||
D#5 622.25 55.44
|
||||
E5 659.25 52.33
|
||||
F5 698.46 49.39
|
||||
F#5 739.99 46.62
|
||||
G5 783.99 44.01
|
||||
G#5 830.61 41.54
|
||||
A5 880.00 39.2
|
||||
A#5 932.33 37
|
||||
B5 987.77 34.93
|
||||
C6 1046.50 32.97
|
||||
C#6 1108.73 31.12
|
||||
D6 1174.66 29.37
|
||||
D#6 1244.51 27.72
|
||||
E6 1318.51 26.17
|
||||
F6 1396.91 24.7
|
||||
F#6 1479.98 23.31
|
||||
G6 1567.98 22
|
||||
G#6 1661.22 20.77
|
||||
A6 1760.00 19.6
|
||||
A#6 1864.66 18.5
|
||||
B6 1975.53 17.46
|
||||
C7 2093.00 1
|
Loading…
x
Reference in New Issue
Block a user