51单片机入门:数码管(3)

news/2024/11/27 20:58:46/文章来源:https://www.cnblogs.com/arciab/p/18573086

数码管简介

image-20241127175917258

数码管每段其本质就是个LED灯,只需要控制特定的LED灯亮就能显示数据。普中开发版所使用的是两个并在一起共阴极连接的“4位数码管”,可以同时显示8个数字。数码管的显示可以分成静态显示和动态显示,这里先介绍最简单的静态显示。

image-20241127180727836

数码管分为共阴极连接和共阳极连接,顾名思义共阴极就是把所有的数码管阴极连接在一起,共阳极就是把数码管所有的阳极连接在一起,之所以这么做是为了节省单片机I/O口。

图(a)是数码管段选位图,以普中51单片机开发版为例,它的数码管采用共阴极(低电平0)连接,所以如果我们想让一个数码管显示数字6,就应当在相应段选位设置为高电平(1),其余设置为低电平(0),如图所示:

image-20241127184928608

下图是共阴极数码管显示0-F对应的编码(表中省略了dp段0):

image-20241127185200447

74HC138译码器简介

作用:节省单片机I/O口

image-20241127185807057

//这里结合两张图片一起介绍
// P2_4 = 1;P2_3 = 1;P2_2 = 1;  控制LED8 
// P2_4 = 1;P2_3 = 1;P2_2 = 0;  控制LED7 
// P2_4 = 1;P2_3 = 0;P2_2 = 1;  控制LED6 
// P2_4 = 1;P2_3 = 0;P2_2 = 0;  控制LED5 
// P2_4 = 0;P2_3 = 1;P2_2 = 1;  控制LED4 
// P2_4 = 0;P2_3 = 1;P2_2 = 0;  控制LED3 
// P2_4 = 0;P2_3 = 0;P2_2 = 1;  控制LED2 
// P2_4 = 0;P2_3 = 0;P2_2 = 0;  控制LED1 

image-20241127190621212

到此知识准备结束,现在可以编写第一个程序了。

静态数码管显示

#include<regx52.h>unsigned char Table[] = {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F}; // 数组,定义数字0~9段选void SMG(unsigned char Location,Number) // 定义函数,参数Location是位选,Number段选控制显示的数字。
{switch(Location) // 位选{case 1 : P2_4 = 1;P2_3 = 1;P2_2 = 1;break;case 2 : P2_4 = 1;P2_3 = 1;P2_2 = 0;break;case 3 : P2_4 = 1;P2_3 = 0;P2_2 = 1;break;case 4 : P2_4 = 1;P2_3 = 0;P2_2 = 0;break;case 5 : P2_4 = 0;P2_3 = 1;P2_2 = 1;break;case 6 : P2_4 = 0;P2_3 = 1;P2_2 = 0;break;case 7 : P2_4 = 0;P2_3 = 0;P2_2 = 1;break;case 8 : P2_4 = 0;P2_3 = 0;P2_2 = 0;break;}P0 = Table[Number]; // 段选
}void main()
{
//	P2_2 = 1;  // 这是我做的小实验,不要过多关注
//	P2_3 = 1;
//	P2_4 = 0;
//	P0 = 0X7D; // 这块板子共阴极数码管,38译码器和SMG都是从下往上数	while(1){SMG(5,6); // 第五位显示数字6}
}

实验现象:(Proteus仿真中P0端口要有个上拉电阻,这里没截到)

image-20241127202746210

动态数码管显示

原理:快速扫描逐个显示,利用人眼的余辉效应显示多个数码管,实际上在一个时刻内只有一个数码管点亮。

