历史上的今天
今天是:2025年07月26日(星期六)
2021年07月26日 | 51单片机学习笔记【七】——蜂鸣器和继电器
2021-07-26 来源:eefocus
一.蜂鸣器
1.蜂鸣器基础
蜂鸣器按驱动方式分为有源蜂鸣器和无源蜂鸣器,有源蜂鸣器内部带振荡器,接入一个低电平便会响;无源蜂鸣器不带振荡器,让它响要接500HZ~4.5KHZ之间的脉冲信号来驱动才会响。很实验采用的是无源蜂鸣器。
2.电路原理图

3.实验说明
本实验通过控制蜂鸣器分别在4KHZ和1KHZ频率下发声,实验接线为JP8接P1.5。
4.程序源代码
/**************************************
> File Name: 蜂鸣器实验
> Author: pengshp
> Mail: pengshp3@outlook.com
> Date: 2015年 7 月 25 日
***************************************/
#include #define uchar unsigned char #define uint unsigned int sbit BUZZ = P1^5; unsigned char T0RH=0; unsigned char T0RL=0; void OpenBuzz(unsigned int frequ); void StopBuzz(); void main() { unsigned int i; EA =1; //使能全局中断 TMOD = 0x01; //配置T0工作模式1 while(1) { OpenBuzz(4000); //以4KHZ频率启动蜂鸣器 for(i=0; i<40000; i++); StopBuzz(); //停止蜂鸣器 for(i=0; i<40000; i++); OpenBuzz(1000); //以1KHZ频率启动蜂鸣器 for(i=0; i<40000; i++); StopBuzz(); for(i=0; i<40000; i++); } } void OpenBuzz(unsigned int frequ) { unsigned int reload; //计算所需定时器重载值 reload = 65536 - (11059200/12)/(frequ*2); T0RH = (unsigned char)(reload >>8); T0RL = (unsigned char)reload; TH0 = 0xFF; TL0 = 0xFE; ET0 = 1; //使能T0中断 TR0 = 1; //启动T0 } void StopBuzz() { ET0 = 0; TR0 = 0; } void InterruptTimer0() interrupt 1 { TH0 = T0RH; TL0 = T0RL; BUZZ = ~BUZZ; } 二.继电器 1.继电器原理 通过输出不同的电平,控制继电器的开合,实现对电路的控制,不通电是闭合于常开引脚,通电时闭合于常闭引脚。主要参数有额定工作电压,额定工作电流,触点负荷,可控制交流和直流电。 2.电路原理图 3.实验说明 本实验通过按键K1控制继电器的开与合,开始继电器工作,按下K1继电器停止工作,再按下继电器又开始工作,如此重复。接线为J2接P1.4,K1接P0.0。 4程序源代码 /************************************** > File Name: 继电器实验 > Author: pengshp > Mail: pengshp3@outlook.com > Date: 2015年 7 月 25 日 ***************************************/ #include #define uchar unsigned char #define uint unsigned int sbit RELAY=P1^4; //继电器位声明 sbit K1=P0^0; //开关K1位声明 void Delay(uint ms) { uchar i; while(ms--) { for(i=120;i>0;i--); } } void main() { RELAY=0; //继电器工作 K1=1; while(1) { if(!K1) { Delay(50); if(K1==0) { while(!K1); //等待按键释放 RELAY=~RELAY; //继电器取反 } } } } 
史海拾趣
|
#include #include //寄存器宏定义 #define WRITE_SECOND 0x80 #define WRITE_MINUTE 0x82 #define WRITE_HOUR &n ...… 查看全部问答> |
|
以前的帖子,重新整理到这个版面。 OSAL通过一个16位宽度的数组来管理事件,意味着OSAL最多可以支持16个事件,其中最高位(0x08000,SYS_EVENT_MSG)系统保留,用户可以使用的事件有15个。事件的使用很简单:1)需要找个地方定义事件的ID ...… 查看全部问答> |
|
求助各位高手: CFB的电流噪声分为同相端的和反相端的,VFB只给出一种电流噪声。那么在VFB噪声计算中,电流噪声只在同相端或反相端添加还是两端都添加,只不过值是相同的?十分感谢! [ 本帖最后由 mazzz 于 2011-11-17 23:36 编辑 ]… 查看全部问答> |




