51单片机:数码管(静态+动态)

先不解释静态和动态有什么区别,看完你就明白了(主要是我菜,解释不清)。

单片机上没有静态数码管模块,虽然没有,但依然可以 在动态数码管电路中使用其中一个来学习静态数码管显示。

数码管简介:

数码管51单片机上的数码管,通俗一点讲就是多个led组装在一起,数码管的点亮和led差不多(复杂一点),按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,反之就不亮。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM 接到地线GND 上,当某一字段发光 二极管的阳极为高电平时,相应字段就点亮,反之就不亮。

我的单片机是共阴数码管,原理图如下:

 

 

数码管驱动芯片and译码器:

因为共阴数码管是要靠单片机 IO口输出电流来点亮的,但单片机 I/O口难以输出稳定、大的电流,所以数码管与单片机连接时需要加驱动电路,可以用上拉电阻的方法或使用专门的数码管驱动芯片,比如 74HC573、74HC245等,其输出电流较大, 电路接口简单

我的译码器是74HC138,(译码器稍微有点打脑壳,原理懂了就好了)。

 静态数码管显示:

所以想让单个数码管显示,只需要字段让对应的led点亮就可以了。

例如,显示0,就是abcdef亮,g和Dp不亮,Dp是最高位,a是最低位,二进制就是0011 1111,十六进制是0x3f。以此原理就可以推出常用字符的段选,码表如下:

这里先不研究138译码器的原理,直接写代码,点亮左数第二个数码管(LED7),那么138译码器的配置:C=1,B=1,A=0。(C是高位,110进制转换就是6,0123456,第7个数)用这个方法来控制哪个显示,有没有很巧妙?

#include<reg52.h>

typedef unsigned char u8;

sbit K1=P2^2;
sbit K2=P2^3;
sbit K3=P2^4;

u8 code number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
           0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
//ram的资源比较宝贵	,code的作用是告诉单片机,我定义的数据要存储在ROM(程序存储区)里面,写入后就不能再更改
//这个code可要可不要
void main()
{
	K3=1;
	K2=1;
	K1=0;                   //LED7显示
	while(1)
	{
		P0=number[1];    //显示1
	}
}	

动态数码管显示:

上面的静态数码管显示一个就动用了出138译码器以外的8个I/O口,而要全部显示8个的话就需要64个I/O口,单片机根本就没有这么多资源。

所以用一个138译码器实现数码管的动态刷新显示,switch-case是核心。

#include<reg52.h>

typedef unsigned char u8;

sbit K1=P2^2;
sbit K2=P2^3;
sbit K3=P2^4;

u8 code number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
           0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

void delay(u8 t)
{
	while(t--);
}

void dtxs(u8 i,x)
{
	switch(i)
		{
			case 1:K3=0;K2=0;K1=0;break;
		    case 2:K3=0;K2=0;K1=1;break;
		    case 3:K3=0;K2=1;K1=0;break;
	        case 4:K3=0;K2=1;K1=1;break;
		    case 5:K3=1;K2=0;K1=0;break;
		    case 6:K3=1;K2=0;K1=1;break;
		    case 7:K3=1;K2=1;K1=0;break;
		    case 8:K3=1;K2=1;K1=1;break;
		}				
   	P0=number[x];
	delay(10);
	P0=0x00;		
}

void main()
{
	while(1)
	{
		dtxs(1,9);
		dtxs(2,8);     //单片机最后两位显示89
	}
}	

萌新上路,制作不易,如有错误还请评论区指正。各位帅气逼人、美若天仙、颜值爆表的看官老爷点个赞吧,求求了。(在线卑微求赞)

  • 19
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值