静态数码管实验

数码管简介

        数码管是一种半导体发光器件,其基本单元是发光二极管,也称 LED 数码管。数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,就是多的那个小数点(DP),这个小数点可以更精确的表示数码管想要显示的内容,如图所示:

        按显示多少个发光二极管(8)可分为 1 位、 2 位、 3 位、 4 位、 5 位、 6 位、7 位等数码管。按连接方式可分为共阳极数码管和共阴极数码管。

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

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

        不同位数的数码管实物图如下所示

 数码管显示原理

        不同数码管的显示原理都一样,都是靠点亮内部的发光二极管来发光。数码管内部电路如下图所示:

         一位数码管的引脚是 10 个,其内部一共有 8 个小的发光二极管(A、B、C、D、E、F、G、DP),最后还有一个公共端(CA或CC),多数生产商为了封装统一,单位数码管都封装 10 个引脚,其中第 3 和 第 8 引脚是连接在一起的。

         数码管按公共端又可分为共阳极和共阴极,图中间为共阳极内部原理图,右图为共阴极内部原理图。

共阴极数码

         其 8 个发光二极管的阴极在数码管内部全部连接在一起,所以称“共阴”,而它们的阳极是独立的,通常在设计电路时一般把阴极接地,给数码管的任意一个阳极加一个高电平时,对应的这个发光二极管就点亮 。如果要显示出一个 8 字,并且把右下角的小数点也点亮的话,可以给 8 个阳极全部送高电平,如果想让它显示出一个 0 字,那么我们可以除了给第“g, dp” 这两位送低电平外,其余引脚全部都送高电平,这样它就显示出 0 字了。 如果使用共阴数码管,需要注意增加单片机 IO 口驱动电流,因为共阴数码 管是要靠单片机 IO 口输出电流来点亮的,但单片机 I/O 口难以输出稳定的、如此大的电流,所以数码管与单片机连接时需要加驱动电路,可以用上拉电阻的方 法或使用专门的数码管驱动芯片,比如 74HC573、74HC245 等,其输出电流较大, 电路接口简单。

共阳极数码管

         其内部 8 个发光二极管的所有阳极全部连接在一起,电路连接时,公共端接高电平,因此,要点亮哪个发光管二极管就需要给阴极送低电平, 此时显示数字的编码与共阴极编码是相反的关系。数码管内部发光二极管点亮时,需要 5mA 以上的电流,电流不可过大,否则会烧坏发光二极管。不仅要防止数码管电流过大,同时要防止流经数码管的电流集中到单片机时电流不能过大,否则会损坏主芯片

         通常共阳极数码管更为常用,因为数码管的非公共端往往接在 IC 芯片的 I/O 上,而 IC 芯片的驱动能力往往是比较小的,如果采用共阴极数码管,数码管的驱动端在非公共端, 就有可能受限于 IC 芯片输出电流不够而显得昏暗,要外加上拉电阻或者是增加三极管加大驱动能力。但是 IC 芯片的灌电流, 即输入电流范围比较大。所以使用共阳极数码管的好处是:将驱动数码管的工作 交到公共端(一般接驱动电源),加大驱动电源的功率自然要比加大 IC 芯片 I/O 口的驱动电流简单许多。另一方面,这样也能减轻主芯片的负担。

         本文中使用的开发板上使用了一个共阳数码管。下面给出共阴和共阳数码管的 0-F 段码数据表,如下所示:

数码管 0-F 段码数据表

   共阴数码管码表

0x3f     0x06     0x5b     0x4f     0x66     0x6d

  0           1           2          3          4           5

0x7d     0x07     0x7f     0x6f     0x77     0x7c

  6            7           8          9         A          B

0x39     0x5e     0x79     0x71     0x00

  C           D          E          F       无显示

  共阳数码管码表

0xC0     0xF9     0xA4     0xB0     0x99     0x92

  0            1           2           3           4           5

0x82     0xF8     0x80     0x90     0x88     0x83

  6            7            8          9          A           B

