历史上的今天
返回首页

历史上的今天

今天是:2025年04月03日(星期四)

正在发生

2020年04月03日 | 51单片机之动态数码管显示

2020-04-03

首先来看一下开发板上的电路原理图:

本开发板上使用的是,通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有输出。


138译码器的真值表如下图G1,G2A,G2B都是选通脚,当G1,G2A,G2B为100的时候138译码器开始工作,A为最低位,B为中间位,C为最高位。CBA=000B时,Y0为1,其他口为0,CBA=001B时,Y1为1,其他口为0,CBA=010B时,Y2为1,其他口为0,CBA=011B时,Y3为1,其他口为0,CBA=100B时,Y4为1,其他口为0,CBA=101B时,Y5为1,其他口为0,CBA=110B时,Y6为1,其他口为0,CBA=111B时,Y7为1,其他口为0。


由于8个数码管是共阴的,所以当Y0~Y7中的一个为1,其反值为0,相应的数码管阴极置低,再将数码管的段选位置高,就可以显示相应的值。

使用38译码器只能在同一个时刻让一个数码管显示,想要让8个数码管同时显示。这个时候就要用到动态显示技术。


动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数码管同时显示的效果。就像我们看的电影是有一帧一帧的画面显示的,当速度够快的时候我们看到它就是动态的。当我们显示数码管的速度够快的时候,也就可以看到它们是同时显示了。


程序示例如下:


#include "reg52.h"

 

   typedef unsigned char u8;

   typedef unsigned int u16;

 

   sbit LSA = P2^2;

   sbit LSB = P2^3;

   sbit LSC = P2^4;

 

 

   u8 code smgduan[16]= {0x3f, 0x06, 0x5b, 0x4f,

                    0x66, 0x6d, 0x7d, 0x07,

0x7f, 0x6f, 0x77, 0x7c,

0x39, 0x5e, 0x79, 0x71}; //0~F数码

 

 

 

   void delay(u16 i) //延时函数

   {

    while(i--);

   }

void DigDisplay() //数码管显示函数

{

u8 i;

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

  switch(i)

  {

case 0:

  LSC = 0;LSB = 0;LSA = 0;break; //显示第1个数码管

case 1:

  LSC = 0;LSB = 0;LSA = 1;break; //显示第2个数码管

case 2:

LSC = 0;LSB = 1;LSA = 0;break; //显示第3个数码管

case 3:

LSC = 0;LSB = 1;LSA = 1;break; //显示第4个数码管

case 4:

LSC = 1;LSB = 0;LSA = 0;break; //显示第5个数码管

case 5:

  LSC = 1;LSB = 0;LSA = 1;break; //显示第6个数码管

case 6:

  LSC = 1;LSB = 1;LSA = 0;break; //显示第7个数码管

case 7:

LSC = 1;LSB = 1;LSA = 1;break; //显示第8个数码管

  }

  P0 = smgduan[i+1];//显示1~8的数值

  delay(100); //延时,造成视觉暂留现象

  P0 = 0x00; //数码管消隐

}

}

 

   void main()

   {

   while(1)

   {

   DigDisplay();

   }

   }

 


在上例代码中使用了C51中的code关键字。


u8 code smgduan[16]= {0x3f, 0x06, 0x5b, 0x4f,


                    0x66, 0x6d, 0x7d, 0x07,


                           0x7f, 0x6f, 0x77, 0x7c,


                        0x39, 0x5e, 0x79, 0x71};


这称之为编码定义,编码定义方法与C语言中的数组定义方法非常相似,不同的地方就是在数组类型后面多了一个code关键字,code即表示编码的意思。需要注意的是,单片机C语言中定义数组时是占用内存空间的,而定义编码时是直接分配到程序空间(ROM)中,编译后编码占用的是程序存储空间,而非内存空间(RAM)。


本次实验使用的是共阴极数码管,在静态数码管试验中使用的是共阳极数码管,那在试验过程中如果不清楚数码管是共阴极或者共阳极,可以使用万用表来确定数码管是共阴极还是共阳极的。


对数字万用表来说,红色表笔连接表内部电池正极,黑色表笔连接表内部电池负极,当把数字万用表置于二极管档时,其两表笔间开路电压约为1.5V,把两表笔正确加在发光二极管两端时,可以点亮发光二极管。


如下图所示,将数字万用表置于二极管挡,红表笔接在①脚,然后用黑表笔去接触其他各引脚,假设只有当接触到⑨脚时,数码管的a段发光,而接触其余引脚时则不发光。由此可知,被测数码管为共阴极结构类型,⑨脚是公共阴极,①脚则是数码管的a段.接下来再检测各段引脚,仍使用数字万用表二极管档,将黑表笔固定接在⑨脚,用红表笔依次接触②、③、④、⑤、⑥、⑦、⑧、⑩引脚时,数码管的其他段先后分别发光,据此便可绘出该数码管的内部结构和引脚排列图。

检测中,若被测数码管为共阳极类型,则需将红、黑表笔对调才能测出上述结果,在判别结构类型时,操作时要灵活掌握,反复试验,直到找出公共端为止,大家只要懂得了原理,检测出各个引脚便不在是问题了。

