7段数码管显示电路 - 图文

更新时间:2023-11-19 15:26:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

4.4 显示模块

4.4.1 7段数码管的结构与工作原理

7段数码管一般由8个发光二极管组成,其中由7个细长的发光二极管组成

数字显示,另外一个圆形的发光二极管显示小数点。

当发光二极管导通时,相应的一个点或一个笔画发光。控制相应的二极管导通,就能显示出各种字符,尽管显示的字符形状有些失真,能显示的数符数量也有限,但其控制简单,使有也方便。发光二极管的阳极连在一起的称为共阳极数码管,阴极连在一起的称为共阴极数码管,如图4.9所示。

共阴极

7段数码管内部字段LED和引脚分布

图4.9 7段数码管结构图

共阳极 4.4.2 7段数码管驱动方法

发光二极管(LED是一种由磷化镓(GaP)等半导体材料制成的,能直接将电能转变成光能的发光显示器件。当其内部有一一电流通过时,它就会发光。

7段数码管每段的驱动电流和其他单个LED发光二极管一样,一般为5~10mA;正向电压随发光材料不同表现为1.8~2.5V不等。

7段数码管的显示方法可分为静态显示与动态显示,下面分别介绍。 (1) 静太显示

所谓静态显示,就是当显示某一字符时,相应段的发光二极管恒定地寻能可截止。这种显示方法为每一们都需要有一个8位输出口控制。对于51单片机,可以在并行口上扩展多片锁存74LS573作为静态显示器接口。

静态显示器的优点是显示稳定,在发光二极管导通电注一定的情况下显示器的亮度高,控制系统在运行过程中,仅仅在需要更新显示内容时,CPU才执行一次显示更新子程序,这样大大节省了CPU的时间,提高了CPU的工作效率;缺点是位数较多时,所需I/O口太多,硬件开销太大,因此常采用另外一种显示方式——动态显示。

(2)动态显示

所谓动态显示就是一位一位地轮流点亮各位显示器(扫描),对于显示器的每一位而言,每隔一段时间点亮一次。虽然在同一时刻只有一位显示器在工作(点亮),但利用人眼的视觉暂留效应和发光二极管熄 灭时的余辉效应,看到的却是多个字符“同时”显示。显示器亮度既与点亮时的导通电流有关,也与点亮时间和间隔时间的比例有关。调整电流和时间参烽,可实现亮度较高较稳定的显示。若显示器的位数不大于8位,则控制显示器公共极电位只需一个8位I/O口(称为扫描口或字位口),控制各位LED显示器所显示的字形也需要一个8位口(称为数据口或字形口)。

动态显示器的优点是节省硬件资源,成本较低,但在控制系统运行过程中,要保证显示器正常显示,CPU必须每隔一段时间执行一次显示子程序,这占用了CPU的大量时间,降低了CPU工作效率,同时显示亮度较静态显示器低。

综合以上考虑,由于温度显示为精确到小数点后两位,故只需4个数码管,又考虑到CPU工作效率与电源效率,本毕业设计采用静态显示。为共阳极显示。

4.4.3 硬件编码

动74LS47是一款BCD码转揣为7段输出的集成电路芯片,利用它可以直接驱动共阳

极的7段数码管。它的引脚分部和真值表分别下图。

7段数码管静态显示电跩 原理图之锁存译码电路 74LS47管脚定义 7段数码管静态显示电路原理图之锁存电路 MCS-51单片

7段数码管静态显示电路原理图之CPU电路

上述设计中,单片机工作时钟由18.432MHZ的晶振产生;电路中共有4位7段共阳极数码管,用于显示数据;

74HC573是8位锁存器,用于锁存各个数码管的显示数据;74HC138是3——8线译码器,它和6反相器74HC04一起实现地各个数码管的锁存器控制地址的译码。

4.4.4 软件设计

上述设对于共阳极数码管,控制端置0使数码管点亮,控制端置1使数码管不亮。根据显示数字0~9需要点亮哪几段发光二极管,可以制定出如下表所示的编码表。 字型 0 1 2 3 4 5 6 7 8 9 A B C D E F dp 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 g 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 f 1 0 1 0 0 0 1 0 1 1 0 1 1 1 1 1 e 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 d 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 c 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 b 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 a 1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 1 编码共阴 3F 0C 76 5E 4D 5B 7B 0E 7F 5F 6F 79 33 7C 73 63 编码共阳 C0 F3 89 A1 B2 A4 84 F1 80 A0 90 86 CC 83 8C 9C 软件实现过程如下:

/*************************************************** 7段数码管静态显示程序

***************************************************/ #include #include #include #include

#include #include #include #include #include #include

/* 4个7段数码管锁存器地址 */ #define LED1ADDR 0x8000 #define LED2ADDR 0x8100 #define LED3ADDR 0x8200 #define LED4ADDR 0x8300

// 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f

/* 0-9 a-f 的7段数码管显示编码 */ unsigned char ledcode[16]={0xC0,0xF3,0x89,0xA1,0xB2,0xA4,0x84,0xF1,0x80,0xA0,0x90,0x86,0xCC,0x83,0x8C,0x9C};

/* 存放要显示的数字值 */ unsigned char val[4];//

/* 写锁存器的子程序 */

void wraddr(unsigned int addr,unsigned char d) { unsigned char xdata *pa;

pa=(unsigned char xdata *)addr; *pa=d; }

/* 显示子程序 */ void display(void)

{ unsigned int addr[4]={LED1ADDR,LED2ADDR,LED3ADDR,LED4ADDR}; int i;

for(i=0;i<4;i++)

{ if((val[i]>=0)&&(val[i]<=15)) { wraddr(addr[i],ledcode[val[i]]); } else { wraddr(addr[i],0xff); } } }

/* 初始化子程序 */ void init(void)

{ wraddr(LED1ADDR,0XFF); wraddr(LED2ADDR,0XFF); wraddr(LED3ADDR,0XFF); wraddr(LED4ADDR,0XFF); //输入要显示的数值 val[0]=1; val[1]=2; val[2]=3; val[3]=4; }

/* 主程序入口 */ int main(void) { init();

while(1)

{ display(); } }

本文来源:https://www.bwwdw.com/article/p9ov.html

Top