0xC6     0xA1     0x86     0x8E     0xFF

  C            D           E          F        无显示

         上述表中,可以发现它们的数据正好是相互取反的值。比如共阴数码管数字0 段码:0x3f,其二进制是:0011 1111,取反后为:1100 0000, 转换成 16 进制即为 0XC0。其它段码依此类推。

代码实现

         数码管显示器工作方式有两种:静态显示方式和动态显示方式。

         静态显示,每个数码管的段选必须接一个 8 位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。

   硬件部分

         开发板上的静态数码管模块电路如下图所示:

         上图电路是静态数码管电路,模块独立,使用的是 1 个共阳数码管组成,即 8 位数码管的段选数据 a-dp 全部一起引出,数码管的位选即公共端直接接 VCC, 根据共阳数码管显示特点,只要保证数码管 a-dp 段输入电平为低电平即可点亮。由于公共极接 VCC,所以在数码管控制端加一个限流电阻,阻值为 470 欧(471)。本文使用 P0 口连接 J8 端子。

源代码

#include "reg52.h"

typedef unsigned int u16;//使用关键字 typedef 对系统默认数据类型 unsigned int 重新命名
typedef unsigned char u8;
 
#define SMG_A_DP_PORT P0 使用宏定义数码管段码口,使用P0控制

void delay_10us(u16 ten_us)//延时函数,ten_us=1 时,大约延时 10us
{
 	while(ten_us--);
}

/*共阴极数码管显示 0~F 的段码数据*/
u8 gy_smg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void main()	   //主函数
{	
	while(1)
	{
	   u16 i=0;
	   for(i=0;i<17;i++)  //依次将段码数据赋值给数码管段选口,使数码管依次显示0~F
	   {
			SMG_A_DP_PORT=~gy_smg_code[i];//将共阴数组第 i 个数据:0赋值给数码管段选口
			delay_10us(50000);	   //延时,根据余晖效应
	   }
	}
}

现象

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是静态单个数码管显示实验步骤: 材料: - Arduino开发板 - 数码管 - 220欧姆电阻 - 杜邦线若干 步骤: 1. 将材料准备齐全。 2. 将数码管的针脚与Arduino开发板的数字引脚相连,具体连接方式见下图: ``` 数码管正极 -> 数字引脚12 数码管负极 -> 数字引脚11 第一位数码管 a -> 数字引脚2 第一位数码管 b -> 数字引脚3 第一位数码管 c -> 数字引脚4 第一位数码管 d -> 数字引脚5 第一位数码管 e -> 数字引脚6 第一位数码管 f -> 数字引脚7 第一位数码管 g -> 数字引脚8 ``` 注意:连接时需要将数码管的220欧姆电阻连接在正极和数字引脚12之间。 3. 在Arduino开发板的IDE中编写代码: ```c void setup() { // 设置数码管的引脚为输出模式 pinMode(2, OUTPUT); // a pinMode(3, OUTPUT); // b pinMode(4, OUTPUT); // c pinMode(5, OUTPUT); // d pinMode(6, OUTPUT); // e pinMode(7, OUTPUT); // f pinMode(8, OUTPUT); // g pinMode(11, OUTPUT); // 数码管负极 pinMode(12, OUTPUT); // 数码管正极 } void loop() { // 显示数字1 digitalWrite(2, HIGH); // a digitalWrite(3, LOW); // b digitalWrite(4, LOW); // c digitalWrite(5, LOW); // d digitalWrite(6, LOW); // e digitalWrite(7, LOW); // f digitalWrite(8, LOW); // g digitalWrite(11, LOW); // 数码管负极 digitalWrite(12, HIGH); // 数码管正极 // 等待一段时间 delay(1000); } ``` 上述代码中,setup函数用于设置数码管引脚的模式,loop函数用于循环执行显示数字1的操作,并通过delay函数控制显示时间。 4. 将编写好的代码上传到Arduino开发板中。 5. 数码管将显示数字1,每隔1秒钟更新一次。 注意:实验时要注意电路连接的正确性,避免短路或其他损坏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值