usdx 1.02 版本為連續調諧,包含非業餘頻段。使用不便,原因如下:一是無法滿足驗機標準,二是調整頻率也不方便。修改程式碼如下,即可實現跳過非業餘頻段的效果,例如旋鈕可以從 7.2MHz 旋轉到 10.1MHz。
// ================= 短波頻段摘要 =================
定義一個結構,其內容如下:
uint32\_t lo;
uint32_t hi;
} ham_band_t;
// 業餘頻率表 (依照頻率由高到低排列,必須維持順序)
靜態常數 ham\_band\_t ham\_bands\[] = {
{ 3500000UL, 3900000UL } // 80m
{ 5351500UL, 5366500UL } // 60m
{ 7000000UL, 7200000UL } // 40m
{10100000UL, 10150000UL}, // 30m
{14000000UL, 14350000UL}, // 20m
{18068000UL, 18168000UL}, // 17m
{21000000UL, 21450000UL}, // 15m
{28000000UL, 29700000UL} // 10公尺
};
靜態變數 `HAM_BAND_CNT` 的值為:
`ham_bands`陣列的大小除以 `ham_bands[0]` 的大小。
//步驟 > 0 : 調高頻率 (超過 hi → 下一個頻段)
// 步驟 < 0 : 降低頻率 (從 lo 以下 → 前一個 band.hi)
靜態函數,將 `f` 值限制在 `steps` 個步驟內。
const uint8_t N = ham_bands 陣列的大小 / ham_bands[0] 的大小;
對於 (uint8\_t i = 0; i < N;i++) {
如果 (f >= 哈姆波頻段.lo && f <= 哈姆波頻段.hi)
返回 f;
if (f < ham_bands[i].lo) {
// 向下调 → 跳到前一个业余波段末尾
if (steps < 0) {
if (i == 0) return ham_bands[N-1].hi; // 最前 → 跳到最后波段
return ham_bands[i-1].hi;
}
// 向上调 → 跳到该波段起始
return ham_bands[i].lo;
}
}
// 超過最後一個波段
如果 (步驟) < 0)
返回 `ham_bands[N-1].hi` 的值。
返回 ham\_bands\[0].lo;
}
// ================== HAM 頻段說明結束 ==================
void process_encoder_tuning_步驟(int8_t steps)
{
`int32_t stepval = stepsizes[stepsize];`
//如果步驟大小 < 步驟 100) freq %= 1000; // 當頻率調整和步長確定後 > 100Hz 後,可以忽略細節調整。
如果 rit 為 true
rit += 步驟 \* 步長值;
rit = max(-9999, min(9999, rit));
} 否則 {
freq += 步驟 \* 步長值;
freq = wrap_to_ham(freq, steps); // 原來程式碼已刪除,修改為逐行處理
}
change = true;
}

