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