【SOC基础】单片机学习案例汇总 Part2:蜂鸣器、数码管显示

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处

文章目录

  • 一、蜂鸣器
    • 蜂鸣器的介绍
    • 代码示例
  • 二、数码管显示
    • 2.1 数码管介绍:


一、蜂鸣器

蜂鸣器的介绍

蜂鸣器是一体化结构的电子讯响器,采用直流电压供电。
蜂鸣器发声条件:
1.需要使用驱动芯片。驱动蜂鸣器需要约30mA,因此无法使用IO口直接控制蜂鸣器,需要通过三极管把电流放大后再驱动蜂鸣器。又或者使用像图中的方法,不使用三极管进行电流放大,而是使用ULN2003芯片来驱动,P25输出高电平,BEEP则输出低电平;当P25输出低电平,BEEP则输出高电平,通过连续性的脉冲信号不断改变高低电平控制声音的发出。
2.需要脉冲。开发板上使用的是无源蜂鸣器,它需要一定频率的脉冲(高低电平)才会发声,因此需要让P25脚以一定频率不断输出高低电平信号才能控制蜂鸣器发出声音。并且脉冲频率要求处于1.5-5KHz这一范围内。
蜂鸣器的电路图:51单片机上面的蜂鸣器是由P2.5管脚进行控制的
在这里插入图片描述

代码示例

蜂鸣器实验:下载程序后蜂鸣器发出声音,一段时间后关闭

  #include <REGX52.H>typedef unsigned char u8;typedef unsigned int  u16;sbit BEER =P2^5;void delay_10us(u16 num){while(num--);}void main(){u16 i=2000;while1{while(i--){BEER=!BEER;delay_10us(100);}BEER=0;}}

二、数码管显示

2.1 数码管介绍:

数码管是显示器件,用来显示数字。由发光二极管组成,因此也称LED数码管。

数码管的分类:
1.按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP),这个小数点可以更精确的表示数码管想要显示的内容。
2.单个(1位)、联排(2位、4位、8位)。
3.按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。
在这里插入图片描述

数码管显示的工作原理
(1)亮灭原理(其实就是内部的照明LED)
(2)显示数字(甚至文字)原理:利用内部的LED的亮和灭让外部的组成数字的笔画显示或者不显示,人看到的就是不同的数字。

共阳极和共阴极数码管
(1)驱动方法的差异。一个数码管内部的8颗LED是独立驱动的。如果8颗LED的正极接在一起接到VCC上(负极分别接到单片机的不同引脚),这种接法就叫共阳极。反之如果8颗LED负极接在一起然后接到GND(正极就分别接到单片机的不同引脚)就叫共阴极。两种接法都可以驱动数码管显示,但是用来显示的单片机程序不同(共阳极时单片机0是亮,共阴极时单片机的1是亮)。
(2)驱动电流需求差异。
按照共阳极接法,单片机可以直接驱动显示;
按照共阴极接法,单片机不能直接驱动。因为IO口提供的电流大小不够驱动LED显示,因此需要外部电路提供一个能驱动大电流的芯片来解决。

静态和动态数码管
(1)用途差异
(2)电路接法差异

验证原理图中数码管段号是否正确
(1)数码管的8段实际是8个LED,分别对应IO端口P0的8个引脚(P0.0、P0.1····P0.7),那么谁对应谁呢?
(2)理论上可以分析原理图和接线方法去推测这个对应关系(数码管的段码),但是实际上理论分析的经常不对。
(3)实战中一般都是自己写代码去测试的。
P0 = 0xfe; // 11111110 P0.0输出0 实测对应a
P0 = 0xfd; // 11111101 P0.1输出0 实测对应b
P0 = 0xfb; // 11111011 P0.2输出0 实测对应c
P0 = 0xf7; // 11110111 P0.3输出0 实测对应d
P0 = 0xef; // 11101111 P0.4输出0 实测对应e
P0 = 0xdf; // 11011111 P0.5输出0 实测对应f
P0 = 0xbf; // 10111111 P0.6输出0 实测对应g
P0 = 0x7f; // 01111111 P0.7输出0 实测对应dp
注意:P0端口的8个二进制位中,高位对应P0.7,而低位对应P0.0
思考:数码管如何显示数字?
(1)数码管显示数字,其实就是让数码管亮相应的几个段。其实就是让IO端口的相应引脚输出0(其余引脚输出1),对应一个8位的二进制数。
(2)结论就是:P0端口输出一个合适的字节数,数码管就会显示相应的数字。每个数字都会有一个对应的8位二进制数,关键就是要得到这8位二进制数。

