本節(jié)介紹使用AT89C2051制作的一種發(fā)音電路,各種聲音通過編程實現(xiàn),靈活方便。其原理圖如圖2 - 81所示。
該電路利用方波諧波成份豐富的特點,編程采用計時器延遲法發(fā)音,即每個音的半周期計時中斷一次,而使輸出Pl.0(或其他I/O口)反相,重復執(zhí)行產(chǎn)生某種頻率的信號。例如:中音DO的頻率為523Hz,其周期為1 912 μs,若初始Pl. 0=1,經(jīng)956 μS后,應使Pl.0=0,再經(jīng)956 μs恢復Pl.0-1,這樣就可發(fā)出中音DO。
若選擇振蕩頻率為12 Hz,則機器周期為1μs,計數(shù)器每1 μs計數(shù)一次。以中音DO(f=523 Hz)為例,只要計數(shù)956次即1 912 μs的半周期,產(chǎn)生計時中斷將輸出反相,所以計數(shù)器的計數(shù)初始值須設置為64 580。其計算方法如下:
N=65536一半個周期數(shù)
由于每1 μS計數(shù)一次,若半周期(T/2)為956 μs,則半周期數(shù)為956,而
N=65536-T/2=65536-(1912/2)=64580(T為該音階的周期)
根據(jù)上述公式及各音階頻率(見表2 - 13),可以計算出各音階的計數(shù)初始值(設f=12 MHz),將該值列表存于ROM中,根據(jù)實際需要取出存入計數(shù)器(THO、TLO),即可以發(fā)出報警聲、電話鈴聲或樂曲等各種聲音。
表2 -13 音階、頻率、計數(shù)初值對照表
該電路無需譯碼電路,根據(jù)輸入IN1、IN2選擇發(fā)出聲音的種類,根據(jù)跳線Sl、S2選擇發(fā)出聲音的長度即可(圖中僅畫出4種示意)。
IN1、IN2=00時,發(fā)出報警(滴滴滴)聲;
IN1、IN2-01時,發(fā)出停機(滴滴一滴滴)聲;
IN1、IN2 =10時,發(fā)出開機(嗚)聲。
該電路已應用于抽油機工作狀態(tài)監(jiān)視系統(tǒng),成本低,調(diào)試簡便,收到了很好的效果。
發(fā)聲源程序:
ORG 00H