手把手教你学习单片机(2.2)——缝鸣器电路及实验 [原创]转贴请标明出处!ahai0306/mcu_51 http://blog.**/ahai0306/ 前段时间写了手把手教你学习单片机的第一章和第二章的第一节。 首先看一下蜂鸣器的常用电路
在本电路中,BB标号直接连接到单片机的IO口上,本开发板是连接到了P3.3上了,由于P3口本身带弱上拉,所以此电路中不需要再接上拉电阻了。 此电路的三极管电路,就是一个(三极管)BJT反向器,当BB是低电平时,此三极管处于饱和状态,电路导通,电流流过蜂鸣器,此时蜂鸣器发声;反之,当BB是高电平时,此三极管处于截止状态,电路关断,时蜂鸣器停止发声。 蜂鸣器发声的长短和频率,完全有单片机控制导通时间,一般都是设定一段延时就可以了,长短可以自己实验。 下面给出C语言程序和汇编程序(带注释):
#include <reg52.h> //调用头文件(单片机内部的寄存器定义)
/******本段为硬件I/O口定义********/
sbit LED0 = P0 ^ 0; //发光二极管0
sbit BUZZ = P3 ^ 3; //蜂鸣器
/**************************************************
** 函数名称: dellay
** 入口参数:h(双字节型)
** 出口参数:无
** 功能描述: 短暂延时,使用11.0592晶体,约0.01MS
****************************************************/
void dellay(unsigned int h)
{
while(h--);
//0.01MS
}
/************主程序**************/
main()
{
while(1)
//单片机在此反复循环
{
LED0=0; //发光管0亮
BUZZ=0; //蜂鸣器叫
dellay(40000);
LED0=1; //发光管0灭
BUZZ=1; //蜂鸣器停
dellay(60000);
}
} ;***********本段为硬件I/O口定义************ LED0 EQU P0.0 BUZZ EQU P3.3
ORG 0000H ;上电后程序从这里运行
AJMP MAIN
ORG 0100H MAIN:
ORL P0,#01H
CLR LED0 ;LED0发光二极管亮
CLR BUZZ ;蜂鸣器叫
LCALL DELAY400MS
SETB LED0
;LED0发光二极管灭
SETB BUZZ ;蜂鸣器停
LCALL DELAY600MS
LJMP MAIN
DELAY400MS: MOV R5,#40 ;延时子程序,延时约0.4秒 D10: MOV R6,#20 D20: MOV R7,#248
DJNZ R7,$
DJNZ R6,D20
DJNZ R5,D10
RET DELAY600MS: MOV R5,#60
;延时子程序,延时约0.6秒 D11: MOV R6,#20 D21: MOV R7,#248
DJNZ R7,$
DJNZ R6,D21
DJNZ R5,D11
RET END 我的新Q Q:464976346 http://blog.**/ahai0306/(我的博客首页)
相关链接:http://blog.**/ahai0306/ |