静态数码管显示数字
数字编码(段码)的获取
要显示的数字 数码管亮的LED 段码二进制 十六进制
0 abcdef 11000000 0 0xC0
1 bc 11111001 0xf9
2 abdeg 10100100 0xA4
3 abcdgh 10110000 0 0xb0
4 bcfg 10011001 0x99
5 acdfg 10010010 0x92
6 acdefg 10000010 0x82
7 abc 11111000 0xf8
8 abcdefg 10000000 0x80
9 abcdfg 10010000 0x90
A abcefg 10001000 0x88
b cdefg 10000011 0x83
C adef 11000110 0 0xc6
d bcdeg 10100001 0xA1
E adefg 10000110 0 0x86
F aefg 10001110 0 0x8e

结论
(1)不同的数码管数字编码(段码)表完全可能不同
(2)同一个数码管接线方式不同编码表可能完全不同
(3)硬件确定后可通过调试的方法来实验确定编码表
让数码管依次显示0到f
笨办法:分状态
升级方法:使用数组

动态数码管
静态数码管驱动方式的缺陷
(1)优势是驱动简单直接,好编程
(2)缺陷是每个数码管需要1个端口,单片机的端口不够用
解决办法:使用动态方式驱动多个数码管

什么是动态数码管
动态数码管还是原来的数码管(共阳极或共阴极均可),但不同的是动态数码管利用了人眼的视觉暂留。动态数码管有2端:COM端和段码端;段码一侧还是接一个单片机端口;COM(共极)接单片机一个IO口,多个联排数码管的COM共同接一个IO端口
分析对比静态和动态数码管,发现本质区别是:静态数码管中只要给了段码数码管就一定工作(显示只取决于段码端),动态数码管中段码端给了段码值后还需要COM端配合才能点亮数码管。
在这里插入图片描述
动态数码管如何工作?
(1)在某一特定时间段中,联排数码管中只有一个数码管在工作,其他均不工作。
(2)COM端选择哪个数码管工作,段码端输出这个数码管要显式的数字的段码;然后延时人眼无法感知到的时间;COM端选择下一个数码管工作,同时段码端改输出这个数码管要显示的数字的段码;延时;COM端选择下一个数码管工作······
(3)快速切换工作的数码管,则人看到的是所有的数码管都在亮(其实亮度是比静态驱动低的)。
搞清楚2点:

1、宏观上所有的数码管都是同时亮的,所以多个数码管可以合在一起来显示,因此使人以为所有数码管在同时工作(譬如同时显示12345678)
2、微观上数码管是依次亮的,我们可以给不同的数码管送不同的段码,所以不同的数码管可以显示不同的数字。所以相当于8个数码管的显示是独立的。
动态数码管显示编程实战1
目标:先实验得出数码管的段码表
(1)接线确定:段码端接P0,COM端接P2端口
(2)COM端选择一个数码管亮:P2.0-P2.7随便选1个输出0,其余输出1
(3)段码端给不同的值来测试得到段码表
动态数码管显示编程实战2
目标:8个联排数码管一起显示12345678
编程思路:先选中第1数码管,然后段码端送1的段码,然后延时一会儿;然后切换选中第2数码管,然后段码端送2的段码,然后延时一会儿;····直到第8个数码管显示完为一个周期;死循环这个周期。
实验结论:
1、延时时间太长,数字会闪动。
2、把时间改短后发现有3个问题:第一个是亮的不够亮,第二个是暗的不够暗,第三个是其中一个数字(1)显示明显有问题。 解决方案就是在每个数码管亮完要切换下一个数码管时消隐。
对程序第一步改良:把段码放在数组中去查数组。
第二步改良:COM选择码也可以放到数组中去

