历史上的今天
今天是:2025年04月04日(星期五)
2020年04月04日 | (五).单片机输出电路的实践——数码管显示电路的设计
2020-04-04 来源:eefocus
一.数码管显示电路设计
数码管分为共阴和共阳两种,一种是将LED内部所有的阳极连到一起,并通过com端引出。共阴则反之。

当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。

数码管显示有静态显示和动态显示两种,静态显示即为对数码 管的每一段进行编码控制达到显示指定数字的目的。动态显示即通过锁存的方法利用人的视觉暂留,通过有限的单片机IO口显示更多的数码管。
如图,利用两个锁存器分别控制数码管的段选和位选,即利用了有限的IO口资源实现了控制多个数码管动态扫描显示的功能。
注:74HC573的D0-D7口分别接在单片机的IO口上。
二.单片机数码管显示代码
1.单个数码管的显示
#include #define uchar unsigned char #define uint unsigned int uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uint j; void delay(uint i) { uint x,y; for(x=i;x>0;x--) for(y=110;y>0;y--); } main(void) { P0=0x00; while(1) { for(j=0;j<8;j++) { P0=table[j]; delay(500); } } } 2.多个数码管动态显示 #include #define uchar unsigned char #define uint unsigned int sbit DX=P2^6;//控制段选 sbit WX=P2^7;//控制位选 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段选数据,显示数字0-9 uchar code table1[]={0xfe,0xfc,0xfb,0xf7,0xef,0xcf}; //位选数组对1到6六个数码管 uchar i,j; void delay(uint i) { uint x,y; for(x=i;x>0;x--) for(y=110;y>0;y--); } main(void) { while(1) { for(i=0;i<6;i++) { DX=1; P0=table[i]; DX=0; WX=1; P0=table1[i]; WX=0; delay(1); } } } 3.代码的封装 void smDisplay(uchar a,uchar b)//a,b分别为段选和位选信号 { DX=1; P0=a; DX=0; WX=1; P0=b; WX=0; } 三.总结 对于静态数码管显示电路的设计需要使用到STC89C52单片机的IO口输出功能,通过对数码管单个LED的点亮以达到我们要显示的数字或字母信息。 而对于动态的数码管显示电路的设计则需要用到74HC573锁存器,在代码上也要做到一定的处理。
下一篇:51单片机之数码管静态显示
史海拾趣
|
利用C51接收10位UART,使用51汇编集成开发系统仿真时为什么显示定时器1未启动?那怎么启动?谢谢,程序如下 ORG 0000H MAIN: MOV TMOD,#20H ;设置波特率,定时器工作于方式2 MO ...… 查看全部问答> |
|
在vs.net2003中用C#,mscomm32控件编写通信程序如何与SQL Server2000同步更新 在vs.net2003中用C#,mscomm32控件编写winform通信程序与下位机通信,其上使用datagrid控件并增加数据集,更改数据可保存到SQL Server2000数据库中. 我的问题是:我想把保存到数据库中的数据发到下位机中去,接收时也先保存到数据库再显示,请问应该怎么 ...… 查看全部问答> |
|
我的USB插上后,电脑提示无法识别的USB设备,是怎么回事啊?各位高手请指点一下。网上大概查了一下出现这种提示的原因:一是USB连接线供电不足,二是驱动软件的问题。我还没检验过。还会不会有其他的原因啦。… 查看全部问答> |
|
TI工程师为您介绍TI LP5900系列LDO的最新产品LP5907,它提供了市面上最好的纹波抑制比以及瞬态响应的功能.video platformvideo managementvideo solutionsvideo player复制代码… 查看全部问答> |





