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

news2024/12/22 6:35:33

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.coloradmin.cn/o/1322790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试 - 连续出牌数量 - 深度优先搜索dfs算法(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路1、题目解读2、具体步骤 五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08…

Linux--学习记录(3)

G重要编译参数 -g&#xff08;GDB调试&#xff09; -g选项告诉gcc产生能被GNU调试器GDB使用的调试信息&#xff0c;以调试程序编译带调试信息的可执行文件g -g hello.c -o hello编译过程&#xff1a; -E&#xff08;预处理&#xff09; g -E hello.c -o hello.i-S&#xff08;编…

基于springboot+vue 的智能物流管理系统

简介 基于springbootvue 的智能物流管理系统 适用于 设计&#xff0c;课程设计参考与学习用途。仅供学习参考。 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料 **项目编号&#xff1a;springboot074 ** **…

C++刷题 -- KMP算法

C刷题 – KMP算法 文章目录 C刷题 -- KMP算法1.算法讲解2.算法实现 https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/ 1.算法讲解 KMP算法是一种字符串匹配算法&#xff0c;当出现字符串不匹配时&#xff0c;可以记录一部分之…

数据可视化---箱线图

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

【MySQL】Sql优化之索引的使用方式(145)

索引分类 1.单值索引 单的意思就是单列的值&#xff0c;比如说有一张数据库表&#xff0c;表内有三个字段&#xff0c;分别是 id name numberNo&#xff0c;我给name 这个字段加一个索引&#xff0c;这就是单值索引&#xff0c;因为只有name 这一列是索引&#xff1b; 一个表…

k8s-ingress特性 9

TLS加密 创建证书 测试访问 auth认证 创建认证文件 rewrite重定向 进入域名时&#xff0c;会自动重定向到hostname.html 示例&#xff1a; 测试 版本的升级迭代&#xff0c;之前利用控制器进行滚动更新&#xff0c;在升级过程中无法做到快速回滚 更加平滑的升级&#xff1…

猫头虎带您探索StringUtils3之StringUtils.isEmpty()和StringUtils.isBlank()的区别 ‍

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

低代码汹涌澎湃,真的是风口?

“中国的下一个风口是什么&#xff1f;低代码&#xff1f;你赞同吗&#xff1f;” 可以肯定的是&#xff0c;企业想站上未来产业的风口&#xff0c;”数字化“是必经之路。而低代码是企业向制高点突进的手段。产业的风口&#xff0c;就是产业发展的趋势&#xff0c;只有尽力站上…

SQL面试题挑战01:打折日期交叉问题

目录 问题&#xff1a;SQL解答&#xff1a;第一种方式&#xff1a;第二种方式&#xff1a; 问题&#xff1a; 如下为某平台的商品促销数据&#xff0c;字段含义分别为品牌名称、打折开始日期、打折结束日期&#xff0c;现在要计算每个品牌的打折销售天数&#xff08;注意其中的…

JNI 注册

一、 JNI 静态注册 ① 在 Android 的 Java 层定义方法 : 在 MainActivity 类中定义 如下 Native 方法 ; public native String stringFromJNI();② Native 方法实现 : 下面是一个 Native 方法实现的示例 ; extern "C" JNIEXPORT jstring JNICALL Java_kim_hsl_jni_…

VuePress安装及使用——使用 Markdown 创建你自己的博客网站和电子书

目录 前言一、依赖环境二、vuepress 安装和使用1.初始化2.将 VuePress 安装为本地依赖3. package.json 中添加脚本4. 新建 docs 文件夹5.启动6. 效果 三、进阶使用1.新增配置文件2.安装搜索插件3.config.js 中增加配置4.效果展示5.注意 四、使用主题1.安装2. 目录结构说明&…

fastjson反序列化 CVE-2017-18349

fastjson fastjson 是阿里巴巴开发的 java语言编写的高性能 JSON 库,用于将数据在 Json 和 Java Object之间相互转换。它没有用java的序列化机制,而是自定义了一套序列化机制。 提供两个主要接口&#xff1a; JSON.toJSONString 和 JSON.parseObject/JSON.parse 分别实现序列化…

双指针——找到字符串中的所有字母异位词

https://leetcode.cn/problems/find-all-anagrams-in-a-string/description/?envTypestudy-plan-v2&envIdtop-100-liked 双指针&#xff0c;每次都统计出来p长度的滑动窗口里的数字,拿Arrays.equals进行对比,然后滑动一小格&#xff0c;减1加1继续比对即可。 class Solut…

AngularJS

理解实现代码的逻辑为主要&#xff0c;代码怎么写为次要。 参考资料&#xff1a; 《AngularJS入门与进阶》&#xff0c;江荣波著 前端开发常用框架 React&#xff1a;由Facebook开发&#xff0c;用于构建用户界面的JavaScript库&#xff0c;以组件化和虚拟DOM著称。 Angular&…

Github项目推荐-30天Python教程

项目地址 GitHub - Asabeneh/30-Days-Of-Python 项目简述 这是一个非常棒的python入门教程&#xff0c;图文并茂&#xff0c;讲解清晰&#xff0c;十分值得推荐。 项目截图

在 Kubernetes 上部署 Python 3.7、Chrome 和 Chromedriver(版本 114.0.5735.90)的完整指南

一、构建基础镜像 docker build -f /u01/isi/DockerFile . -t thinking_code.com/xhh/crawler_base_image:v1.0.2docker push thinking_code.com/xhh/crawler_base_image:v1.0.2 二、K8s运行Pod 三、DockerFile文件 # 基于镜像基础 FROM python:3.7# 设置代码文件夹工作目录…

删除win10服务

之前工作需要在我电脑上安装了一个天气的服务&#xff0c;我想删掉但是在任务管理器里删不掉&#xff0c;请教了大佬 删除方法是&#xff0c;在开始菜单里找到命令提示符 右键-以管理员方式打开命令提示符 输入sc 按enter键&#xff0c;可以查看一些操作命令 删除服务的话&a…

利用虚继承解决菱形继承(钻石继承)的问题 学习笔记

菱形继承概念&#xff1a; 两个派生类继承同一个基类 又有某个类同时继承两个派生类 这种继承又被称为菱形继承&#xff0c;或者钻石继承 定义一个基类Animal&#xff0c;两个派生类Sheep、Camal&#xff0c;SheepCame继承于两个派生类 class Animal { public:int m_Age; }…

java-sec-code中命令注入

java-sec-code中命令注入 不安全的写法(由于我这里使用的是idea搭建的环境&#xff0c;原本命令执行的sh -c 无法运行&#xff0c;后续的输出也会产生乱码&#xff0c;修改部分代码&#xff0c;以便能更好的显示出效果&#xff0c;linux下使用docker木有问题) //需要导入的库文…