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;//关闭蜂鸣器
 }  
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ebullient第一阶段开发小结

一. 简介 距离Ebullient硬件发布已有一段时间&#xff0c;小一个月吧&#xff0c;在这段时间内在努力的编写代码&#xff0c;现在终于完成了第一阶段的功能设计&#xff0c;算是一个小型的样机吧&#xff0c;基本的代码框架基本确定了&#xff0c;相信后续的会快一点(希望如此…

创建自定义 gym env 教程

gym-0.26.1 pygame-2.1.2 自定义环境 GridWolrdEnv 教程参考 官网自定义环境 &#xff0c;我把一些可能有疑惑的地方讲解下。 首先整体文件结构, 这里省略了wrappers gym-examples/main.py # 这个是测试自定义的环境setup.py gym_examples/__init__.pyenvs/__init__.pygri…

Oracle的学习心得和知识总结(三十一)| ODBC开放式数据库连接概述及应用程序开发

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

网工内推 | 美团、中通快递,网络运维,最高30K*15薪

01 美团 招聘岗位&#xff1a;网络运维开发工程师 职责描述&#xff1a; 1.负责新零售业务门店/仓库网络的日常运维、故障处理、应急响应&#xff0c;保障网络及相关业务的稳定运行&#xff0c;处理突发事件、对疑难问题进行跟踪并最终解决。 2.负责新零售业务门店/仓库网络的…

Neural Network——神经网络

1.feature reusing——特征复用 1.1 什么是特征复用 回顾我们之前所学习的模型&#xff0c;本质上都是基于线性回归&#xff0c;但却都可以运用于非线性相关的数据&#xff0c;包括使用了如下方法 增加更多的特征产生新的特征&#xff08;多项式回归&#xff09;核函数 在本身…

router全局守卫beforeEach导致infinite redirect in navigation guard 问题

问题背景 路由加了全局守卫之后&#xff0c;报错&#xff1a; 分析原因 内部判断&#xff0c;导致路由产生了死循环 错误代码 router.beforeEach((to, from, next) > {if (store.getters.token) {if (to.path /login) {next(/)} else {next()}} else {next(/login)} })…

MeterSphere files 任意文件读取漏洞复现 (CVE-2023-25573)

0x01 产品简介 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能,全面兼容 JMeter、Selenium 等主流开源标准。 0x02 漏洞概述 MeterSphere /api/jmeter/download/files 路径文件存在文件读取漏洞,攻击者可通过该漏洞读取系统重要…

卸载MySQL——Windows

1. 停止MySQL服务 winR 打开运行&#xff0c;输入 services.msc 点击 “确定” 调出系统服务。 我这里只有一个&#xff0c;只要是以MySQL开头的全部停止 2. 卸载MySQL相关组件 打开控制面板 —> 卸载程序 —> 卸载MySQL相关所有组件 3. 删除MySQL安装目录 一般是C:\P…

win11 wsl2安装

参考视频 微软商店直接下载以后&#xff08;提前打开虚拟化&#xff0c;linux子系统选项&#xff09; 设置为wsl2 wsl --set-default-version 2然后直接打开即可 可能遇到的问题 WSL2 占位程序接收到错误数据。 Error code: Wsl/Service/0x800706f7 管理员权限启动,重启 …

蓝桥杯嵌入式——串口

CUBE里配置成异步模式&#xff0c;设置波特率&#xff0c;打开中断&#xff08;先配置LCD再配置串口&#xff09;&#xff1a; 串口发送 main.c #include "string.h" char temp[20]; sprintf(temp,"Hello World\r\n"); HAL_UART_Transmit(&huart1,(…

AutoSAR(基础入门篇)1.3-AutoSAR的概述

目录 一、到底什么是AutoSAR 1、大白话来讲 2、架构上来讲 应用软件层(APPL) 实时运行环境&#xff08;RTE&#xff09; 基础软件层(BSW) 3、工具链上来讲 二、AutoSAR的目标 一、到底什么是AutoSAR 1、大白话来讲 AUTOSAR 就是AUTomotive Open System ARchitecture的…

文件操作学习总结

磁盘上的⽂件是⽂件。 但是在程序设计中&#xff0c;我们⼀般谈的⽂件有两种&#xff1a; 程序⽂件、数据⽂件 &#xff08;从⽂件功能的⻆度来分类 的&#xff09;。 程序⽂件 &#xff1a; 程序⽂件包括源 程序⽂件&#xff08;后缀为.c&#xff09; , ⽬标⽂件&#xff0…

【操作系统】|浅谈IO模型

I/O&#xff08;Input/Output&#xff09;指的是应用程序与外部环境之间的数据交换。I/O 操作涉及从外部设备&#xff08;如硬盘、网络、键盘、鼠标等&#xff09;读取数据或向外部设备写入数据。 操作系统启动后&#xff0c;将会开启保护模式&#xff1a;将内存分为内核空间&…

Linux I/O神器之io_uring

io_uring 是 Linux 于 2019 年加入到内核的一种新型异步 I/O 模型&#xff0c;io_uring 主要为了解决 原生AIO&#xff08;Native AIO&#xff09; 存在的一些不足之处。下面介绍一下原生 AIO 的不足之处&#xff1a; 系统调用开销大&#xff1a;提交 I/O 操作和获取 I/O 操作…

Unity中 URP 下的棋盘格Shader

文章目录 前言一、制作思路法1&#xff1a;使用纹理采样后&#xff0c;修改重铺效果法2&#xff1a;计算实现 二、粗略计算实现棋盘格效果1、使 uv.x < 0.5 区域 0 。反之&#xff0c; 0.52、使 uv.y < 0.5 区域 0 。反之&#xff0c; 0.53、使两个颜色相加4、取小数…

Selenium Wire - 扩展 Selenium 能够检查浏览器发出的请求和响应

使用 Selenium 进行自动化操作时&#xff0c;会存在很多的特殊场景&#xff0c;比如会修改请求参数、响应参数等。 本篇将介绍一款 Selenium 的扩展&#xff0c;即能够检查浏览器发出的请求和响应 - Selenium Wire。 简介 Selenium Wire 扩展了 Selenium 的 Python 绑定&…

修复泰坦陨落2缺少msvcr120.dll的5种方法,亲测有效

游戏《泰坦陨落2》缺少msvcr120.dll的问题困扰着许多玩家。这个问题的主要原因可能是系统环境不完整、软件或游戏版本不匹配、DLL文件丢失或损坏以及杀毒软件误判等。msvcr120.dll是Microsoft Visual C 2013 Redistributable的一个组件&#xff0c;它包含了许多运行库文件&…

JavaScript中的await-async-事件循环-异常处理

一、async、await 1.异步函数 async function async关键字用于声明一个异步函数&#xff1a; async是asynchronous单词的缩写&#xff0c;异步、非同步&#xff1b; sync是synchronous单词的缩写&#xff0c;同步、同时&#xff1b; async异步函数可以有很多中写法&#x…

Java 数据结构篇-实现堆的核心方法与堆的应用(实现 TOP-K 问题:最小 k 个数)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 堆的说明 2.0 堆的成员变量及其构造方法 3.0 实现堆的核心方法 3.1 实现堆的核心方法 - 获取堆顶元素 peek() 3.2 实现堆的核心方法 - 下潜 down(int i) 3.3 实…

关键点检测_labelme标注的json,随机裁剪(添加偏移相当于数据增强)

import json import os import numpy as np import cv2 import glob import csv import random#通过表格获取csv # def csv_tws(root, name): # csv_path = root+"/csv/{}.png.csv".format(name)