基于单片机的LED数码管循环移位显示

第一部分 前言

  本次单片机基础实验将会通过在Proteus软件中画原理图,然后Keil软件下编写源程序并编译形成可执行文件.hex,下载源程序,进行Protues和Keil的联合仿真运行,最终对单片机仿真有初步的认识。

  • 通过本篇文章了解并熟悉8位数码管的电路结构、与单片机的连接方法及其应用原理
  • 学习proteus构建LED数码管显示电路的方法,掌握C51中单片机控制LED数码管动态显示的原理与编程方法

第二部分 数码管的原理构成

LED数码管的结构

  由8个发光二极管构成,按照一定的图形及排列封装在一起的显示器件。其中7个LED构成7笔字形,1个LED构成小数点。如图1所示。
Alt

图1 引脚定义及1位数码管实物图

  只要控制数码管各段LED的亮灭即可显示相应的数字、字母或符号。

LED数码管的工作原理

  1. 共阳极数码管工作原理
    8个发光二极管的阳极共用一个电源的正极,阴极低电平点亮。数码管显示字符的条件:
  • 在VT端加正电源
  • (a,b,c,d,e,f,g,dp)端接低电平或“0”电平
    如图2所示
    在这里插入图片描述
图2 共阳极LED数码管的内部结构原理图
  1. 共阴极数码管工作原理
    8个发光二极管的阴极共用一个电源的负极,阳极高电平点亮。数码管显示字符的条件:
  • 在VT端接地;
  • (a,b,c,d,e,f,g,dp)端接高电平。
    如图3所示
    在这里插入图片描述
图3 共阴极LED数码管的内部结构原理图

LED数码管的字形编码

  要显示各种数字或字符,只需要将不同高低的电平信号送至不同的发光二极管的引脚上,将其点亮。这些用来控制LED显示的不同电平的代码称为字符的字段码。如图所示。
在这里插入图片描述

  共阴极与共阳极显示器的字段码是逻辑非的关系。LED字码段与引脚之间的对应关系如下表所示

字码段D7D6D5D4D3D2D1D0
LED字段dpgfedcba

  共阴极数码管显示字段码如下表所示

显示字符dpgfedcba十六进制
0001111113F
10000011006
2010110115B
3010011114F
40110011066
5011011016D
6011111017D
70000011107
8011111117F
9011011116F
A0111011177
B011111007C
C0011100139
D010111105E
E0111100179
F0111000171

  共阳极数码管显示字段码如下表所示

显示字符dpgfedcba十六进制
011000000C0
111111001F9
210100100A4
310110000B0
41001100199
51001001092
61000001082
711111000F8
81000000080
91001000090
A1000100088
B1000001183
C11000110C6
D10100001A1
E1000011086
F100011108E

LED数码管的控制方式

  LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位。LED数码管的驱动方式有:静态驱动、动态驱动。

  • 静态显示驱动
    也称直流驱动。每个数码管的每一个段码都由一个单片机的I/O口进行驱动。
    优点:编程简单,显示亮度高;
    缺点:占用I/O口多。
  • 动态显示驱动
    将所有数码管的段选端“a,b,c,d,e,f,g,dp ”的同名端连在一起,每个数码管的公共
    极COM增加位选通控制电路,位选通由各自独立的I/O线控制。
    优点:占用I/O口少;
    缺点:电路设计和编程更复杂。

第三部分 设计项目

Protues仿真图

  基于上述实验项目,将会设计一单片机控制的8位数码管(共阴极或是共阳极数码管均可)显示电路,编程实现一段数字的循环左移显示,本次设计将采用共阴极数码管,在Protues中为7SEG-MPX4-Cathode,因此可以得到如下图所示的原理图。
在这里插入图片描述

仿真动态结果

  通过两个4位LED数码管实现数字的循环,利用74HC573和ULN2804对单片机的结果进行输出锁存,然后将结果通过数码管进行显示,其动态结果如下图所示。
在这里插入图片描述
  如图所示,通过在keil中输出2020 0111 CC的16进制结果从而得到相应的结果,数码管进行移位显示。

代码

Keil代码如下:

#include<reg51.h>
#define uchar unsigned char
#define uint signed int
sbit seg=P2^0;
sbit wei=P2^1; 
uchar code LED_D[]={0x5B,0x3F,0x5B,0x06,0x3F,0x06,0x06,0x06,0x39,0x39};	//改变需要输入的字段码即可改变输出的数值
uchar code LED_W[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
//延时函数,消抖
void delay(uint x)
{
   uchar i;
   while(x--)
   for(i=0;i<150;i++);
}
//主函数
void main()
{
   uchar a,b;
   P0=0x00;
   seg=0;wei=0;
	while(1)
{
	for(a=0;a<10;b++,a++)
{
	P0=LED_D[a];
	seg=1;seg=0;
	P0=LED_W[b];
	if(b==7)
	b=-1;
	wei=1;wei=0;
	delay(150);
	P0=0x00;
	seg=1;seg=0;
	wei=1;wei=0;
}
}
}

  以上就是本次LED数码管显示的全部内容,希望通过本次的讲解能够加深大家对于数码管的理解。文章的内容可能存在部分不足之处,如有错误,请在评论区指出,谢谢。

  • 11
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜雨星驰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值