
使用單一按鈕推進電路至下一個邏輯狀態的應用非常廣泛。通常狀態只有“開”(on)與“關”(off)兩種,但也可以有更多狀態。該電路的核心是一個可切換的觸發器(toggle flip-flop),若需要更多狀態,則可使用計數器或移位寄存器,這些組件會對頻率信號的變化作出反應。
一個理想的電路必須可以防止機械按鈕的觸點抖動,避免每次按下和釋放按鈕時產生多個“頻率”脈沖。此外,最好能在電源啟動時初始化為特定狀態,并在用戶按下按鈕的瞬間立即觸發狀態改變。圖1所示的基本電路就具備這些特性。

圖1:U1是一個肖特基反相器,U2為D型觸發器。圖中所用二極管為小信號肖特基二極管。按鈕為常開型。電阻與電容的具體數值請參見正文中的說明。
電源開啟與初始化行為
當VDD電源斷電并放電后,肖特基二極管會將電容C1與C2放電至接近0V。時間常數R1C1應該設計為比電源開啟時間長10倍以上,以確保電路在開機時會將U2的Q輸出清零(reset)。
此外,于電源啟動時,U1的輸出會先為邏輯高電平,然后經由R2對C2充電而轉為低電平。由于U2觸發器的作用時序為由低電平到高電平,這使得Q保持初始化為低電平。R2C2的時間常數應設計在約1秒量級。
消除觸點抖動的設計細節
R3為可選組件,用來限制當常開按鈕被按下時C2初始放電的電流。如果使用R3,其阻值應設計使得在觸點抖動期間(約10毫秒內)能幾乎完全放電C2。
C2與R2,加上肖特基反相器U1,共同組成一個防觸點抖動結構,能防止抖動造成額外的觸發信號,否則會誤觸發觸發器U2。當按鈕釋放、R2開始對C2充電后,若此時再次按下按鈕,U2不會再被觸發,因為U1的輸出仍為高電平,無法從低電平轉換為高電平來觸發U2,這是設計R2C2時間常數不宜過大的理由之一。
圖2顯示如何將圖1的基本電路延伸為一個10位的多狀態開關,該開關在任一時刻僅有一個輸出為高電平,也可以擴展作為數模轉換器(DAC)。

圖2:一個10位開關電路實操案例,每次僅有一個高電平輸出,也可以擴展為DAC。
若需要的狀態少于10個,可將U2a的D輸入連接至U3的其他輸出引腳。對于DAC應用,可通過12個電阻將分辨率擴展至12位。雖然理論上能做到12位,但即使采用0.1%精度的電阻,其單調性仍會低于12位,而實際精度會更低。為避免對輸出造成過重負載,各電阻阻值應不低于10kΩ。
