51单片机LED与无源蜂鸣器模块

IO口的使用1

本文主要对51单片机的LED灯的使用以及蜂鸣器的使用进行介绍,其中包括一些实例分析:
1.实现发光二极管的从左到右的流水点亮
2.左右来回循环的流水灯
3.蜂鸣器以一定频率响

文章目录

  • IO口的使用1
    • 一、LED灯
      • 举个栗子一
      • 举个栗子二
    • 二、蜂鸣器
      • 2.1 蜂鸣器的分类
      • 2.2 蜂鸣器的原理图
      • 2.3 举个蜂鸣器的栗子

一、LED灯

片内I/O端口作为输出使用时,最常用的应用是控制相应的I/O引脚上的LED点亮与熄灭。

LED模块的原理图如下所示
在这里插入图片描述

首先可以通过原理图得知

  1. 该单片机一共有八个LED灯,接在P2
  2. 而且这八个LED是共阳LED(公共端为VCC),要使LED点亮只需要在对应的引脚口给低电平即可.

举个栗子一

实验要求:
编程来实现发光二极管的从左到右的流水点亮,即按照LED0→LED1→┉→LED7的顺序,每次点亮一个发光二极管,延时一段时间后熄灭这个发光二极管,然后点亮下一个发光二极管,重复循环。

#define LED_PORT P2 //使用宏定义 P2 端口
void main()
{
u8 i=0;
while(1)
{
for(i=0;i<8;i++)
{
LED_PORT=~(0x01<<i); //将 1 右移 i 位,然后取反将结果赋值到 LED_PORT
delay_10us(50000);
}
}
}

进入 main 函数后首先定义一个变量 i,然后进入 while 循环,由于要实现 8个 LED 从 D1->D8 循环点亮,因此可以使用 for 循环语句循环 8 次,每循环一次,点亮的小灯向右移动一个,而 D1-D8 是连接到 P2.0-P2.7 的,因此输出的低电平要左移一位,因此可以使用 LED_PORT=~(0x01<<i);语句实现。0X01<<i 表示 i增加 1 次,0x01 中的 1 就移动多少位,因为 1(高电平)不会让 LED 点亮,需要取反后变为低电平 0 才能点亮,所以最后的结果需要取反后给 LED_PORT 口,并且每次循环都要延时一段时间,这样才能分辨出来 LED 在流水。

还有另一种写法

#include <reg51.h>
#include <intrins.h>   /*包含移位函数的头文件*/
#define uchar unsigned char       
#define uint unsigned int       
void  delay(uint i)     /*延时函数*/
{ uchar t;while (i--);{ for(t = 0; t < 120; t++); }
}
void  main(  )     /*主程序*/
{ P2=0xfe; while (1){P2=_crol_( 0,1) ; /*C51函数库中的左移函数,P1中的数据循环左移1位*/delay( 500 ); /*500为延时参数,可根据实际需要调整*/}
}

上面代码中需要注意的地方

  1. 头函数使用:使用了#include <intrins.h>,是因为使用了移位函数_crol_(0,1).用于实现循环左移(Circular Rotate Left)操作。。循环左移是指将二进制表示的数据向左移动,超出最高位的位数被移动到最低位,形成一个循环。
  2. P2=0xfe; 是给8051单片机的P2端口赋值,在这个语句中,0xFE 是一个二进制数,它的最低位(最右边的位)是 0,其余各位都是 1,表示将二进制数 1111 1110 。

举个栗子二

在栗子一的基础上,实现左右来回循环的流水灯,实现效果如线图所示:
在这里插入图片描述

#include <reg51.h>
#include <intrins.h>  /*包含左、右移位函数的头文件*/
#define uchar unsigned char       
void  delay(  )
{ uchar i,j;for(i=0; i< 255; i++);for(j=0; j< 255; j++);
}
void  main(  )   /*主函数*/{ uchar i,temp;while (1){ temp=0xfe;   /*初值为0x11111110*/for(i=0; i< 7; i++); { P2=temp;  /* temp 值送入P2口*/delay(  );   /*延时*/temp=_crol_( temp,1) ; /*执行左移函数,temp 中的数据循环左移1位*/}for(i=0; i<7; i++); { P2=temp;  /* temp 值送入P2口*/delay(  );   /*延时*/temp=_cror_( temp,1) ; /*执行右移函数,temp中的数据循环右移1位*/}}
}

