当前位置: 首页 > news >正文

数码管模块

目录

1.数码管的介绍

2.原理图

3.数码管运行原理

4.C51数组

5.C51子函数

6.数码管段码表

7.数码管驱动方式(了解)

8.静态数码管显示代码

第一步:搞懂原理图

第二步:开始写代码

最终代码:

9.动态数码管显示代码

第一步:

第二步:

第三步:

第四步:

最终代码:


1.数码管的介绍

数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件

板中数码管,可控制显示各个位置显示不同数字

2.原理图

138译码器与数码数码管相连。138译码器使用CBA顺序识辨二进制数字转化为十进制数字,对应Y几亮,例如:Y5(5是十进制) C、A、D分别是1、0、1(二级制)。想要显示数码数字,看数码管原理图最左边的P00~P07(统称为P0)达成效果

3.数码管运行原理

管脚定义(对应字母控制对应位置亮):上面的为共阴极、下面的为共阳极(可以理解为3,8管脚处为供电,三角形尖尖有一横的是负极,所有共阴极),两个图中的数字为引脚

用共阴极(因为共阴极所有3、8号公共端要接地,即为0)连接显示数字6的操作,有电势差即有电流流过灯才会亮,所有下面的1为亮,0不亮:(位选:10111110:显示6)

共阳极,接VCC为1,下面的为0才亮,有电流流过,有电势差灯才亮

下面为多个数码管,PCB板的4个为一体,同样上面为共阴极、下面为共阳极的原理图

共阴极,那么我们公共端(12、9、8、6)接地给0才会亮,及可以控制第几个亮;显示的数字则通过下面(11、7、4、2、1、10、5、3即对应字母ABCDEFG)控制,给1才亮,给0不亮(电势差);下图显示结果:第三亮,显示数字1:(共引脚,其他亮的话数字也一样)

4.C51数组

5.C51子函数

6.数码管段码表

7.数码管驱动方式(了解就好)

8.静态数码管显示代码

第一步:搞懂原理图

原理图是共阴极(上面给0、下给1亮)

上图完整版

输入3(ABC,读的时候是从下读 C B A )个口,控制输出8个口,输出口连接共阴极的,是0还是1,在这里控制:使能端连接(按下图给1和0就可以用了)

通过CBA给数字0和1二进制转换10进制(得到数字几)就控制Y几,Y0头上“—”是表示低电平有效(即给0)

双向缓冲,高电平往低电频送数据

对上图内比较重要的几个原件解释:

        CC2(电容):滤波电容,稳定电源,确定电路稳定性,提高电路工作性能可靠运行

        RP4:排阻,限流,防止电流过大

这里的P01......P07,就是用P0口,后面代码就是通过P0口控制灯的

只有Y5为0,其他Y0...Y7都为1

读取顺序都是从下到上

代码控制公共端,从下往上写

二进制101转换为1十进制为5,控制Y5,即公共端的LED6

要显示下图的数字6

第二步:开始写代码

代码实现如下(P2控制共阴极,P0控制显示数字)及结果

优化操作代码,代码第三行根据数码管段码表,下面//8表示第一个灯Y7即LED8,在最左边那个

函数调用(前面参数为显示位置,后面为显示数字),接上面代码:

最终代码:

#include <REGX52.H>unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};void Nixie(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 = NixieTable[Number];
}void main()
{Nixie(1,5);while(1){}
}

9.动态数码管显示代码

第一步:

将静态数码管的代码复制粘贴到这里的项目中

第二步:

生成延迟函数复制过来,修改一下

第三步:

动态显示,放循环里面

第四步:

注释掉上面的延时调用,旁边的管会有些影响,需要消影,段选、位选影响造成串位,如下代码消除

最终代码:

#include <REGX52.H>unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);	}}void Nixie(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 = NixieTable[Number];Delay(1);P0 = 0x00;
}void main()
{while(1){Nixie(1,1);//Delay(20);Nixie(2,3);//Delay(20);Nixie(3,1);//Delay(20);Nixie(4,4);//Delay(20);Nixie(5,5);//Delay(20);Nixie(6,2);//Delay(20);Nixie(7,0);//Delay(20);}
}

相关文章:

  • 【Linux篇】高并发编程终极指南:线程池优化、单例模式陷阱与死锁避坑实战
  • M. Moving Both Hands(反向图+Dijkstra)
  • 蓝桥杯14届国赛 合并数列
  • Spyglass:在batch/shell模式下运行目标的顶层是什么?
  • 【project】--数据挖掘
  • Docker 部署 - Crawl4AI 文档 (v0.5.x)
  • 【TI MSPM0】CCS工程管理
  • 【LwIP源码学习6】UDP部分源码分析
  • 研修室智慧化升级实践:线上预约+智能门锁的融合方案
  • 高级数据结构:线段树
  • Problem B: 面向对象综合题2
  • LLM框架
  • 【Diffusion】在华为云ModelArts上运行MindSpore扩散模型教程
  • 基于SpringBoot的抽奖系统测试报告
  • 11、参数化三维产品设计组件 - /设计与仿真组件/parametric-3d-product-design
  • Linux-TCP套接字编程简易实践:实现EchoServer与远程命令执行及自定义协议(反)序列化
  • 基于物联网的智能家居监控系统设计和实现(源码+论文+部署讲解等)
  • OpenWrt开发第8篇:树莓派开发板做无线接入点
  • 计算机网络笔记(二十一)——4.3IP层转发分组的过程
  • 小土堆pytorch--torchvision中的数据集的使用dataloader的使用
  • 李公明谈“全球南方”与美术馆
  • 高适配算力、行业大模型与智能体平台重塑工业城市
  • “降息潮”延续,多家民营银行下调存款利率
  • 外交部:中方愿根据当事方意愿,为化解乌克兰危机发挥建设性作用
  • 淡马锡辟谣:淡马锡和太白投资未在中国销售任何投资产品或金融工具
  • 来伊份:已下架涉事批次蜜枣粽产品,消费者可获额外补偿,取得实物后进一步分析