蓝桥杯单片机-蜂鸣器与继电器
蜂鸣器简单发生很简单,P0-6给1就响,重点是ULN2003,看小蜜蜂的视频得知这是达林顿管,见上图,最主要的就是达林顿管内加了非门,输入与输出反向;HC138_C=1;继电器的简单操作跟蜂鸣器一样简单,P04给1就吸合,最主要的还是达林顿管的部分,输入与输出反向。但是在写程序的时候要注意,蜂鸣器给电之后,延时一段时间,要断电即给0;void buzzer()//蜂鸣器。void relay()/
1:首先是蜂鸣器



蜂鸣器简单发生很简单,P0-6给1就响,重点是ULN2003,看小蜜蜂的视频得知这是达林顿管,见上图,最主要的就是达林顿管内加了非门,输入与输出反向;
但是在写程序的时候要注意,蜂鸣器给电之后,延时一段时间,要断电即给0;不然会一直响,继电器也应该同理。
2:然后就是继电器

继电器的简单操作跟蜂鸣器一样简单,P04给1就吸合,最主要的还是达林顿管的部分,输入与输出反向。同时也并联着一个led灯,用于限流和显示继电器吸合情况。
3:最后总结,考验的还是关于继电器的配置
4:代码例子:
#include <REGX52.H>
sbit HC138_A=P2^5;
sbit HC138_B=P2^6;
sbit HC138_C=P2^7;
//首先是初始化。用switch语句选择
void registerr(unsigned char x) //寄存器选择
{
switch(x)
{
case 4 :{HC138_A=0;HC138_B=0;HC138_C=1;}break;//Y4C为1
case 5 :{HC138_A=1;HC138_B=0;HC138_C=1;}break;//Y5c为1
}
}
void delay(unsigned int t) //延时函数
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<110;j++);
}
void led_run()//亮灯
{
unsigned char i;
for(i=0;i<5;i++)
{
P0=0xff;
delay(1000);
P0=0x00;
delay(1000);
}
}
void buzzer() //蜂鸣器
{
P0=0x40;
delay(1000);
P0=0x00;
}
void relay() //继电器
{
P0=0x10;
delay(1000);
P0=0x00;
delay(1000);
}
void main() //主函数
{
unsigned char i;
P0=0x00;
while(1)
{
registerr(4);
led_run();
registerr(5);
for(i=0;i<3;i++)
{
buzzer();
delay(10000);
}
for(i=0;i<3;i++)
{
relay();
delay(10000);
}
}
}
5:代码现象:
一排灯亮三次,再到蜂鸣器响三次,再到继电器吸合三次
6:不足
在上电时蜂鸣器会响,在主函数的一开始就把P0赋为0,还是会响;
2025-2-26:改进了一点,再程序里面加入一个close函数,用来关闭蜂鸣器,但是还是有不足,不知为何他有时候还是会响,有时候就能成功。
2025-3-21 一上电就会响,已经解决了,只需要在main函数的外面打开蜂鸣器寄存器,再给p0赋值00就可以了
更多推荐



所有评论(0)