• 数码管有共阴极和共阳极 显示成数字样子的叫 段码 unsigned char code seg_cc[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极段码 unsigned char code seg...
数码管有共阴极和共阳极  显示成数字样子的叫 段码
unsigned char code seg_cc[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极段码
unsigned char code seg_ca[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极段码
有单个数码管  也有2级联，4级联，8级联的数码管，就要用到位码
unsigned char code bit_seg_cc[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共阴极，供电端给低电平
unsigned char code bit_seg_ca[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//共阳极，供电端给高电平


//亮一个共阳极的,0~9
void main()
{
unsigned char i = 0;
P0 = 0x00;
while(1)
{
for(i = 0; i < 10 ; i++)
{
P0 = seg_ca[i];
DelayMs(100);
}
}*/
}

/**************************************************
共阴极的,0~99自增,我用了74HC573锁存芯片写了一个display函数
74HC573:c为1时不锁存，c为0时锁存当前P口的值。
*************************************************/
void display(unsigned char FirstBit,unsigned char Lenth)
{
unsigned char a;
for(a = FirstBit ; a < FirstBit+Lenth ; a++)
{
DatePort = 0;
Seg_Latch = 1; //开门
Seg_Latch = 0; //关门

DatePort = bit_seg_cc[a];
Bit_Latch = 1; //开门
Bit_Latch = 0; //关门

DatePort = seg_cc[display_Num[a]];
Seg_Latch = 1; //开门
Seg_Latch = 0; //关门

DelayUs2x(100);
}
}
int main()
{
unsigned char x = 0; //个位
unsigned char y = 0; //十位
unsigned int Num = 0;
P0 = 0x00;
while(1)
{
x++;
if(x == 10)//累加，往下运行，就是刷新，不会卡住
{
y++;
x = 0;
}
if(y == 50)
{
y = 0;
Num++;
}
//  DelayMs(100);//延时，不往下运行，不是我想要的
if(Num == 99)
Num = 0;
display_Num[0] = Num/10;
display_Num[1] = Num%10;
display(0,2);
}
}

/***************************************************************
只要改#define MAXNUM 就能实现任意数的累加
***************************************************************/
#define MAXNUM 999
int main()
{
unsigned char i = 0;
unsigned char j = 0;
unsigned char x = 0;
unsigned int temp = 0;
unsigned int Num = 0;
unsigned int a = 0;
P0 = 0x00;
temp = MAXCOUNT;
while(temp /= 10)
i++;
i++;
j = i;
while(1)
{
x++;
if(x == 200)//累加，往下运行，就是刷新，不会卡住
{
Num++;
x = 0;
if(Num == MAXCOUNT+1)
{
Num = 0;
}
}
//  DelayMs(100);//延时，不往下运行，不是我想要的
a = Num;
i = j;
while(i != -1)
{
display_Num[--i] = a%10;//bit0为个位
a/=10;
}
display(0,j);
}
}
/******************************************************
滚动数码管，显示电话号码
********************************************************/
unsigned char code my_tele_seg_code[11] = {};//存自己电话
void display_mytele(unsigned char FirstBit,unsigned char Lenth,unsigned char seg_code_first)
{
unsigned char a = 0;
unsigned char z = seg_code_first;
for(a = FirstBit ; a < FirstBit+Lenth ; a++)
{
DatePort = 0;
Seg_Latch = 1; //开门
Seg_Latch = 0; //关门

DatePort = bit_seg_cc[a];
Bit_Latch = 1; //开门
Bit_Latch = 0; //关门

DatePort = my_tele_seg_code[z++];
Seg_Latch = 1; //开门
Seg_Latch = 0; //关门
DelayUs2x(100);
}
}
void main()
{
unsigned char i = 0;
unsigned char x = 0;
while(1)
{
x++;
if(x == 100)//累加，往下运行，就是刷新，不会卡住
{
i++;
x = 0;
}
if(i <= 7)
{
DelayUs2x(200);
display_mytele(7-i,i+1,0);
}
else if(i>7 && i<=10)
{
display_mytele(0,8,i-7);
}
else if(i>10 && i <= 18)
{
DelayUs2x(200);
display_mytele(0,18-i,i-7);
}
else
{
i = 0;
}
}
}

展开全文
• 本文主要讲了单片机数码管真值表以及相关程序，下面一起来学习一下
• 本文主要讲了单片机数码管动态显示原理，下面一起来学习一下
• 本文主要讲了单片机数码管显示原理图，希望对你的学习有所帮助。
• /* 名称：单只数码管循环显示 0~9说明：主程序中的循环语句反复将 0~9 的段码送至 P0 口，使数字 0~9 循环显示*/#include#include#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE[]={0xc0...


/* 名称：单只数码管循环显示 0~9
说明：主程序中的循环语句反复将 0~9 的段码送至 P0 口，使数字 0~9 循环显示
*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//延时
void DelayMS(uint x)
{
uchar t;
while(x--) for(t=0;t<120;t++);
}
//主程序
void main()
{
uchar i=0;
P0=0x00;
while(1)
{
P0=~DSY_CODE[i];
i=(i+1)%10;
DelayMS(300);
}
}

为了方便大家更好的学习，您还可以关注畅学电子和EDA的公众号，每天推送相关知识，希望能对你的学习有所帮助！


展开全文
• 数码管是单片机设计中经常用到的器件，本文主要介绍单片机数码管之共阴极与共阳极编码
• 本文主要讲了单片机数码管真值表及程序，希望对你的学习有所帮助。
• 文章目录基本知识数码管应用范围单片机常用显示器LED显示器显示结构LED数码管接法共阳数码管码表共阴数码管码表注意静态显示原理优点缺点 基本知识 数码管 也称作辉光管，是一种可以显示数字和其他信息的电子设备。...


文章目录
基本知识数码管应用范围
单片机常用显示器LED显示器显示结构LED数码管接法共阳数码管码表共阴数码管码表注意
静态显示驱动原理优点缺点
动态显示驱动简单原理
详细原理优点缺点

基本知识
数码管
也称作辉光管，是一种可以显示数字和其他信息的电子设备。玻璃管中包括一个金属丝网制成的阳极和多个阴极 大部分数码管阴极的形状为数字 管中充以低压气体，通常大部分为氖加上一些汞和/或氩 给某一个阴极充电，数码管就会发出颜色光，视乎管内的气体而定，一般都是橙色或绿色
应用范围
数码管是显示屏其中一类， 通过对其不同的管脚输入相对的电流，会使其发亮，从而显示出数字能够显示时间、日期、温度等所有可用数字表示的参数
由于它的价格便宜，使用简单，在电器特别是家电领域应用极为广泛空调、热水器、冰箱等等。绝大多数热水器用的都是数码管，其他家电也用液晶屏与荧光屏
单片机常用显示器
LED发光二极管显示器(Light Emitting Diode)LCD液晶显示器(Liquid Crystal Display)TFT液晶显示器（Thin Film Transistor）
LED显示器显示结构
段显示（7段、米字）点阵显示（5×8、8×8）
LED数码管接法
共阴 共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管，共阴数码管在应用时应将公共极COM接到地线GND上 当某一字段发光二极管的阳极为高电平时，相应字段就点亮 当某一字段的阳极为低电平时，相应字段就不亮  共阳 共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管，共阳数码管在应用时应将公共极COM接到==+5V== 当某一字段发光二极管的阴极为低电平时，相应字段就点亮 当某一字段的阴极为高电平时，相应字段就不亮

共阳数码管码表
0xC0 , 0xF9 , 0xA4 , 0xB0 , 0x99 , 0x92
0x82 , 0xF8 , 0x80 , 0x90 , 0x88 , 0x83
0xC6 , 0xA1 , 0x86 ,0x8E , 0xFF （ 0 ， 1 ， 2， 3 ， 4 ， 5） （ 6 ， 7 ， 8 ， 9 ， A ， B） （C ， D ， E ， F，无显示）
共阴数码管码表
0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d
0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c
0x39 , 0x5e , 0x79, 0x71, 0x00 （ 0 ， 1 ， 2， 3 ， 4 ， 5） （ 6 ， 7 ， 8 ， 9 ， A ， B） （C ， D ， E ， F，无显示）
注意
若数码管接法变了，只需将相应数码表的值取反dp位为二进制最高位，在上图中依次向上递减
静态显示驱动
原理
显示数字或字符必须对数字或字符进行编码 七段数码管加上一个小数点，共计8段 因此为静态数码管提供的编码正好是一个字节 每个数码管的段选必须接一个8位数据线来保持显示的字形码 当送入一次字形码后，显示字形可一直保持，直到送入新字形码为止
优点
占用CPU时间少，显示便于监测和控制编程简单，显示亮度高
缺点
硬件电路比较复杂，成本较高
占用I/O端口多，如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动，要知道一个89S51单片机可用的I/O端口才32个，实际应用时必须增加译码驱动器进行驱动，增加了硬件电路的复杂性
动态显示驱动
简单原理
将所有数码管的段选线并联=在一起，由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选，利用发光管的余辉和人眼视觉暂留作用，使人的感觉好像各位数码管同时都在显示
详细原理
动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起，另外为每个数码管的公共极COM增加位选通控制电路，位选通由各自独立的I/O线控制，当单片机输出字形码时，所有数码管都接收到相同的字形码，但究竟是哪个数码管会显示出字形，取决于单片机对位选通COM端电路的控制，所以我们只要将需要显示的数码管的选通控制打开，该位就显示出字形，没有选通的数码管就不会亮 通过分时轮流控制各个数码管的的COM端，就使各个数码管轮流受控显示，这就是动态驱动 在轮流显示过程中，每位数码管的点亮时间为1～2ms，由于人的视觉暂留现象及发光二极管的余辉效应
优点
节省大量的I/O端口，而且功耗更低
缺点
动态显示的亮度比静态显示要差一些，所以在选择限流电阻时应略小于静态显示电路中的 （尽管实际上各位数码管并非同时点亮，但只要扫描的速度足够快，给人的印象就是一组稳定的显示数据，不会有闪烁感，动态显示的效果和静态显示我个人觉得是一样的）
展开全文
• 小灯是一种简单的LED，给我们视觉效果只能通过亮和灭来表达简单信息。而这节课我们要来学习一种表达更加明确的器件，数码管
• 本课主要讲解了数组编码相关知识数码管的动态显示内容，为了更利于大家理解，我们先用前面介绍过的静态显示法写一个程序，功能为：让6个数码管间隔一秒依次显示1、2、3、4、5、6。
• 适用于单片机的初学者，本程序可以控制外围的数码管显示。自我修改程序即可熟练掌握跑马灯、数码管知识
• ## 51单片机数码管详解

千次阅读 多人点赞 2015-11-18 11:15:51
数码管基础知识LED数码管是由多个发光二极管封装在一起组成“8”字型的器件，引线已在内部连接完成，只需引出它们的各个笔划，公共电极。LED数码管常用的段数一般为7段，有的另加一个小数点 。LED数码管根据LED的接...
一.数码管基础知识
LED数码管是由多个发光二极管封装在一起组成“8”字型的器件，引线已在内部连接完成，只需引出它们的各个笔划，公共电极。LED数码管常用的段数一般为7段，有的另加一个小数点 。LED数码管根据LED的接法不同，分为共阳和共阴两类 。  1.共阳极数码管  指八段数码管的八段发光二极管的阳极(正极)都连在一起，而阴极对应的各段可分别控制，如图a所示。    2.共阴极数码管  指八段数码管的八段发光二极管的阴极(负极)都连在一起，而阳极对应的各段分别控制，如图b所示。
二.静态数码管（以共阳极为例）
1.原理分析  LED 发光二极管的正极共同接在VCC上，这里以单片机P1口为例，当P1口对应引脚为0（即低电平）时数码管的该段发光二极管亮。    2.共阳极数码管段选编码
显示0到F的编码：0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
3.例程  单个数码管显示0到F：
#include <reg51.h>
unsigned char code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay_ms(unsigned int z)
{
unsigned int i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
unsigned int i;
while(1)
{
for(i=0;i<16;i++)
{
P0=num[i];
delay_ms(300);
P0=0xff;
delay_ms(100);
}
}
}
三.动态数码管（以共阴极为例）
1.原理分析  动态显示是多个数码管，交替显示，利用人的视觉暂停作用使人看到多个数码管同时显示的效果。就像我们看的电影是有一帧一帧的画面显示的，当速度够快的时候我们看到它就是动态的。当我们显示数码管的速度够快的时候，也就可以看到它们是同时显示了。
2.数码管动态扫描的一般步骤  (1).给对应的IO口赋位选编码选择让哪一位亮。  (2).给选中的数码管赋段选编码，使其显示对应的数字或字母。  (3).适当延时使其显示稳定（特别注意延时不宜过长）  (4).消隐，即消除上一次IO输出段码对本次段码的影响。
3.共阴极数码管编码  (1).位选编码  位选即让第几个数码管显示，以8个数码管为例  让第1到8个显示的编码：0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f
(2).段选编码  段选即让数码管显示什么，共阴极数码管给1（即高电平）时该段亮  显示0到F:0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x7f  *位选和段选的编码还与电路设计有关，具体情况请根据电路图接线具体分析
4 .例程  让八位数码管显示稳定的0到7：
#include<reg51.h>
unsigned char code wei[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制   查表的方法控制
unsigned char code duan[17] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

void delay_ms(unsigned int z)
{
unsigned int i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}

void main(void)
{
unsigned char i;
for(i=0;i<8;i++)
{
P0=wei[i];    //位选，选择让哪一位亮
P1=duan[i];   //段选，让数码管显示什么
delay_ms(2);  //延时使显示充分
P1=0x00;         //消隐
}
}
展开全文
• 多个数码管显示数字的时候，我们实际上是轮流点亮数码管（一个时刻内只有一个数码管是亮的），利用人眼的视觉暂留现象（也叫余辉效应），就可以做到看起来是所有数码管都同时亮了，这就是动态显示，也叫做动态扫描。...
• 单片机零基础入门（8-2）实战：在数码管中实现显示一个数字--数码管知识的应用一、上节回顾：二、本节需求：三、需求分析：四、源代码： 一、上节回顾： 上篇文章：单片机零基础入门（8-1）学会单片机数码管，这篇...
• 结合之前的独立按键知识，实现数码管与按键的结合 （二）、点亮多个数码管 数码管实现自己想要的组合 结合之前的矩阵按键知识，实现数码管与按键的结合 二、原理分析 数码管是如何点亮的？ 我们可以将数码管看成8个...
• 每一位数码管的段码线（a,b,…g,dp）分别与单片机控制的8为I/O 口锁存器输出相连，通过选择点亮段码线达到显示数值效果。 优点：显示无闪烁，亮度较高，软件控制比较方便 缺点：如果数码管数目增多，则需要增加I/O.
• 主程序中的循环语句反复将 0~9 的段码送至 P0 口，使数字 0~9 循环显示
• 静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动，或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单，显示亮度高，缺点是占用I/O端口多，如驱动5个...
• 数码管基础知识 CT107D单片机综合实训平台上使用的数码管是F3461BH,告诉我们数码管的类型。倒数第2个字母是“B”，说明这个数码管是共阳类型的，如果该字母为“A”则为共阴类型。 F3461BH是一个4位8段的数码管，...
• 单片机零基础入门（8-1）学会单片机数码管，这篇文章就够了，一文吃透数码管---数码管如何定义引脚？数码管如何驱动？驱动方式有哪些？单片机中的译码器和缓冲器又是什么？一、回顾二、本章知识点1、什么是数码管？2...
• 1、数码管知识 a图为一个数码管每段对应的字母 b图为共阴极数码管（他们的阴极都相连） c图为共阳极数码管（他们的阳极都相连） 数码管分为共阳和共阴两种，共阴数码管就是 8 只 LED 小灯的阴极是连接在一起的，...
• 数码管在我们生活中非常常见，作为一种显示器件，我们在单片机项目实战中，经常用到，价钱便宜，功耗低，寿命长，程序编写及控制都是非常简单。下面这个视频链接，可以让你快速了解数码管的工作原理。数码管工作原理...
• 大家好， 通过前一期的学习， 我们已经对ICD2 仿真烧写器和增强型PIC 实验板的使用方法及学习方式有所了解与熟悉，学会了如何用单片机来控制发光管、继电器、蜂鸣器、按键等资源，体会到了学习板的易用性与易学性，...
• 51单片机数码管显示60秒倒计时 基于普中51单片机开发板，运用定时器/计数器0和1，实现60秒的倒计时和LED灯0.5s间隔闪烁 文章目录51单片机数码管显示60秒倒计时前言一、数码管动态扫描二、中断、定时器/计数器现象...
• 基础知识 共阴数码管码表如下图所示 现在市面上单片机类型很多，端口号不统一，一定要学会看端口号的作用。比如本类型，P0口用于输入数码管显示的数据的，P22、P23、P24用于选择数码管的（正好可以控制八个...
• 这一次给大家带来的项目是课堂作业级别的51单片机数码管显示，本次的项目着重于讲解原理，让大家明白单片机的io对于外界设备的控制是如何进行的。 共阳极和共阴极数码管的差异 (1)驱动方法的差异。一个数码管内部的8...

...