小白上路之51单片机(STC89C52)--数码管


数码管介绍

显示器及其接口(本文主要针对LED显示器来介绍)

  单片机系统中常用的显示器有:发光二极管LED显示器、液晶LCD显示器、TFT液晶显示器等。
  LED显示器的显示结构分为:段显示(7段、米字型等)和点阵显示(5×8、8×8点阵等)。
  LED数码管根据LED的不同接法可以分为共阴和共阳
   共阴极数码管:将8个LED的阴极接到同一管脚上(开发板使用
   共阳极数码管:将8个LED的阳极接到同一管脚上
在这里插入图片描述
  若想在数码管中显示数字或字符,则需在数码管上点亮对应的LED。通常采用的是8段显示,正好凑成8位,也就是一个字节。
  根据电路连接图数码管显示常用的16进制编码如下:
      0x3f 0x06 0x5b 0x4f 0x66 0x6d
       0  1   2  3   4  5
      0x7d 0x07 0x7f 0x6f 0x77 0x7c
       6  7   8  9   A  B
      0x39 0x5e 0x79 0x71 0x00
       C  D   E  F  无显示

开发板原理图

在这里插入图片描述

数码管是如何显示出字符的

此处就举例说明8~~以显示数字0为例
  要想显示数字0,则需对应同时点亮数码管中的a,b,c,d,e、f 这6个LED;通过开发板原理图可以看出a~dp分别对应74HC245芯片上的P00-P07这8个管脚,因此要点亮abcdef这6个LED则需将P00-P05置为高电平‘1’,而g和dp则为低电平‘0’;最后将对应的电平从P0口的高位写向低位,即从P07对应的dp开始写,并转为十六进制。应为:0011 1111–>0x3f

静态数码管

特点
  每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新的字形码。
优点
  占用CPU时间少、显示便于监测和控制。
缺点
  硬件电路复杂、成本高。(若要用到8个静态数码管,也就是说这8个数码管都是独立的,让其实现静态显示,即要把这8个数码管各自的8段全部接入单片机来控制,显然,单片机的管脚是不够的:单片机只有32个口,而要控制这8个的话,则需8×8个IO口,就需要对单片机的IO口来进行扩展…

数码管静态显示原理

  回到开发板原理图,若只需LED1静态显示,则位选时将LED1置为低电平‘0’(因为开发板上为共阴极数码管)即P22-P24口都为‘0’–>LED1口输出‘0’(原理参见三八译码器),在段选时根据要显示的值将对应的P0口置为高/低电平即可。若只让LED4静态显示,则P24、P23、P22口分别为‘1’、‘0’、‘0’–>LED4则输出为‘0’,即位选选中LED4。
  补充:P0口为漏极开路(即高阻状态,可独立输入/输出低电平和高阻状态,若需要产生高电平,则需使用外部上拉电阻或电平转换芯片),若不加上拉电阻,想对其单独输出高低电平是无法实现的。

74HC573锁存器芯片的使用

  参见开发板原理图,OE为使能端,当其为低电平时,锁存器开始工作,因此在开发板中已经默认让其接地。LE为锁存端,当其为高电平时,Q0-Q7与D0-D7的状态一样,也就是说芯片内部是打通的,即Q0-Q7随着D0-D7变化而变化;为低电平时,Q0-Q7都锁存数据,无论D0-D7如何变化,Q0-Q7都保持锁存的值不变。
  此处使用573来锁存和驱动,将单片机的P00-P07分别接在D0-D7,LE默认让其短接到VCC,即LE为高电平,也就是P00-P07怎么改变,则段选就怎么改变,因此可以通过P0口直接给数码管发送段选数据。

源程序–静态数码管

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;

sbit LA=P2^2;
sbit LB=P2^3;
sbit LC=P2^4;

u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
	0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
	
void delay(u16 i)
{
	while(i--);
}

void main()
{
	u16 i;
	LA=0;
	LB=0;
	LC=0;//LED1-->0 位选为LED1
	//P0=smgduan[0];//段选
	for(i=0;i<16;i++)
	{
		P0=smgduan[i];
		delay(50000);
	}
	while(1);
}

动态数码管

特点
  将所有数码管的段选线并联在一起,由位选线来控制哪一位数码管有效。同开发板原理图中,两个四位一体的数码管,它们的段选都是并联在一起,通过单片机P0口来进行控制。而显示哪一位数码管则是通过位选(LED1…)来控制。

数码管动态显示原理

  所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,让人感觉各位数码管“同时”都在显示(实际并非同时,有先后顺序,只不过间隔时间非常短,视觉感受不到)。

注:动态显示的亮度比静态显示要差一些(静态显示是直接通过单片机的IO口连到数码管的段选数据上;而动态显示是将每一个数码管的段选并联,则电流分流),故在选择限流电阻时应略小于静态显示电路中的。

74HC138芯片的使用

真值表:
在这里插入图片描述
  三八译码器的A2为高位,对应开发板上的P24也就是C管脚。即A2 A1 A0分别代表的高/低电平(用1/0表示)的值转化为十进制(用m表示)则对应的输出就为Ym,也就对应了位选值。
在这里插入图片描述

源程序–动态数码管

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;

sbit LA=P2^2;
sbit LB=P2^3;
sbit LC=P2^4;

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

void delay(u16 i)
{
	while(i--);
}
void display()
{
	u8 i;
	for(i=0;i<8;i++)
	{
		switch(i)//对应位选 点亮哪个数码管
		{
			case 0:
				LA=0;LB=0;LC=0;break;
			case 1:
				LA=1;LB=0;LC=0;break;
			case 2:
				LA=0;LB=1;LC=0;break;
			case 3:
				LA=1;LB=1;LC=0;break;
			case 4:
				LA=0;LB=0;LC=1;break;
			case 5:
				LA=1;LB=0;LC=1;break;
			case 6:
				LA=0;LB=1;LC=1;break;
			default:
				LA=1;LB=1;LC=1;break;
		}
		//对应段选 显示什么值
		P0=smgduan[i];//第一个数码管显示0;第二个显示1...
		delay(100);//时间越长 循环点亮越明显;时间越短 动态显示越稳定
		P0=0x00;//消隐 防止上一次P0口的数据显示过快而产生重影
	}
}
void main()
{
	while(1)
	{
		display();
	}
}
  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值