二、蜂鸣器

2.1 蜂鸣器的分类

蜂鸣器是一种用来产生声音的装置,根据其结构和工作原理的不同,可以分为多种类型。以下是一些常见的蜂鸣器类型:

  1. 压电蜂鸣器(Piezoelectric Buzzer): 这种蜂鸣器利用压电效应产生声音。当施加电压时,压电材料会发生形变,导致蜂鸣器的振膜振动,从而产生声音。压电蜂鸣器具有体积小、功耗低的优点,广泛用于电子设备中。

  2. 磁性蜂鸣器(Magnetic Buzzer): 这种蜂鸣器使用电磁铁和振膜。当电流通过线圈时,产生的磁场使振膜振动,从而发出声音。磁性蜂鸣器通常比压电蜂鸣器体积稍大,但也被广泛应用。

  3. 电动蜂鸣器(Electromagnetic Buzzer): 这种蜂鸣器包含一个电磁线圈和一个振动片。当电流通过线圈时,产生的磁场引起振动片振动,从而产生声音。电动蜂鸣器在一些应用中常见,但相对而言体积较大。

  4. 有源蜂鸣器(Active Buzzer): 有源蜂鸣器内置振荡器,只需外部提供电源电压即可工作。这种蜂鸣器通常具有简单的驱动电路,方便使用。

  5. 无源蜂鸣器(Passive Buzzer): 无源蜂鸣器需要外部提供振荡信号,相对而言需要更复杂的驱动电路。它不具备自己的振荡器,需要外部提供频率适当的方波信号来驱动。

  6. 数字蜂鸣器: 这种蜂鸣器可以通过数字信号产生不同音调的声音,通常与数字电路和微控制器一起使用。

每种类型的蜂鸣器都有其适用的场景和特点,选择合适的蜂鸣器类型通常取决于应用的具体要求。
左:无源蜂鸣器(体积大,裸露电路板) 右:有源蜂鸣器
在这里插入图片描述

2.2 蜂鸣器的原理图

我的51单片机的蜂鸣器的原理图,而且它是无源蜂鸣器
在这里插入图片描述

在这里插入图片描述

蜂鸣器控制管脚直接连接到 51 单片机的 P2.5 管脚上。图中并没有使用三极管进行电流放大,而是使用 ULN2003 芯片来驱动.当 P25 输出高电平,BEEP 则输出低电平;当 P25 输出低电平,BEEP 则输出高电平,类似一个非门。
开发板上使用的是无源蜂鸣器,它需要一定频率的脉冲(高低电平)才会发声,因此需要让 P25 脚以一定频率不断输出高低电平信号才能控制蜂鸣器发出声音

2.3 举个蜂鸣器的栗子

