3、数码管原理及驱动

简介: 3、数码管原理及驱动

一、发光二极管与数码管基础


1、发光二极管

圆头塑封发光二极管的正负极判断


  1. 长脚为正极,短脚为负极
  2. 电极小的为正极,电极大的为负极
  3. 圆弧形边缘的为正极,直线型边缘的为负极
  4. 以上方法都无法判断,则可以借助万用表进行测量

image.png

普通二极管的正向导通电压普遍在1.2V或以上,而一般的指示用发光二极管工作电流在2至20mA内。


2、数码管

数码管的“位”指的是有多少个数码管。

数码管的“段”指的是一个数码管有多少个发光二极管。

位码是决定那一个数码管能够被点亮,而段码是决定被选中的数码管点亮一个什么样的数字。


数码管的内部结构

共阴与共阴数码管来减少引脚的引出其中A表示共阳的公共端,而K来表示共阴的公共端

image.png

共阳和共阴的排列顺序是相同的,其排列如图所示:

image.png

共阳数码管清0来显示数码,共阴数码管置1来显示数码;

配置段亮灭状态的值叫做段码,使能多位公共端的值称为位码。


共阳数码管的段码和位码的设定

image.png

共阳数码管段码0-F的表示形式如下:

u8 Buff[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};


共阴数码管的段码和位码的设定

image.png

共阴数码管段码0-F的表示形式如下:

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


二、数码管显示操作


1、共阳数码管显示

u8 Buff[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void Digital_Led_Play(void)
{
  u8 num;
  PC_DDR=0xFF;//配置PC端口为输出模式
  PC_CR1=0xFF;//配置PC端口为推挽输出模式
  PC_CR2=0x00;//配置PC端口低速率输出
  while(1)
  {
    for(num=0;num<=9;num++)
    {
      LED=Buff[num];
      delay(300);//延时便于观察LED情况
    }
  }
}


2、共阴数码管显示

u8 Buff[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void Digital_Led_Play(void)
{
  u8 num;
  PC_DDR=0xFF;//配置PC端口为输出模式
  PC_CR1=0xFF;//配置PC端口为推挽输出模式
  PC_CR2=0x00;//配置PC端口低速率输出
  while(1)
  {
    for(num=0;num<=9;num++)
    {
      LED=Buff[num];
      delay(300);//延时便于观察LED情况
    }
  }
}


3、串行数码管

原理与如下:

image.png

代码如下:

#define DIO     PG_ODR_ODR7//串行数据输入
#define RCLK    PG_ODR_ODR6//锁存控制信号(上升沿有效)
#define SCLK    PG_ODR_ODR5//时钟脉冲信号(上升沿有效)
//共阳数码管段码“0123456789AbCdEF熄灭-”
u8 Buff[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//位码数组
u8 wei_table[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void Digital_Led_Play(void)
{
  PG_DDR=0xFF;//配置PG端口为输出模式
  PG_CR1=0xFF;//配置PG端口为推挽输出模式
  PG_CR2=0x00;//配置PG端口低速率输出
  PG_ODR=0x00;//初始化PG端口全部输出低电平
  while(1)
  {
    LED8_Display(3,10);//显示数码"5"
    LED8_Display(7,6);//显示数码"6"
  }
}
void LED8_Display(u8 x,u8 y)
{
  LED_OUT(LED_table[y]);//送出段码
  LED_OUT(wei_table[x]);//送出位码  
  RCLK=0;
  RCLK=1;//RCLK产生上升沿
  delay(1);
}
void LED_OUT(u8 outdata)
{
  u8 i;
  for(i=0;i<8;i++)//循环8次
  {
    if (outdata & 0x80)//逐一取出最高位
      DIO=1;//送出“1”
    else 
      DIO=0;//送出“0”
    outdata<<=1;//执行左移一位操作
    SCLK=0;
    SCLK=1;//SCLK产生上升沿
  }
}
目录
相关文章
|
编解码
STM32:PWM驱动舵机(内含:1.接线原理图/实物图+2.代码部分+3.补充知识部分)
STM32:PWM驱动舵机(内含:1.接线原理图/实物图+2.代码部分+3.补充知识部分)
1106 1
STM32:PWM驱动舵机(内含:1.接线原理图/实物图+2.代码部分+3.补充知识部分)
|
异构计算
实验三 基于FPGA的数码管动态扫描电路设计 quartus/数码管/电路模块设计(上)
实验三 基于FPGA的数码管动态扫描电路设计 quartus/数码管/电路模块设计(上)
761 0
实验三 基于FPGA的数码管动态扫描电路设计 quartus/数码管/电路模块设计(上)
|
存储 编译器
单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)
单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)
单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)
LabVIEW控制Arduino驱动数码管(基础篇—11)
利用LIAT中的数码管显示函数库,通过LabVIEW软件控制Arduino Uno控制板,将特定的数据显示在单个数码管上,实现数码管的滚动显示。
舵机应该如果选择?讲讲模拟舵机,数字舵机和总线舵机的区别
舵机应该如果选择?讲讲模拟舵机,数字舵机和总线舵机的区别
1021 0
单片机入门3.驱动蜂鸣器
单片机入门3.驱动蜂鸣器
187 0
STM32 2轮PID智能小车第一章驱动电机让小车动起来
STM32 2轮PID智能小车第一章驱动电机让小车动起来
244 0
使用 ULN2003 驱动 28BYJ-48 步进电机
使用 ULN2003 驱动 28BYJ-48 步进电机
304 0
使用 ULN2003 驱动 28BYJ-48 步进电机
|
异构计算
实验三 基于FPGA的数码管动态扫描电路设计 quartus/数码管/电路模块设计(下)
实验三 基于FPGA的数码管动态扫描电路设计 quartus/数码管/电路模块设计(下)
790 0
实验三 基于FPGA的数码管动态扫描电路设计 quartus/数码管/电路模块设计(下)