【51单片机】蜂鸣器实验和动态数码管实验

目录

  • 蜂鸣器实验
    • 蜂鸣器介绍
    • 硬件设计
    • 软件设计
  • 动态数码管实验
    • 多位数码管简介
      • 74HC245 芯片简介
      • 74HC138 芯片简介
    • 硬件设计
    • 软件设计

橙色

蜂鸣器实验

蜂鸣器介绍

蜂鸣器采用直流电压供电,分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

无论是压电式蜂鸣器还是电磁式蜂鸣器,都有有源和无源的区分。有源是指蜂鸣器本身内含振荡电路,直接给它一定的电压就可以响;无源是需要靠外部提供一定频率的脉冲信号才可以响的。这里的“源”不是指电源,而是指蜂鸣器内部是否含有振荡电路

硬件设计

对于本章要实现蜂鸣器的控制, 我们能否直接使用 STC89CXX 的 IO 口驱动呢? 答案是否定的, 因为 51 单片机 IO 口的驱动能力较弱(即使外接上拉电阻) , 而蜂鸣器驱动需要约 30mA, 所以非常困难,即使可以驱动, 那对于整个芯片的其 IO 剩下驱动能力就更加弱甚至无法工作。所以我们不会直接使用 IO 口驱动蜂鸣器, 而是通过三极管把电流放大后再驱动蜂鸣器, 这样 51 单片机的 IO 口只需要提供不到 1mA 的电流就可控制蜂鸣器。所以我们也经常说到 51 单片机芯片是用来做控制的, 而不是驱动。

我们普中 51-单核-A3&A4 开发板上的蜂鸣器模块电路如下图所示:
在这里插入图片描述
从上图中可以看出, 该电路是集成的, 蜂鸣器控制管脚直接连接到 51 单片机的 P1^5 IO 口上。

开发板上使用的是无源蜂鸣器, 它需要一定频率的脉冲(高低电平) 才会发声, 图中 TP1 PNP 三极管起到一个电流放大作用, 从而可以驱动蜂鸣器。 当 J7 端子有一个高电平进来时, PNP 三极管 TP1 截止, 蜂鸣器不得电,当 J7 端子有一个低电平进来时, PNP 三极管 TP1 导通, 蜂鸣器得电, 如果 J7 端子有一个一定频率的脉冲信号(高低电平不断翻转) 时, 无源蜂鸣器发出声音。
在这里插入图片描述
通过电阻 R2 和 PNP 三极管 TP1 进行电流放大, 从而驱动蜂鸣器。 电阻 R1是一个上拉电阻, 用来防止蜂鸣器误发声。 当 BEEP 引脚输出低电平时, PNP 三极管导通, 蜂鸣器发声; 当 BEEP 引脚输出高电平时, PNP 三极管截止, 蜂鸣器停止发声。对其中原理不清楚的可以参考该篇文章:PNP与NPN两种三极管使用方法

如果要想 51 单片机控制蜂鸣器, 就必须将单片机管脚通过导线连接到 J7 端子上。 本章所要实现的功能是: 让蜂鸣器发出声音。 由于蜂模块电路是集成的,所以直接使用单片机管脚即可。

软件设计

本章所要实现的功能是: 让蜂鸣器发出声音, 即让 P1.5 管脚输出一个低电平, 完成后可再让 P1.5 输出一定频率的脉冲控制有源蜂鸣器。

