献县网站建设价格,动漫网站设计方案,泉州网站建设-泉州网站建设公司,图片本地化wordpress文章目录 引言数码管的结构数码管的工作原理静态数码管电路图开发板IO连接图代码演示 动态数码管实现步骤数码管驱动方式电路图开发板IO连接图真值表代码演示1代码演示2代码演示3 引言
数码管#xff08;Seven-Segment Display#xff09;是一种常见的显示设备#xff0c;广… 文章目录 引言数码管的结构数码管的工作原理静态数码管电路图开发板IO连接图代码演示 动态数码管实现步骤数码管驱动方式电路图开发板IO连接图真值表代码演示1代码演示2代码演示3 引言
数码管Seven-Segment Display是一种常见的显示设备广泛应用于电子时钟、计算器、家电和其他数字设备中。数码管由七个独立的LED段组成排列成一个类似数字“8”的形状。通过控制这些LED段的开关状态可以显示0到9的数字及一些字母和符号。同时也称为LED数码管。
数码管的结构
一个标准的七段数码管包括七个LED段每个段用一个字母表示从A到G。另外有些数码管还包括一个小数点DP被称为八段数码管用于显示小数或分隔不同的数字。 --A-- --A--| | | |F B F B| | | |--G-- --G--| | | |E C E C| | | |--D-- --D-- • DP数码管的工作原理
数码管的每个段实际上是一个独立的LED通过控制各个LED的通断状态可以组合成不同的字符。数码管通常有两种连接方式共阳极和共阴极。
共阳极数码管所有的LED阳极正极连接在一起通常接到电源正极。点亮某个段时需将相应的段的阴极负极接地 GND。共阴极数码管所有的LED阴极负极连接在一起通常接地。点亮某个段时需将相应的段的阳极正极接电源正极。 静态数码管
静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后显示字形可一直保持直到送入新字形码为止。
电路图
从资料中提供的电路图可知此开发板静态数码管使用的是共阳极数码管如果使用共阴数码管为了不影响其他IO口的电流要增加IO口的驱动电路单片机主要是用来控制的如果要驱动一些外部的设备通常会使用专门的驱动电路比如74HC245芯片74HC573芯片。
开发板IO连接图 代码演示
控制静态数码管显示数字0即让P0口端口输出数字0的段码0x3F共阴共阳极取反即可,其他数字可根据连接方式自行计算。
#include REGX52.H#define SMG_STATIC P0void main()
{SMG_STATIC ~0x3f;while(1){}
}动态数码管
动态数码管显示也称为动态扫描显示是通过快速轮流点亮各个位数码管来实现的。利用人眼的视觉暂留效应使人感觉所有数码管同时显示不同的数字。
实现步骤
段选和位选将所有位数码管的段选线并联在一起通过位选控制哪一位数码管有效。轮流显示轮流向各个位数码管送出字型码和相应的位选信号。由于切换速度很快人眼无法分辨出切换过程从而感觉所有数码管同时显示。消影处理在切换位选信号之前先将段选信号清零防止残影现象。
数码管驱动方式
单片机直接扫描硬件设备简单但会消耗大量的单片机CPU时间。专用驱动芯片内部自带显存、扫描电路单片机只需告诉它显示什么即可。如TM1640芯片、74HC595
电路图 由电路图可知该开发板的动态数码管是由两个4位一体数码管组成的一共八个数码管它们的公共端单独引出来位选段全部并联在一起动态进行显示采用的是共阴极。 八个公共端同一个时刻只有一个数码管可以点亮因为位选段是并联在一起的所以即使有多个公共端同一个时刻被点亮数码管显示的数据也是相同的。可以利用人眼视觉暂留和余晖效应进行延时操作即可 动态数码管要搭配74H138模块和74H245 74H138一种常用的 3 线到 8 线译码器芯片主要用于地址解码、数据路由和逻辑控制。它可以将输入的三位二进制代码转换成八位的输出常用于单片机系统中进行 I/O 扩展。即三个输入端操作8个输出端具体操作方法可查看真值表。 输入端A0、A1、A2 为三位二进制加权地址输入端口。输出端Y0 至 Y7 为八个输出端口。使能端E1 和 E2 为低有效E3 为高有效。只有当 E1 和 E2 置低且 E3 置高时默认芯片才会工作 74H245一种常用的双向总线缓冲器芯片防止信号干扰。可以将高电平信号转换为低电平信号或将低电平信号转换为高电平信号确保不同电平逻辑设备之间的兼容性。它能够隔离不同总线之间的电平差异和噪声干扰确保数据的可靠传输。
开发板IO连接图 74H138的A0A与P22相连A1B与P23相连A2C与P24相连真值表
真值表 L表示0低电平H表示1高电平
代码演示1
根据真值表操作第五个LED数码管显示数字6Init_Port()函数用于操作操作真值表为了方便对比这里保留了静态数码管的代码。
#include REGX52.H#define SMG_STATIC P0void Init_Port()
{P2_2 0;P2_3 0;P2_4 1;
}void main()
{Init_Port();//显示LED数码管5SMG_STATIC ~0x7d;P1 0x7d;while(1){}
}代码演示2
动态数码管延时循环显示数字6如果需要循环显示数字1到数字8定义数组即可。
#include REGX52.H#define SMG_STATIC P0void DelayXms(unsigned int xms) //12.000MHz
{unsigned char data i, j;while(xms){i 2;j 239;do{while (--j);} while (--i);xms--;}
}void Init_Port(unsigned char Location)
{switch(Location){case 1:P2_2 0;P2_3 0;P2_4 0;break;case 2:P2_2 1;P2_3 0;P2_4 0;break;case 3:P2_2 0;P2_3 1;P2_4 0;break;case 4:P2_2 1;P2_3 1;P2_4 0;break;case 5:P2_2 0;P2_3 0;P2_4 1;break;case 6:P2_2 1;P2_3 0;P2_4 1;break;case 7:P2_2 0;P2_3 1;P2_4 1;break;case 8:P2_2 1;P2_3 1;P2_4 1;break;}
}void main()
{unsigned char i;SMG_STATIC ~0x7d;while(1){for(i 1; i 8;i){Init_Port(i);P1 0x7d;DelayXms(1000);}}
}代码演示3
利用余晖效应动态持续的显示数字1到8P1 0x00; 这一行用于消影。消影的作用是防止数码管显示的残影现象。具体来说当你在多位数码管上显示不同的数字时如果不及时清除前一个数字的显示可能会出现残影即前一个数字的部分段码仍然亮着影响当前数字的显示效果。通过在每次显示完一个数字后将 P1 置为 0x00可以确保所有段码都熄灭从而避免残影现象确保每次显示的数字都是清晰且正确的。
#include REGX52.H#define SMG_STATIC P0//共阴极数码管显示 0~F 的段码数据
unsigned char gsmg_code[17]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void DelayXms(unsigned int xms) //12.000MHz
{unsigned char data i, j;while(xms){i 2;j 239;do{while (--j);} while (--i);xms--;}
}void Init_Port(unsigned char Location)
{switch(Location){case 1:P2_2 0;P2_3 0;P2_4 0;break;case 2:P2_2 1;P2_3 0;P2_4 0;break;case 3:P2_2 0;P2_3 1;P2_4 0;break;case 4:P2_2 1;P2_3 1;P2_4 0;break;case 5:P2_2 0;P2_3 0;P2_4 1;break;case 6:P2_2 1;P2_3 0;P2_4 1;break;case 7:P2_2 0;P2_3 1;P2_4 1;break;case 8:P2_2 1;P2_3 1;P2_4 1;break;}
}void main()
{unsigned char i;SMG_STATIC ~0x7d;while(1){for(i 1; i 8;i){Init_Port(i);P1 gsmg_code[i];DelayXms(1);P1 0x00;//消影}}
}