1、数码管的基本介绍

先给大家提供一张原理图看一下,如图1所示。

图1 数码管原理图

这是比较常见的数码管的原理图,我们板子上一共有6只数码管。前边有了LED小灯的学习,数码管学习就会轻松的多了。从图1能看出来,数码管共有a,b,c,d,e,f,g,dp这8个段,而实际上,这8个段每一段都是一个LED小灯,所以数码管就是由8个LED小灯所组成的。我们看一下数码管内部结构图。

图2 数码管结构图

数码管分为共阳数码管和共阴数码管,所谓的共阴数码管就是8只LED小灯的阴极是接在一起的,也就是阴极是公共端,由阳极来控制小灯是否亮灭。同理,共阳数码管就是阳极是接到一起的,大家可以仔细研究下图1。细心的同学也会发现,数码管上边有2个com,实际上就是我们数码管的公共端。为什么有2 个,我个人认为,一方面有2个可以起到对称的效果,刚好是10个引脚,另外一个方面,公共端通过的电流较大,我们初中就学过,并联电路电流之和等于总电流,用2个com可以把公共电流平均到2个引脚上去,降低线路承受的电流。

从我们板子的电路图上能看出来,我们所用的数码管是共阳数码管,如图所示。

图3 共阳数码管电路

他们的com是接到了正极上,当然了,和LED小灯电路类似,也是由74HC138控制了三极管的导通来控制整个数码管的电流,我们先来看DS1这个数码管。原理图上可以看出来,控制DS1的三极管是Q17,控制Q17的引脚是LEDS0,对应到74HC138上边就是Y0端的输出。

图4 74HC138控制图

我们现在的目的是让LEDS0这个引脚输出低电平,相信大家现在可以独立根据前边学到的内容把ADDR0,ADDR1,ADDR2,ADDR3,ENLED这4个输入状态写出来,现在大家不要偷懒,都去根据138的手册去写一下,不需要你记住这些结论,但是遇到就写一次,锻炼过几次后,遇到同类芯片自己就知道如何去解决问题了。

数码管通常是用来显示数字的,我们板子上的6个数码管,习惯上我们称之为6位,那控制位选择的就是74HC138了。而数码管内部的8个LED小灯我们称之为数码管的段,那么数码管的段选择(即该段的亮灭)是通过P0口控制,经过74HC245驱动。

2、数码管的真值表

数码管的8个段,我们直接当成8个LED小灯来控制,那就是a、b、c、d、e、f、g、dp一共8个LED小灯。我们通过图1可以轻而易举的看出来,如果我们点亮b和c这两个LED小灯,也就是数码管的b段和c段,其他的所有的段都熄灭的话,就可以让数码管DS1显示一个数字1,那么这个时候实际上P0的值的二进制就是0b11111001,十六进制就是0xF9。那么我们写一个程序进去,看看让数码管显示一下看看。

#include               //包含寄存器的库文件

sbit  ADDR0 = P1^0;

sbit  ADDR1 = P1^1;

sbit  ADDR2 = P1^2;

sbit  ADDR3 = P1^3;

sbit  ENLED = P1^4;

void  main()

{

unsigned char j = 0;

unsigned int  i = 0;

ENLED = 0;

ADDR0 = 0;

ADDR1 = 0;

ADDR2 = 0;

ADDR3 = 1;           //74HC138开启三极管Q17

while(1)             //程序死循环

{

P0 = 0xF9;      //打开数码管b和c段

}

}

大家把这个程序编译一下,下载到单片机里会发现,最右侧的数码管成功显示1这个数字。

同样的方法,我们可以把其他的数字都成功的在数码管上显示出来,而数码管显示的数字对应给P0的赋值,我们叫做数码管的真值表。我们来列一下我们这个电路图的数码管真值表,注意,这个真值表里显示的数字都不带小数点。

表1 数码管真值表

数字

0

1

2

3

4

5

6

7

真值表

0xC0

0xF9

0xA4

0xB0

0x99

0x92