#include "reg52.h"
#include<intrins.h>typedef unsigned int u16;
typedef unsigned char u8;sbit beep=P1^5;void delay(u16 i)
{while(i--);
}void main()	
{while(1){beep=~beep;delay(100);//通过修改此延时时间达到不同的发声效果	}}

使用 sbit 关键字来定义 P1.5 管脚, 定义好后即可使用 beep 来替代 P1.5口的操作。 主函数功能非常简单, 直接进入 while 循环, 在循环内不断对 beep取反, 然后延时一定时间, 即 P1.5 间隔一定时间输出高低电平, 这样就会产生脉冲信号。

动态数码管实验

多位数码管简介

多位数码管, 即是两个或两个以上单个数码管并列集中在一起形成一体的数码管。 当多位一体时, 它们内部的公共端是独立的, 独立的公共端可以控制多位一体中的哪一位数码管点亮,通常叫做“位选线” 。本开发板中在公共端处连接了74HC138芯片。只需单片机 3 个 IO 口就可以实现 8 个位选管脚的控制, 大大节省了芯片的 IO 资源。

而负责显示什么数字的段线全部是连接在一起的,连接在一起的段线可以控制这个能点亮数码管亮什么数字, 通常叫做“段选线” , 有了这两个线后, 通过单片机及外部驱动电路就可以控制任意的数码管显示任意的数字了。本开发板中在段选线处连接了74HC245芯片

位选线控制多位一体中的哪一位数码管点亮,段选线控制这个能点亮数码管亮什么数字

74HC245 芯片简介

74HC245 是一种三态输出、 八路信号收发器, 主要应用于大屏显示, 以及其它的消费类电子产品中增加驱动。

三态输出,也称为三态门或三态电路,是一种特殊的数字电路,其输出可以有三种状态:逻辑“0”、逻辑“1”和高阻态。高阻态是一种特殊的输出状态,它既不是高电平也不是低电平,而是处于一种"高阻抗"或"悬浮"状态,也就是说,它不对电路中的其他部分产生任何影响。当输出处于高阻态时,外部电路可以控制其状态,而不会影响其他与该输出连接的电路。三态电路的输出逻辑状态的控制,是通过一个输入引脚实现的。当输入引脚为低电平时,三态电路呈现正常的“0”或“1”的输出;当输入引脚为高电平时,三态电路给出高阻态输出。

管脚功能定义
在这里插入图片描述
在这里插入图片描述
从上面的管脚功能定义说明及真值表可以知道该芯片使用方法非常简单, 给 OE 使能管脚 低电平, DIR 管脚为高电平,其传输方向是 A->B 输出;DIR 管脚为低电平,其传输方向是 B->A, 至于输出高电平还是输出低电平取决于输入端的状态, 如果输入为低电平, 输出即为低; 输入为高电平, 输出即为高。 如果 OE 使能管脚为高电平,不论 DIR 管脚是高还是低, 输出是高组态。

通常我们使用 74HC245 芯片用作驱动只会让其在一个方向输出, 即 DIR 管脚为高电平, 传输方向是 A->B。

74HC138 芯片简介

74HC138D 是一种三通道输入、 八通道输出译码器

管脚功能定义
在这里插入图片描述

管脚说明
在这里插入图片描述
真值表
在这里插入图片描述

从上面的管脚功能定义说明及真值表可以知道该芯片使用方法非常简单, 给E1、 E2 使能管脚低电平, E3 管脚为高电平, 至于哪个管脚输出有效电平(低电平),要看 A0, A1, A2 输入管脚的电平状态。

A0、 A1、 A3&A4 输入就相当于 3 位 2 进制数, A0是低位, A1 是次高位, A2 是高位。 而 Y0-Y7 具体哪一个输出有效电平, 就看输入二进制对应的十进制数值。 比如输入是 101(A32, A1, A0) , 其对应的十进制数是 5, 所以 Y5 输出有效电平(低电平) 。

硬件设计

  • 动态数码管模块电路
  • 74HC138 电路
    在这里插入图片描述
    在这里插入图片描述
    从上图中可以看出, 该电路是集成的, 动态数码管的控制管脚直接连接到 51单片机的 IO 上, 段选端连接到 P0 上, 位选端连接到 LED P2 口上。 段选端通过74HC245 芯片驱动这两个共阴数码管的 a-dp 段。

软件设计

本实验的目的是: 控制动态数码管从左至右显示数字 0-7。

#include "reg52.h"typedef unsigned int u16;
typedef unsigned char u8;sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //显示0~F的值void delay(u16 i)
{while(i--);
}void DigDisplay(){u8 i;for(i=0;i<8;i++){switch(i){case(0):LSA=1;LSB=1;LSC=1;break;  //从左往右数第一个管亮case(1):LSA=0;LSB=1;LSC=1;break;case(2):LSA=1;LSB=0;LSC=1;break;case(3):LSA=0;LSB=0;LSC=1;break;case(4):LSA=1;LSB=1;LSC=0;break;case(5):LSA=0;LSB=1;LSC=0;break;case(6):LSA=1;LSB=0;LSC=0;break;case(7):LSA=0;LSB=0;LSC=0;break;}P0=smgduan[i];//发送端码delay(100);//间隔一段时间扫描P0=0x00;//消隐		 }}void main()	
{while(1){DigDisplay();	}}

第6、7、8行定义单片机控制 38 译码器的制引脚, 并将共阴数码管 0-F 段码数据使用数组定义好。DigDisplay()数码管动态显示函数是根据前面介绍动态数码管工作原理所编写, 即选中所要显示的那位数码管, 然后发送在该位数码管上所要显示的段码数据, 延时一定时间后在将段选口清零即消隐(消除之前的显示),如此循环8 次即可实现 8 位数码管显示。 在动态显示中, 要注意延时时间, 只要保证在人肉眼所能感觉时间之内即可让我们看到所要显示的内容就像是同时显示一样。 如果时间过长或者过短都可能会影响数码管的显示效果

在这里插入图片描述

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

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

相关文章

SpringMVC 环境搭建入门

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架&#xff0c;属于SpringFrameWork 的后续产品&#xff0c;已经融合在 Spring Web Flow 中。 SpringMVC 已经成为目前最主流的MVC框架之一&#xff0c;并且随着Spring3.0 的发布&#xff0c;全面…

如何用甘特图跟踪项目进度

甘特图是一个简单但是极其强大的项目管理工具,能够清晰可视化复杂项目的进度,在项目跟踪和控制上发挥重要作用。任何一个严肃的项目组织者都会使用甘特图来规划和管理项目中的任务。 甘特图的纵坐标表示项目的各项活动或任务,横坐标表示项目的时间进度。每个任务用一条横条表示…

【C++中STL】set/multiset容器

set/multiset容器 Set基本概念set构造和赋值set的大小和交换set的插入和删除set查找和统计 set和multiset的区别pair对组两种创建方式 set容器排序 Set基本概念 所有元素都会在插入时自动被排序。 set/multist容器属于关联式容器&#xff0c;底层结构属于二叉树。 set不允许容…

软件设计师——计算机网络(四)

&#x1f4d1;前言 本文主要是【计算机网络】——软件设计师——计算机网络的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1…

Zookeeper3.5.7基础学习

文章目录 一、Zookeeper入门1、概述2、特点3、数据结构4、应用场景 二、Zookeeper 安装部署1、本地模式安装1.1 基础操作1.2 配置参数解读 2、集群部署2.1 集群安装2.2 选举机制(面试重点)2.3 ZK 集群启动停止脚本 三、ZK客户端相关操作1、客户端命令行操作1.1 命令行语法1.2 z…

Python 数据分析实战——为什么销售额减少?酒卷隆治_案例1

# 为什么黑猫游戏的销售额会减少&#xff1f; # 数据集 DAU : 每天至少来访问一次的用户数据 数据内容 数据类型 字段名 访问时间 string&#xff08;字符串&#xff09; log_data 应用名称 string&#xff08;字符串&#xff09; app_name 用户 ID int&#xff08;数值&…

【C/C++】C/C++编程——C++ 关键字和数据类型简介

C 关键字和数据类型简介 大家好&#xff0c;我是 shopeeai&#xff0c;也可以叫我虾皮&#xff0c;中科大菜鸟研究生。昨天已经成功运行了第一个C程序&#xff0c;今天来学习一下C 关键字和数据类型。C 中的关键字是由 C 标准预先定义的。它们被保留作为语言的一部分&#xff…

Android源码设计模式解析与实战第2版笔记(一)

第一章 走向灵活软件之路 — 面向对象的六大原则 优化代码的第一步 — 单一职责原则 单一职责原则的英文名称是Single Responsibility Principle&#xff0c;缩写是SRP。 SRP&#xff1a;就一个类而言&#xff0c;应该仅有一个引起它变化的原因。 一个类中应该是一组相关性很…

SpringBoot操作Jedis

SpringBoot操作Jedis 1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://ma…

【机组】单元模块实验的综合调试与驻机键盘和液晶显示器的使用方式

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《机组 | 模块单元实验》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 1. 综合实验的调试 1.1 实验…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Swiper容器组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Swiper容器组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Swiper容器组件 滑块视图容器&#xff0c;提供子组件滑动轮播显示的能力。…

RHCE 给openlab搭建web网站

目录 网站需求&#xff1a; 一、准备工作 二、创建www.openlab.com 三、创建教学资料子网站www.openlab.com/data 四、创建学生信息子网站http://www.openlab.com/student/ 五、创建缴费子网站www.openlab.com/money 网站需求&#xff1a; 1.基于域名www.epenlab.com可以…