#include "reg52.h"typedef unsigned int u16; //对系统默认数据类型进行重定义
typedef unsigned char u8;sbit BEEP=P2^5; //将P2.5管脚定义为BEEP/*******************************************************************************
* 函 数 名       : delay_10us
* 函数功能   : 延时函数,ten_us=1时,大约延时10us
* 输    入       : ten_us
* 输    出      : 无
*******************************************************************************/
void delay_10us(u16 ten_us)
{while(ten_us--); 
}void main()
{ u16 i=2000;while(1){while(i--)//循环2000次{BEEP=!BEEP;//产生一定频率的脉冲信号delay_10us(100);}i=0;//清零BEEP=0;//关闭蜂鸣器}  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/264322.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一百九十九回 如何获取设备信息

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 我们在上一章回中介绍了包管理相关的内容&#xff0c;本章回中将介绍如何使用url_launcher包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里介绍url_launcher包主要用来打开…

Python开发运维:Python调用K8S API实现资源管理

目录 一、实验 1.Python操作K8S API获取资源 2.Python操作K8S API创建deployment资源 3.Python操作K8S API删除k8s资源 4.Python操作K8S API修改k8s资源 5.Python操作K8S API查看k8s资源 二、问题 1.Windows11安装kubernetes报错 2.Python通过调用哪些方法实现Pod和De…

【深度学习】注意力机制(一)

本文介绍一些注意力机制的实现&#xff0c;包括SE/ECA/GE/A2-Net/GC/CBAM。 目录 一、SE&#xff08;Squeeze-and-Excitation&#xff09; 二、ECA&#xff08;Efficient Channel Attention&#xff09; 三、GE&#xff08;Gather-Excite&#xff09; 四、A2-Net(Double A…

Python中的汉诺塔问题求解和科赫曲线绘制(递归扩展)

汉诺塔问题求解&#xff0c;在a杆上自上而下、由大到小顺序地串有64个盘子&#xff0c;要求把a杆上的盘子借助c杆全部移动到b杆上。 def hanoi(n,a,b,c):if(n>0):hanoi(n-1,a,c,b) #n-1个盘子&#xff0c;借助b杆放在c杆上print(“move disc no:{} from pile {} to {}”.f…

uniapp移动端悬浮按钮(吸附边缘)

Uniapp移动端悬浮按钮可以通过CSS实现吸附边缘的效果。具体实现步骤如下&#xff1a; html&#xff1a; <movable-area class"movable-area"><movable-view class"movable-view" :position"position" :x"x" :y"y"…

网络协议疑点记录

1.RIP, OSPF,BGP 首先什么是自治系统:治系统就是几个路由器组成了一个小团体 ?,小团体内部使用专用的协议进行通信,而小团体和小团体之间也使用专用的协议进行通信。 IGP RIP 距离矢量路由算法,bellman-ford算法,每个路由节点知道全局的路由信息,通过和邻居交换信息得…

【KCC@南京】KCC南京“数字经济-开源行”活动回顾录

11月26日&#xff0c;由KCC南京、中科南京软件研究所、傲空间、PowerData联合主办的 KCC南京“数字经济-开源行” 的活动已圆满结束。此次活动&#xff0c;3 场主题研讨&#xff0c;11 场分享&#xff0c;现场参会人数 60&#xff0c;线上直播观看 3000&#xff0c;各地小伙伴从…

this.$emit(‘update:isVisible‘, false)作用

这个写是不是很新颖&#xff0c;传父组件传值&#xff01;这是什么鬼。。。 假设你有以下逻辑业务。在A页面弹出一个组件B&#xff0c;A组件里面使用B组件&#xff0c;是否展示B组件你使用的是baselineShow变量控制&#xff01; <BaselineData :isVisible.sync"basel…

某音上很火的圣诞树分享

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 效果截图&#xff08;这里不给动态了&#xff0c;某音到处都是了&#xff09;&#xff1a; 源代码&#xff1a; <script src"…

鸿蒙app获取文本控件按钮控件_修改控件名称_按钮触发事件_提示信息显示

鸿蒙app获取文本控件按钮控件_修改控件名称_按钮触发事件_ 点击启动&#xff1a;提示信息显示 package com.example.myapplication.slice;import com.example.myapplication.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; impor…

golang学习笔记——go流水线示例

range与数组、切片、集合 Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值&#xff0c;在集合中返回 key-value 对。 for 循环的 range 格式可以对 slice、map、数组、字…

fv悬浮球自定义任务正在编辑的文件操作失误丢失找回方法_fv悬浮球自定义任务推荐

场景&#xff1a;自定义任务时不小心点击了取消按钮或者删除按钮导致重要丢失 原因&#xff1a;因为fv悬浮球自定义任务没有撤回按钮 解决方案&#xff1a;使用系统的应用设置把悬浮球强制停止运行&#xff0c;默认&#xff08;开启全部权限&#xff09;然后它会自动重启&…