38译码器介绍
(1)38译码器的作用:用3个IO口来控制8路输出。
(2)用38译码器驱动数码管的意义:原来不用38译码器时,8个动态数码管一共使用2个IO端口(16个引脚),现在使用了38译码器后,我们可以用38译码器的3路输入来控制数码管的8路位码,这样总共只需要3+8=11个IO引脚就可以来驱动8个动态数码管了,省了5个IO口。

74LS138的数据手册
(1)重点看懂真值表
(2)G1和G2A G2B三个是使能引脚
(3)ABC是编码端,Y0-Y7是输出端
1.7.9.使用38译码器驱动动态数码管
1.7.9.1、接线方式确定
(1)J15和J16连接起来
(2)ABC分别接P1.0、P1.1、P1.2三个
1.7.9.2、实验测定编码表
(1)按照接线图分析,P1.0=0并且P1.1=0并且P1.2等于0时Y0为低对应第1个数码管亮;P1.0=1并且P1.1=0并且P1.2等于0时Y1为低对应第2个
总结
(1)C语言的不同特性用在不同地方,可以简化编程
(2)C语言数组从0开始,注意不能越界,这个很重要

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

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

相关文章

xilinx fpga ddr mig axi

硬件 参考&#xff1a; https://zhuanlan.zhihu.com/p/97491454 https://blog.csdn.net/qq_22222449/article/details/106492469 https://zhuanlan.zhihu.com/p/26327347 https://zhuanlan.zhihu.com/p/582524766 包括野火、正点原子的资料 一片内存是 1Gbit 128MByte 16bit …

【wp】2023鹏城杯初赛 Web web1(反序列化漏洞)

考点&#xff1a; 常规的PHP反序列化漏洞双写绕过waf 签到题 源码&#xff1a; <?php show_source(__FILE__); error_reporting(0); class Hacker{private $exp;private $cmd;public function __toString(){call_user_func(system, "cat /flag");} }class A {p…

Spring基础

文章目录 Spring基础IoC容器基础IoC理论第一个Spring程序Bean注册与配置依赖注入自动装配生命周期与继承工厂模式和工厂Bean注解开发 AOP面向切片配置实现AOP接口实现AOP注解实现AOP Spring基础 Spring是为了简化开发而生&#xff0c;它是轻量级的IoC和AOP的容器框架&#xff…

I/O多路转接之select

承接上文&#xff1a;I/O模型之非阻塞IO-CSDN博客 简介 select函数原型介绍使用 一个select简单的服务器的代码书写 select的缺点 初识select 系统提供select函数来实现多路复用输入/输出模型 select系统调用是用来让我们的程序监视多个文件描述符的状态变化的; 程序会停在s…

Vue3 实现 clipboard 复制功能

一个很小的交互功能&#xff0c;网上搜了一下有一个 vue3-clipboard 直接支持vue3&#xff0c;到github仓库看了下&#xff0c;原作者已经不维护这个项目了&#xff1a; 推荐使用 vueuse 自带的 useclipboard 功能&#xff0c;由 vue 团队维护&#xff0c;稳定性基本没问题 官…

数据结构构之顺序表

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线…

MySQL连接时出现Host ‘::1‘ is not allowed to connect to this MySQL server

报错原因 之前想着要提高一下连接速度&#xff0c;所以在my.ini中加入了&#xff1a;skip-name-resolve&#xff0c;当时的数据库root账号设置的登录权限是%&#xff0c;因此没有出现连接错误&#xff0c;这次因为是新建数据库&#xff0c;root账号的登录权限默认是localhost&…

园区网真实详细配置大全案例

实现要求&#xff1a; 1、只允许行政部电脑对全网telnet管理 2、所有dhcp都在核心 3、wifi用户只能上外网&#xff0c;不能访问局域网其它电脑 4、所有接入交换机上bpdu保护 5、只允许vlan 10-40上网 5、所有接入交换机开dhcp snoop 6、所有的交换机指定核心交换机为ntp时间服务…

解决Visual Studio Code 控制台中文乱码问题

