|
1.實(shí)驗(yàn)任務(wù) 當(dāng)按下開(kāi)關(guān)SP1,AT89S51單片機(jī)產(chǎn)生“叮咚”聲從P1.0端口輸出到LM386,經(jīng)過(guò)放大之后送入喇叭。 2.電路原理圖 3.系統(tǒng)板上硬件連線 (1.把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0端口用導(dǎo)線連接到“音頻放大模塊”區(qū)域中的SPKIN端口上; (2.在“音頻放大模塊”區(qū)域中的SPKOUT端口上接上一個(gè)8歐或者是16歐的喇叭; (3.把“單片機(jī)系統(tǒng)”區(qū)域中的P3.7/RD端口用導(dǎo)線連接到“獨(dú)立式鍵盤”區(qū)域中的SP1端口上; 4.程序設(shè)計(jì)方法 (1.我們用單片機(jī)實(shí)定時(shí)/計(jì)數(shù)器T0來(lái)產(chǎn)生700HZ和500HZ的頻率,根據(jù)定時(shí)/計(jì)數(shù)器T0,我們?nèi)《〞r(shí)250us,因此,700HZ的頻率要經(jīng)過(guò)3次250us的定時(shí),而500HZ的頻率要經(jīng)過(guò)4次250us的定時(shí)。 (2.在設(shè)計(jì)過(guò)程,只有當(dāng)按下SP1之后,才啟動(dòng)T0開(kāi)始工作,當(dāng)T0工作完畢,回到最初狀態(tài)。 (3.“叮”和“咚”聲音各占用0.5秒,因此定時(shí)/計(jì)數(shù)器T0要完成0.5秒的定時(shí),對(duì)于以250us為基準(zhǔn)定時(shí)2000次才可以。 5. 匯編源程序 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
6. C語(yǔ)言源程序 #include 〈AT89X51.H〉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; } } } |