硬件电路开发中数码管常用知识

本文介绍了数码管的基本概念,包括七段和八段数码管的结构特点,以及共阳极和共阴极两种类型的区别。同时,文章还详细讲解了单片机驱动数码管的静态显示与动态扫描显示方法,并提供了具体的驱动实例。

数码管简介

  数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP),这个小数点可以更精确的表示数码管想要显示的内容。按能显示多少个(8)可分为1位、2位、3位、4位、5位、6位、7位等数码管。

七段数码管                                                           八段数码管

 3位、4位、6位数码管

数码管内部结构

      LED数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。LED数码管常用段数一般为7段,有的另加一个小数点。LED数码管根据接法不同分为共阴和共阳两类。了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。下图是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。

 数码管内部结构 

数码管的类型

      由发光二极管按照一定排列封装在一起,七个发光二极管组成8字形。二极管之间引线集成在数码管内部,引出数码管外部的是各个笔划和公共电极。这些发光二极管分别由字母a,b,c,d,e,f,g来表示。通过选择数码管上的发光二极管发光的搭配来显示字符。这种数码管称为七段数码管。

      八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示) 。

      按数码管内部发光二极管单元连接方式,可以分为共阳极数码管和共阴极数码管。

      1、共阳极数码管:是指将所有发光二极管阳极接到一起形成公共阳极。共阳数码管在应用时应将公共极接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。

      2、共阴极数码管:是指将所有发光二极管的阴极接到一起形成公共阴极。共阴数码管在应用时应将公共极接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。

数码管编码

      七段数码管的结构:

      数码管编码表:

单片机驱动数码管显示

      单片机驱动数码管的方法,依显示方式分:有静态显示和动态扫描显示;依译码方式可分硬件译码和软件译码。

      静态显示就是驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再管,直到下一次显示数据需要更新时再传送一次新数据,显示数据稳定,占用很少的CPU时间。而动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。

      静态显示虽然数据稳定,且占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用硬件较多;而动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节省线路板空间。

      硬件译码是显示的段码完全由硬件完成,CPU只要送出标准的BCD码即可,硬件接线有一定标准。软件译码是用软件来完成硬件的功能,硬件简单,接线灵活,显示段码完全由软件来处理,是目前常用的显示驱动方式。

      下面是一个用74LS164驱动数码管显示的例子:

      上例图中加了一个三极管来控制数码管的电源,这是因为74LS164没有数据锁存端,数据在传送过程中,对输出端来说是透明的,这样,数据在传送过程中,数码管上有闪动现象,驱动的位数越多,闪动现象越明显。为了消除这种现象,在数据传送过程中,关闭三极管使数码管断电不显示,数据传送完后立刻使三极管导通,这样就实现锁存功能。这种办法可驱动十几个数码管显示而没有闪动现象。

      下面是一个用4094扫描驱动显示的例子:

      上例是用4094做数码管位选,用单片机的P1口线做段驱动来扫描驱动9位数码管的显示。由于4094只有8个输出口线(这8个输出口线供1到8位数码管位选用),而第九位数码管是用CPU口线直接进行位选的。9个数码管所有相同位置的段口线都接到一起,然后接到单片机P1口线上,使用了8条单片机口线。其软件的工作过程是这样的:要在数码管上显示1--9位数,首先将1的段码送到P1口线上,然后向4094送位选数据01,使4094的Q1口线输出高电平,选中第一位数码管,使阳极得电,在第一位上就显示出1,重复上述过程,一直到第九位,然后不断重复这一过程,就实现了扫描显示。

 

 

 

### 共阳极数码管编码表与小数点显示 共阳极数码管是一种由多个发光二极管组成的器件,其结构通常包括七个段(a-g)用于组成数字或字符,以及一个小数点段(dp)。对于共阳极数码管而言,当某个段被设置为低电平时,该段会被点亮;而高电平则熄灭。 #### 小数点的显示原理 在共阳极数码管中,小数点作为一个独立的段存在。为了使小数点亮起,需要将其对应的引脚设置为低电平。具体来说,在编码表中,可以通过将小数点的状态加入到整体编码中来实现这一点。例如,如果要显示带有小数点的数字 `1`,可以将数字 `1` 的编码与小数点的编码组合在一起[^4]。 以下是常见的共阳极数码管编码表及其小数点处理方式: | 字符 | 编码 (十六进制) | 带小数点编码 | |------|------------------|---------------| | 0 | 0xC0 | 0x40 | | 1 | 0xF9 | 0x79 | | 2 | 0xA4 | 0x24 | | 3 | 0xB0 | 0x30 | | 4 | 0x99 | 0x19 | | 5 | 0x92 | 0x12 | | 6 | 0x82 | 0x02 | | 7 | 0xF8 | 0x78 | | 8 | 0x80 | 0x00 | | 9 | 0x90 | 0x10 | #### 实现代码示例 以下是一个简单的Arduino程序片段,展示如何使用共阳极数码管并控制小数点的显示: ```cpp const byte numTable[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E // 0-9 和 A-F }; void setup() { for (int i = 2; i <= 9; ++i) pinMode(i, OUTPUT); // 设置D2-D9为输出模式 } void loop() { displayNumberWithDecimal(12.34); delay(1000); } void displayDigit(byte digit) { digitalWrite(2, bitRead(digit, 0)); // a digitalWrite(3, bitRead(digit, 1)); // b digitalWrite(4, bitRead(digit, 2)); // c digitalWrite(5, bitRead(digit, 3)); // d digitalWrite(6, bitRead(digit, 4)); // e digitalWrite(7, bitRead(digit, 5)); // f digitalWrite(8, bitRead(digit, 6)); // g digitalWrite(9, LOW); // dp 默认不亮 } void displayDecimal(bool enable) { if (enable) digitalWrite(9, HIGH); // 点亮小数点 else digitalWrite(9, LOW); // 关闭小数点 } void displayNumberWithDecimal(float number) { int integerPart = abs((int)number); float fractionalPart = abs(number - integerPart); while (integerPart > 0 || fractionalPart >= 0.1) { displayDigit(numTable[integerPart % 10]); integerPart /= 10; delay(250); if (fractionalPart >= 0.1) { displayDecimal(true); fractionalPart *= 10; displayDigit(numTable[(int)(fractionalPart)]); fractionalPart -= (int)(fractionalPart); displayDecimal(false); } } } ``` 此代码展示了如何通过数组 `numTable` 存储每个数字的编码,并利用函数 `displayDigit()` 控制数码管上的各个段。同时,`displayDecimal()` 函数负责管理小数点的开关状态[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式硬件与代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值