實驗目的: 理解並掌握繼電器和蜂鳴器驅動電路的工作原理;
理解並掌握用單片機 I/O 驅動大電流器件的驅動方法;
實驗模塊:核心板+流水燈與獨立按鍵模塊+繼電器模塊+蜂鳴器模塊;
實驗內容:按鍵控制繼電器和蜂鳴器動作,並用相應的 led 燈進行指示,即第一
個按鍵按下,第一位 led 燈點亮,蜂鳴器響應;第二個按鍵按下,第二位 led
燈點亮,繼電器吸合;第三個按鍵按下,第一個、第二個流水燈點亮,繼電器吸
合、蜂鳴器響應;第四個按鍵按下,恢復初始狀態,所有的 led 燈熄滅、繼電器
斷開、蜂鳴器不響應。
模塊連接圖:
電路原理圖:
電路驅動原理:(1)蜂鳴器發聲原理是電流通過電磁線圈,使電磁線圈產生磁場來驅動振動膜發聲的,僅僅依靠單片機 I/O 不足以驅動蜂鳴器進行工作;蜂鳴器的正極接到三極管的 C 極上面,蜂鳴器的負極接到地端,三極管的基極 B 經過限流電阻后由單片機的 P1.2 引腳控制,當 P1.2 輸出高電平時,三極管 T1 截止,沒有電流流過線圈,蜂鳴器不發聲;當 P1.42 輸出低電平時,三極管導通,這樣蜂鳴器的電流形成回路,發出聲音。因此,我們可以通過程序控制 P1.2 腳的電平來使蜂鳴器發出聲音或關閉。(2)繼電器驅動電路如上,主要通過 PNP 型的三極管 S8550 來實現通過單片機的 I/O 口控制繼電器的吸合與斷開;三極管驅動繼電器主要是應用三極管的放大特性和開關特性;當與單片機相連的 I/0 口輸出低電平時,三極管導通,此時三極管的 E 極(發射極)與 C 極(集電極)間的阻值很小,此時電路相當於 VCC 經過繼電器,再經過通過三極管接到地形成完整回路,繼電器吸合;相反,當與單片機相連的 I/0口輸出高電平時,三極管截止,此時三極管的 E 極(發射極)與 C 極(集電極)間的阻值很大,電路無法形成回路,繼電器不吸合。因此,我們可以通過程序控制與單片機相連 I/O 口的電平來控制繼電器的吸合與關閉。
工程代碼1:功能描述: 控制蜂鳴器實現播放音樂"生日快樂"
硬件連接: 用1位杜邦線將J10_0與J18_bz連接
#include<reg51.h> //包含頭文件
sbit BZ=P0^0; //定義蜂鳴器控制管腳
#define uchar unsigned char
#define uint unsigned int
uchar code SOUNDLONG[25]= //"生日快樂"節拍
{
15,5,20,20,20,40,
15,5,20,20,20,40,
15,5,20,20,20,20,20,
15,5,20,20,20,40
};
uchar code SOUNDTONE[25]= //"生日快樂"音調
{
212,212,190,212,159,169,
212,212,190,212,142,159,
212,212,106,126,159,169,190,
119,119,126,159,142,159
};
//**************************************************************************************************
//延時函數
//**************************************************************************************************
delay(uint time) //int型數據為16位,所以最大值為65535
{
uint i,j; //定義變量i,j,用於循環語句
for(i=0;i<time;i++) //for循環,循環50*time次
for(j=0;j<50;j++); //for循環,循環50次
}
//**************************************************************************************************
//播放音調
//**************************************************************************************************
void Play_music()
{
uint Tone,Long; //定義音調變量
uint i,j,k; //定義
for(i=0;i<25;i++) //"生日快樂"的25種音調
{
Tone=SOUNDTONE[i]; //讀取音調
Long=30*SOUNDLONG[i]; //讀取節拍
for(j=0;j<Long;j++) //輸出不同節拍
{
BZ=0; //關閉蜂鳴器
for(k=0;k<Tone;k++); //Tone的不同來區分7種音調
BZ=1; //打開蜂鳴器
for(k=0;k<Tone;k++); //Tone的不同來區分7種音調
}
}
}
//**************************************************************************************************
//主函數
//**************************************************************************************************
void main()
{
while(1)
{
Play_music(); //播放音樂
BZ=0; //關閉蜂鳴器
delay(10000); //關閉蜂鳴器時間
}
}
硬件連接: 用1位杜邦線將J11_7與J18_K2連接
***************************************************************************************************/
#include "reg51.h" //包含頭文件
#define uint unsigned int
//延時函數
//**************************************************************************************************
delay(uint time) //int型數據為16位,所以最大值為65535
{
uint i,j; //定義變量i,j,用於循環語句
for(i=0;i<time;i++) //for循環,循環50*time次
for(j=0;j<50;j++); //for循環,循環50次
}
//主函數
//**************************************************************************************************
void main() //主函數
{
while(1) //進入while死循環
{
K2=0; //斷開繼電器
delay(5000); //延時
K2=1; //導通繼電器
delay(5000); //延時
}
}