C和CPP运行编码指定 "code-runner.executorMap": {"c": "cd $dir && gcc -fexec-charsetGBK $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt","cpp": "cd $dir && g -fexec-charsetGBK $…

LV.12 D16 轮询与中断 学习笔记

一、CPU与硬件的交互方式 轮询 CPU执行程序时不断地询问硬件是否需要其服务&#xff0c;若需要则给予其服务&#xff0c;若不需要一段时间后再次询问&#xff0c;周而复始 中断 CPU执行程序时若硬件需要其服务&#xff0c;对应的硬件给CPU发送中断信号&#xff0c…

AD教程(六)现有元件模型的调用

AD教程&#xff08;六&#xff09;现有元件模型的调用 导入现有原理图 Altium Schematic Document (.SchDoc) 直接拖入AD即可 直接用现有原理图生成原理图库 点击设计&#xff0c;选择生成原理图库&#xff0c;进入归类设置界面&#xff08;用原理图直接生成原理图库&#xf…

如何实现多租户系统

shigen日更文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 不知道为什么&#xff0c;最近老是有一些失眠&#xff0c;凌晨睡&#xff0c;两点半还在醒着。脑子里想着自己生…

Linux flock和fcntl函数详解

文章目录 flock函数描述返回值和错误码笔记 fcntl函数描述复制文件描述符文件描述标志文件状态标志 咨询锁强制锁管理信号租赁文件和目录变更通知改变管道容量 返回值错误备注遗留问题 flock函数 主要功能是在已打开的文件应用或者删除共享锁或者独占锁。sys/file.h声明了这个…

使用Postman工具做接口测试 —— 环境变量与请求参数格式!

引言 在上一篇笔记我们主要介绍了接口测试的基础知识与基本功能&#xff0c;本章主要介绍如何使用postman做接口测试。 配置环境变量和全局变量 环境变量和全局变量 环境管理中还可以点击“Global”添加全局变量&#xff0c;环境变量只有当选择了该环境时才生效&#xff0c;…

centos9 stream 下 rabbitmq高可用集群搭建及使用

RabbitMQ是一种常用的消息队列系统&#xff0c;可以快速搭建一个高可用的集群环境&#xff0c;以提高系统的弹性和可靠性。下面是搭建RabbitMQ集群的步骤&#xff1a; 基于centos9 stream系统 1. 安装Erlang和RabbitMQ 首先需要在所有节点上安装Erlang和RabbitMQ。建议使用官…

VueJs各个版本— 判断当前是开发、生产环境

VueJs各个版本— 判断当前是开发、生产环境 文章目录 VueJs各个版本— 判断当前是开发、生产环境vue项目分类VueCLI21&#xff0c;判断样例2&#xff0c;判断原理 Vue CLI 3 和 Vue CLI 41&#xff0c;判断样例2, 判断原理手动设置-json文件手动设置- .env 文件单个 .env 文件多…

SpringBoot-SpringCache缓存

文章目录 Spring Cache 介绍常用注解 Spring Cache 介绍 Spring Cache 是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring Cache 提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff0c;…

shell脚本代码混淆

文章目录 起因安装 Bashfuscator安装BashfuscatorBashfuscator的使用 起因 很多时候我并不希望自己的shell脚本被别人看到&#xff0c;于是我在想有没有什么玩意可以把代码加密而又正常执行&#xff0c;于是我想到了代码混淆&#xff0c;简单来看一下&#xff1a; 现在我的目…

JavaEE平台技术——预备知识(Maven、Docker)

JavaEE平台技术——预备知识&#xff08;Maven、Docker&#xff09; 1. Maven2. Docker 在观看这个之前&#xff0c;大家请查阅前序内容。 &#x1f600;JavaEE的渊源 &#x1f600;&#x1f600;JavaEE平台技术——预备知识&#xff08;Web、Sevlet、Tomcat&#xff09; 1. M…

Git 内容学习

一、Git 的理解 Git是一个分布式版本控制系统&#xff08;Distributed Version Control System&#xff0c;简称 DVCS&#xff09;&#xff0c;用于对项目源代码进行管理和跟踪变更。分为两种类型的仓库&#xff1a;本地仓库和远程仓库。 二、Git 的工作流程 详解如下&#x…