#include<regx52.h>unsigned char Table[] = {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};void Delay(unsigned int n)  // 延时函数
{unsigned char j;while(n--){for(j = 0; j< 113; j++);}
}void SMG(unsigned char Location,Number)
{switch(Location) // 段选{case 1 : P2_4 = 1;P2_3 = 1;P2_2 = 1;break;case 2 : P2_4 = 1;P2_3 = 1;P2_2 = 0;break;case 3 : P2_4 = 1;P2_3 = 0;P2_2 = 1;break;case 4 : P2_4 = 1;P2_3 = 0;P2_2 = 0;break;case 5 : P2_4 = 0;P2_3 = 1;P2_2 = 1;break;case 6 : P2_4 = 0;P2_3 = 1;P2_2 = 0;break;case 7 : P2_4 = 0;P2_3 = 0;P2_2 = 1;break;case 8 : P2_4 = 0;P2_3 = 0;P2_2 = 0;break;}P0 = Table[Number];				// 位选Delay(1);					// 数码管显示1ms后关闭P0 = 0X00;					// 消影清零,防止上次的数据窜位重影
}
void main()
{while(1){SMG(1,1); // 位选 段选SMG(2,2);SMG(3,3);}
}

实验现象:

动画

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

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

相关文章

使用java在未知表字段情况下通过sql查询信息

使用java在未知表字段情况下通过sql查询信息场景 在只知道表名,不知道表包含哪些字段情况下,查询该表信息的场景 解决方案 @Testpublic void test() {Connection connection;String DB_URL = "jdbc:mysql://192.168.20.75:9950/geespace_bd_platform_dev?characterEnco…

WnRAR将rar后缀格式文件转成zip后缀格式

前言全局说明使用 winRAR 自带的转换功能,可以最大程度的保留原始信息, 比如: 打包时间、CRC32值等一、说明 环境: Windows 11 家庭版 23H2 22631.3737 WinRAR 6.00(32位)二、rar 转 zip 2.12.2 选择要转换的文件 右边可以根据类型筛选2.3 选择要转成的格式 zip2.4 选择转成输…

opensuse系统下QtCreator中文输入法失效解决,亲测有效

首先安装QTCreator,这里不再详细赘述。克隆fcitx-qt5仓库,然后在该目录下新建build文件 克隆命令如下git clone https://gitcode.com/gh_mirrors/fc/fcitx-qt5.git安装cmakezypper install cmake进入到build目录 运行命令cmake ..报错如下 解决办法 运行如下指令 sudo zypper…

数值分析:线性方程组的直接解法(上)

提纲背景介绍 三角方程组 Gauss消去法 附录一、背景介绍 1.1 线性方程组的相关概念 线性方程组在解决现实师姐问题中直接产生,最小二乘数据拟合、微分方程边值问题和初边值问题的数值解产生了大量的线性方程组。 线性方程组系数矩阵的类型分别有稠密型(dense):几乎所有元素都…

第十三次作业

1、MS08-067、MS10-018漏洞复现,对比bind和reverse攻击模式的区别 MS08-067: 输入msfconsole进入msf终端查找ms08-067漏洞利用模块使用查找出来的攻击模块查看该攻击模块下所需的配置信息设置攻击payload查看并设置靶机地址查看targets选择攻击目标再次检查配置信息关闭目标地…

TIA下SCL做交通灯控制程序完善

和前一篇一样,我希望在没有点击停止按钮时,多次点击开始按钮不要中断当前流程。 在FB程序变量的static组添加BOOL类型running变量。修改SCL程序如下 IF #stopbtn=1 THEN   #CurrentState := 4;   #Running := 0;END_IF; IF (#Running = 0) AND (#startbrn=1) THEN …

【随手记录】IDEA里面pom文件被忽略,变灰、画横线处理

在setting --> Build -->Build Tools --> Maven 下找到ignored files选项,去掉pom文件的勾选框,重新加载项目即可!

大模型问答的工作流程

从问题输入到输出经历五个步骤文本分词: 大模型会将输入文本转化成单词,词语,词组,符号 分词向量化: 将分词转化成向量为了让计算机更好的理解 大模型推理: 推理时大模型会根据输入计算出下一个输出的分词的集合 分词输出: 从推理出来的集合中选择一个分词,将新的结果再进行大模…

[75] (NOIP集训) NOIP2024 加赛 8

A.flandre 我的做法是,所有数离散化之后扔进桶里,去枚举选择 \([i,+\infty)\) 内的数的贡献,在所有的 \(i\) 里取一个最大值作为答案 lbtl 指出可能存在最优答案是选择 \([i+1,+\infty)\) 内的所有数与值为 \(i\) 的部分数的数据 和 lbtl 交涉后尝试构造一组相同元素只选后一…

P10974 换根 dp 解题报告

题目传送门 题目大意: 给定一颗无根树,有一个节点是源点,度数为 \(1\) 的点是汇点,树上的边有最大流量。除源点和汇点外,其它点不储存水,即流入该点的水量之和等于从该点流出的水量之和。整个水系的流量定义为原点单位时间内能发出的水量。 现在需要求出:在流量不超过最…

CH592/CH585工具更新说明_USB篇

①打开USB更新工具 ②保证芯片没有供电以及没有GPIO灌电的前提下,将PB22接到低电平GND上(进入BootLoader),再插入USB线供电,之后点击软件中的Search Device即可搜索到设备 ③点击Download下载程序即可 ④烧录成功样例

H5-6 列表标签 有序列表

1、有序标签有序列表是一列项目,列表项目使用数学进行标记。有序列表始于<ol>标签。每个列表始于<li>标签。 <ol><li></li><li></li></ol> 2、type属性: <ol>的属性type拥有的选项1表示列表项目用数字标号(1,2,…