0x82

0xF8

数字

8

9

A

B

C

D

E

F

真值表

0x80

0x90

0x88

0x83

0xC6

0xA1

0x86

0x8E

大家可以把上边那个数码管显示1的那个程序中的P0的赋值随便修改成我们表5-1中的真值表里的数字试试看,把数码管显示的数字显示出来。

3、数码管的静态显示

从第三课我们学习74HC138以后,我们了解到74HC138同时一次只能让一个输出口为低电平,也就是在一个时刻内,我们只能让一个数码管显示,始终选通数码管并且可以根据我们的P0总线的信号来改变这个数码管的值,我们可以理解为数码管的静态显示。

数码管静态显示是对应动态显示而言的,静态显示对于一两个数码管还行,多个数码管,静态显示实现的意义就没有了。这节课我们先用一个数码管的静态显示来实现一个简单的秒表,为下节课的动态显示打下基础。

先来介绍一个51单片机的关键字code。我们前边课程定义变量的时候,一般用到unsigned char或者unsigned int这两个关键字,这样定义的变量都是放在我们的单片机的RAM中,我们在程序中可以随意去改变这个变量的值。但是还有一种常数,我们在程序中要使用,但是却不进行对这个值的改变,这种值我们可以加一个code关键字修饰一下,修饰完毕后,这个值就会存储到我们的程序空间flash中,这样可以大大节省我们单片机的RAM的使用量,毕竟我们的RAM空间比较小,而程序空间是很大的。比如我们现在要使用的数码管真值表,我们来看一下我们下边的这个程序。

#include               //包含寄存器的库文件

sbit  LED = P0^0;

sbit  ADDR0 = P1^0;

sbit  ADDR1 = P1^1;

sbit  ADDR2 = P1^2;

sbit  ADDR3 = P1^3;

sbit  ENLED = P1^4;

unsigned char code LedChar[] = {

0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8e

};                  //用数组来存储数码管真值表,下一课详细介绍数组

void main()

{

unsigned char counter = 0;

unsigned char j = 0;

ENLED = 0; ADDR0 = 0; ADDR1 = 0;

ADDR2 = 0; ADDR3 = 1; P0 = 0XFF;  //74HC138和P0初始化部分

TMOD = 0x01;                    //设置定时器0为模式1

TH0  = 0xB8;

TL0  = 0x00;                   //定时值初值

TR0  = 1;                      //打开定时器0

while(1)

{

if(1 == TF0)                 //判断定时器0是否溢出

{

TF0 = 0;

TH0 = 0xB8;              //溢出后,重新赋值

TL0 = 0x00;

counter++;

if(50 == counter)      //判断定时器0溢出是否达到50次

{

counter = 0;        //counter清0,重新计数

P0 = LedChar[j++]; //把数组里的对应值送给P0

if(16 == j)         //当显示到F后,归0重新开始

{

j = 0;

}

}

}

}

}

文章来源于网络,版权归原作者

觉得不错,请点个赞