推荐阅读

史海拾趣

H&D Wireless公司的发展小趣事

高创深知不同行业对于运动控制解决方案的需求存在差异,因此始终关注行业应用的发展趋势。通过深入了解客户需求和行业工艺特点,高创能够为客户提供量身定制的解决方案。例如,在锂电行业,高创针对电池生产线的特殊需求开发了高性能伺服系统和运动控制器;在光伏行业,则提供了高精度、高稳定性的跟踪系统解决方案。这些定制化解决方案不仅满足了客户的实际需求,还帮助高创在行业中树立了良好的口碑。

广芯电子(BROADCHIP)公司的发展小趣事

高创深知不同行业对于运动控制解决方案的需求存在差异,因此始终关注行业应用的发展趋势。通过深入了解客户需求和行业工艺特点,高创能够为客户提供量身定制的解决方案。例如,在锂电行业,高创针对电池生产线的特殊需求开发了高性能伺服系统和运动控制器;在光伏行业,则提供了高精度、高稳定性的跟踪系统解决方案。这些定制化解决方案不仅满足了客户的实际需求,还帮助高创在行业中树立了良好的口碑。

FDK AMERICA公司的发展小趣事

随着全球电子市场的不断发展,FDK AMERICA公司意识到单靠国内市场已无法满足其发展需求。于是,公司积极寻求国际合作机会,与全球知名电子企业建立战略合作伙伴关系。通过合作,公司成功将产品打入国际市场,进一步扩大了市场份额。

API Technologies公司的发展小趣事

随着全球电子市场的不断扩大,API Technologies开始实施全球化战略布局。公司先后在多个国家和地区设立了分支机构和研发中心,积极开拓国际市场。通过与全球客户的紧密合作,API Technologies的产品和技术逐渐在全球范围内得到了广泛应用和认可。

Gardner Denver公司的发展小趣事

作为一家有社会责任感的企业,API Technologies不仅关注经济效益,也积极履行社会责任。公司注重环保和可持续发展,在生产过程中采取了一系列环保措施,降低能耗和排放。同时,公司还积极参与社会公益活动,回馈社会,为社区的繁荣和发展做出了贡献。

这些故事展示了API Technologies在电子行业中的发展历程和取得的成就。通过不断创新、全球化布局、品质管理和履行社会责任,公司逐渐成为了电子行业的佼佼者。

GWM Associates公司的发展小趣事
在设计完成后,进行详细的测试和调试,以确保放大器的性能符合设计要求。

问答坊 | AI 解惑

蓝牙技术在汽车中的应用

基于微控制器的系统发展日趋精密,给汽车应用带来了新功能,同时也给这些产品认证工程带来了新挑战。随着 RF 技术(如蓝牙和 Wi-Fi)应用越来越广泛,在解决管理条例遵守和法律责任问题方面带来更高的要求。这些问题包括新技术之间的兼容性、新技术 ...…

查看全部问答>

上当受骗,网友们千万别买优龙的开发板

上当受骗,网友们千万别买优龙的开发板 板子很烂,服务就更差了!气愤啊! 跟群里的网友一说,原来好多都是受害者! 希望不要再有朋友上当了11…

查看全部问答>

Everyday.Practical.Electronics.Magazine.37-02.-.Jan.2008

Everyday.Practical.Electronics.Magazine.37-02.-.Jan.2008 [ 本帖最后由 tecfighter 于 2009-3-4 07:57 编辑 ]…

查看全部问答>

求教个问题朋友们

我在做51单片机实验时,用的双龙下载软件,结果怎么总是提示:打印口没有下载线。。。怎么回事?不过可以确认的是绝对不是下载线和并口没有接触好。…

查看全部问答>

Bootloader中的汇编。。

; Make sure that TLB & cache are consistent         mov     r0, #0         mcr     p15, 0, r0, c8, c7, 0     &nbs ...…

查看全部问答>

如何通过蓝牙obex下载手机电话本?

请问如何通过蓝牙obex协议下载手机电话本? 不要用PBAP,因为很多手机不支持。…

查看全部问答>

请教wince内存拷贝问题

请教一个问题,在WINCE下,我用HalAllocateCommonBuffer申请了一块内存用来DMA传输,然后通过memcpy将这块内存里面的内容拷贝到另一个区域,现在发现memcpy耗费的时间很长,跟普通用new alloc等申请的内存拷贝相比,慢了大概50倍,想请教这是什么原 ...…

查看全部问答>

我修改了WINCE500\PUBLIC\COMMON\OAK\DRIVERS\TOUCH\TCHMAIN\tchmain.c,但为什么对应生成的touch.dl

按理说对上述的工程进行\"build current project\",应产生对应的dll,但是没有,为什么?应怎样做才行?…

查看全部问答>

(紧急求助)STM32F101C8T6FLASHDownload失败

    我使用STM32F101C8T6J进行产品开发,在KEIL环境下可以使用ULINK1在SRAM内进行调试,但是发现不能对其FLASH进行调试或下载。也不能通过Boot loader下载。测试条件如下:    我使用的是自己焊 ...…

查看全部问答>