历史上的今天
今天是:2025年04月24日(星期四)
2019年04月24日 | 51的静态和动态数码管的显示
2019-04-24 来源:eefocus
一、数码管显示原理:
数码管其实就是有8个LED构成,分为a、b、c、d、e、f、g、dp,而数码管又分为共阴极(左边,高电平点亮)和共阳极(右边,低电平点亮),点亮对应的LED即可显示对应的数字,共阴极编码表如下:
0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d 、0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c,0x39 , 0x5e , 0x79 , 0x71 , 0x00
分别对应0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,而0x00则不显示。
注意:比如显示0,则要abcdef都为1,即是0011 1111,转为16进制就是0x3f,依次类推

为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。LED显示器工作方式有两种:静态显示方式和动态显示方式。
---------------------------------------------------------------------------------------------------------------------------------------------------
二、静态显示原理
静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。

八位数码管及74HC573原理图

D74HC138译码器原理图
3、74H573锁存器的使用(控制段选)

OE为使能端,当他为低电平的时候, 锁存器开始工作
VCC和GND为电源和地端
LE为锁存端,当LE为高电平的时候,Q0~Q7都跟D0~D7状态一样,处于直连状态。
当LE为低电平的时候,Q0~Q7都锁存数据,无论D0~D7怎么变化,Q0~Q7都保持锁存之前的那个状态。




代码如下:
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
void main()
{
LSA=0;
LSB=0;
LSC=0; //控制38译码器的Y0输出低电平
P0=smgduan[0];
while(1);
}
-------------------------------------------------------------------------------------------------------------------------------------
三、动态数码管
动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
3-8译码器---D74HC138(控制位选)
74HC138D 是一种三通道输入、八通道输出译码器,简称为3-8译码器,主要应用于消费类电子产品
反过来的规律其实就是八进制,000对应Y0,001对应Y1,010对应Y2,依次类推,这样就能实现对应数码管的位选操作。
代码如下:
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : DigDisplay
* 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示
*******************************************************************************/
void DigDisplay()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//显示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//显示第5位
case(6):
LSA=0;LSB=1;LSC=1; break;//显示第6位
case(7):
LSA=1;LSB=1;LSC=1; break;//显示第7位
}
P0=smgduan[i];//发送段码
delay(100); //间隔一段时间扫描
P0=0x00;//消隐
}
}
void main()
{
while(1)
{
DigDisplay(); //数码管显示函数
}
}
上一篇:C51/C52的中断(EXTI)
下一篇:使keil5支持51单片机
史海拾趣
|
公司版STM32工作原理 晶振:老板,带两个秘书(电容),有时老板不在秘书说了算(内部时钟模式) 时钟PLL:老板娘,老板控制局面,但还是要听老板娘的话。 CPU:人力资源部,调动人员齐心合力 APB1,APB2时钟:部门经理,发布任务进度, ...… 查看全部问答> |
|
嵌入式系统的远程数据传输经常要使用公共通信线路这给数据安全带来隐患本文介绍的T E A 数据 加密算法高效可靠适用于资源有限的嵌入式系统同时文章还给出T E A 算法的一个应用实例… 查看全部问答> |
|
evc有没有打开文件夹对话框的api啊,SHBrowseForFolder()这个函数在evc里编译不过啊,还有没有其他的方法啊。 wince不会只能打开文件吧。 各位大虾帮帮忙啊!… 查看全部问答> |




