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次才能够。
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;
}
}
}