19. “叮咚”門鈴
當(dāng)按下開關(guān)SP1,AT89S51單片機產(chǎn)生“叮咚”聲從P1.0端口輸出到LM386,經(jīng)過放大之后送入喇叭。
2.
(1.把“單片機系統(tǒng)”區(qū)域中的P1.0端口用導(dǎo)線連接到“音頻放大模塊”區(qū)域中的SPKIN端口上;
(2.在“音頻放大模塊”區(qū)域中的SPKOUT端口上接上一個8歐或者是16歐的喇叭;
(3.把“單片機系統(tǒng)”區(qū)域中的P3.7/RD端口用導(dǎo)線連接到“獨立式鍵盤”區(qū)域中的SP1端口上;
4.
(1.我們用單片機實定時/計數(shù)器T0來產(chǎn)生700HZ和500HZ的頻率,根據(jù)定時/計數(shù)器T0,我們?nèi)《〞r250us,因此,700HZ的頻率要經(jīng)過3次250us的定時,而500HZ的頻率要經(jīng)過4次250us的定時。
(2.在設(shè)計過程,只有當(dāng)按下SP1之后,才啟動T0開始工作,當(dāng)T0工作完畢,回到最初狀態(tài)。
(3.“叮”和“咚”聲音各占用0.5秒,因此定時/計數(shù)器T0要完成0.5秒的定時,對于以250us為基準(zhǔn)定時2000次才可以。
6.
T5HZEQU30H
T7HZEQU31H
T05SAEQU32H
T05SBEQU33H
FLAGBIT00H
STOPBIT01H
SP1BITP3.7
ORG00H
LJMPSTART
ORG0BH
LJMPINT_T0
START:MOVTMOD,#02H
MOVTH0,#06H
MOVTL0,#06H
SETBET0
SETBEA
NSP:JBSP1,NSP
LCALLDELY10MS
JBSP1,NSP
SETBTR0
MOVT5HZ,#00H
MOVT7HZ,#00H
MOVT05SA,#00H
MOVT05SB,#00H
CLRFLAG
CLRSTOP
JNBSTOP,$
LJMPNSP
DELY10MS:MOVR6,#20
D1:MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
INT_T0:INCT05SA
MOVA,T05SA
CJNEA,#100,NEXT
MOVT05SA,#00H
INCT05SB
MOVA,T05SB
CJNEA,#20,NEXT
MOVT05SB,#00H
JBFLAG,STP
CPLFLAG
LJMPNEXT
STP:SETBSTOP
CLRTR0
LJMPDONE
NEXT:JBFLAG,S5HZ
INCT7HZ
MOVA,T7HZ
CJNEA,#03H,DONE
MOVT7HZ,#00H
CPLP1.0
LJMPDONE
S5HZ:INCT5HZ
MOVA,T5HZ
CJNEA,#04H,DONE
MOVT5HZ,#00H
CPLP1.0
LJMPDONE
DONE:RETI
END
7.
#include
unsignedchart5hz;
unsignedchart7hz;
unsignedinttcnt;
bitstop;
bitflag;
voidmain(void)
{
unsignedchari,j;
TMOD=0x02;
TH0=0x06;
TL0=0x06;
ET0=1;
EA=1;
while(1)
{
if(P3_7==0)
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
if(P3_7==0)
{
t5hz=0;
t7hz=0;
tcnt=0;
flag=0;
stop=0;
TR0=1;
while(stop==0);
}
}
}
}
voidt0(void)interrupt1using0
{
tcnt++;
if(tcnt==2000)
{
tcnt=0;
if(flag==0)
{
flag=~flag;
}
else
{
stop=1;
TR0=0;
}
}
if(flag==0)
{
t7hz++;
if(t7hz==3)
{
t7hz=0;
P1_0=~P1_0;
}
}
else
{
t5hz++;
if(t5hz==4)
{
t5hz=0;
P1_0=~P1_0;
}
}
}
評論