歡迎您光臨本站 登入註冊首頁

「叮咚聲」的電子門鈴

admin @ 2014-03-14 , reply:0

概述

1.實驗任務當按下開關SP1,AT89S51單片機產生“叮咚”聲從P1.0埠輸出到LM386,經過放大之後送入喇叭。2.電路原理圖ͼ4.19.13.系統板上硬體連線(1.把&……

1. 實驗任務
當按下開關SP1,AT89S51單片機產生“叮咚”聲從P1.0埠輸出到LM386,經過放大之後送入喇叭。
2. 電路原理圖


ͼ4.19.1
3. 系統板上硬體連線
(1. 把“單片機系統”區域中的P1.0埠用導線連接到“音頻放大模塊”區域中的SPK IN埠上;
(2. 在“音頻放大模塊”區域中的SPK OUT埠上接上一個8歐或者是16歐的喇叭;
(3. 把“單片機系統”區域中的P3.7/RD埠用導線連接到“獨立式鍵盤”區域中的SP1埠上;
4. 程序設計方法
(1. 我們用單片機實定時/計數器T0來產生700HZ和500HZ的頻率,根據定時/計數器T0,我們取定時250us,因此,700HZ的頻率要經過3次250us的定時,而500HZ的頻率要經過4次250us的定時。
(2. 在設計過程,只有當按下SP1之後,才啟動T0開始工作,當T0工作完畢,回到最初狀態。
(3. “叮”和“咚”聲音各佔用0.5秒,因此定時/計數器T0要完成0.5秒的定時,對於以250us為基準定時2000次才可以。
5. 程序框圖
主程序框圖


T0中斷服務程序框圖




ͼ4.19.2
6. 彙編源程序
T5HZ EQU 30H
T7HZ EQU 31H
T05SA EQU 32H
T05SB EQU 33H
FLAG BIT 00H
STOP BIT 01H
SP1 BIT P3.7
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START: MOV TMOD,#02H
MOV TH0,#06H
MOV TL0,#06H
SETB ET0
SETB EA
NSP: JB SP1,NSP
LCALL DELY10MS
JB SP1,NSP
SETB TR0
MOV T5HZ,#00H
MOV T7HZ,#00H
MOV T05SA,#00H
MOV T05SB,#00H
CLR FLAG
CLR STOP
JNB STOP,$
LJMP NSP
DELY10MS: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
INT_T0: INC T05SA
MOV A,T05SA
CJNE A,#100,NEXT
MOV T05SA,#00H
INC T05SB
MOV A,T05SB
CJNE A,#20,NEXT
MOV T05SB,#00H
JB FLAG,STP
CPL FLAG
LJMP NEXT
STP: SETB STOP
CLR TR0
LJMP DONE
NEXT: JB FLAG,S5HZ
INC T7HZ
MOV A,T7HZ
CJNE A,#03H,DONE
MOV T7HZ,#00H
CPL P1.0
LJMP DONE
S5HZ: INC T5HZ
MOV A,T5HZ
CJNE A,#04H,DONE
MOV T5HZ,#00H
CPL P1.0
LJMP DONE
DONE: RETI
END
7. C語言源程序
#include
unsigned char t5hz;
unsigned char t7hz;
unsigned int tcnt;
bit stop;
bit flag;
void main(void)
{
unsigned char i,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);
}
}
}
}
void t0(void) interrupt 1 using 0
{
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;
}
}
}

[admin via 研發互助社區 ] 「叮咚聲」的電子門鈴已經有2616次圍觀

http://cocdig.com/docs/show-post-480.html