单片机数码管显示原理相关推荐

  1. 基于51单片机数码管显示

    基于51单片机数码管显示 ## 数码管显示原理 数码管(LED Segment Displays)由多个发光二极管封装在一起组成"8"字型的器件,引线已在内部连接完成,只需引出它们 ...

  2. 51单片机数码管显示60秒倒计时(C语言)

    51单片机数码管显示60秒倒计时(C语言) 基于普中51单片机开发板,运用定时器/计数器0和1,实现60秒的倒计时和LED灯0.5s间隔闪烁 文章目录 51单片机数码管显示60秒倒计时(C语言) 前言 ...

  3. 二、数码管显示原理及应用实现

    数码管显示原理及应用实现 视频链接 对应课程:P11-P12 数码管显示原理 我们先看一下一个数码管是如何亮起来的.数码管内部电路如图所示: 为了封装统一,生产商为单位数码管都封装了10个引脚,其中第 ...

  4. 数码管显示原理:共阴极和共阳极的区别,静态显示程序。

    数码管显示原理:共阴与共阳 LED发光原理是PN结光电二极管将电能转化为光能的结果.当半导体芯片两端加正反向电压时,当电子从n区域注入p区域时,它们与p区的空穴结合并释放能量,这些能量以光子的形式发射 ...

  5. STC51入门笔记(郭天祥C语言)---第三节:数码管显示原理及应用实现

    这里是引用 声明:本篇文章只是个人知识盲区.知识弱点.重点部分的归纳总结,望各位大佬不喜勿喷.梳理顺序是按照书籍的实际顺序梳理,转载请注明出处. 作者:sumjess 一.数码管显示原理 我们先来看几 ...

  6. Arduino:数码管显示原理详解和Proteus仿真实验

    Arduino:数码管显示原理详解和Proteus仿真实验 Proteus仿真 数码管介绍 数码管是半导体发光元件,其基本单元是发光二极管.根据段数,数码管分为七段管和八段管. 八段管比七段管还多一个 ...

  7. STC51单片机数码管显示程序和仿真

    STC51单片机数码管显示程序和仿真 仿真使用的数码管时共阴极 1.共阳: char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92

  8. 单片机c语言数码管显示5,51单片机数码管显示实验报告(5页)-原创力文档

    51单片机数码管显示实验 实验内容: 编写程序让8只数码管初始显示0,每隔大约1s加1显示(可以用延时函数实现),到数码管显示9后,再从0开始显示,如此循环反复. C语言程序 #include #de ...

  9. 51单片机按键值显示在数码管上,数码管亮度控制,数码管显示原理

    项目场景: 51单片机按下按键在数码管上显示相应的值 问题描述 平常按键检测程序,按下延时消抖,记录一个数字,再按下另一个记录一个数字,然后在一位数码管上显示,就出现了问题.数码管一直显示0 . 下面 ...

  10. 51单片机数码管显示

    一.数码管静态显示 1.原理:数码管无非就是八块发光二极管集成在 了一起,如右图所示,数码管有共阴极 和共阳极数码管之分. 共阴极数码管:将八只发光二极管的负极通过一 根总线连接在了一起 , 然后每只 ...

最新文章

  1. ICPC2008哈尔滨-A-Array Without Local Maximums
  2. 数据中心未来将向“四高”演进
  3. Python教程:os 与 sys 模块详细用法
  4. MYSQL学习笔记 (三)JOIN用法
  5. WebRTC 音频模块单独编译 --【转载】
  6. 子网与子网掩码的介绍
  7. 让用VS2013编写的程序在XP中顺利运行
  8. java文件转码工具-native2ascii.exe命令简介
  9. java coap_CoAP协议-以Californium(Java)为例的CoAP初步实现
  10. 2005年计算机图书出版路在何方——出版崩溃了吗?
  11. 直击14号台风“灿都”最新消息!浙江多地停课停运,上海严阵以待!
  12. php输出英文格式的日期
  13. 0基础单片机入门知识:怎么使用数字万用表以及注意事项
  14. C语言实现SM4加解密算法
  15. 转:彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑
  16. Tushare所有版块数据获取(python)
  17. easyX中loadimage()函数共计有5个参数详解
  18. 2023年某科技公司前端开发初级岗的面试笔试真题(含选择题答案、问答题解析、机试题源码)
  19. sqlserver通过日志恢复删除数据(只能恢复小数据量)
  20. 京东 探索星球瓜分 1000 亿京豆 脚本

热门文章

  1. 电路设计——发光二极管限流电阻
  2. 关于自抗扰控制的稳定性分析
  3. python绘制科赫雪花and科赫雪花进阶版
  4. [Ansys Workbench] 平面对称斜拉桥的模态分析
  5. html 倒计时小工具
  6. 批量创建文件夹-批处理(一)
  7. (Python)批量创建文件夹
  8. android xml属性,android中解析XML androidxml属性大全
  9. 装配区5s管理制度推行办法
  10. 【分享】班组5S管理实践办法