0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机数码管知识要点

2oON_changxuemc 2018-03-05 11:42 次阅读

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端的输出。

图474HC138控制图

我们现在的目的是让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//包含寄存器的库文件

sbitADDR0=P1^0;

sbitADDR1=P1^1;

sbitADDR2=P1^2;

sbitADDR3=P1^3;

sbitENLED=P1^4;

voidmain()

{

unsignedcharj=0;

unsignedinti=0;

ENLED=0;

ADDR0=0;

ADDR1=0;

ADDR2=0;

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

while(1)//程序死循环

{

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

}

}

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

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

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

3、数码管的静态显示

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

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

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

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

sbitLED=P0^0;

sbitADDR0=P1^0;

sbitADDR1=P1^1;

sbitADDR2=P1^2;

sbitADDR3=P1^3;

sbitENLED=P1^4;

unsignedcharcodeLedChar[]={

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

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

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

voidmain()

{

unsignedcharcounter=0;

unsignedcharj=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;

}

}

}

}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5999

    文章

    43966

    浏览量

    620734

原文标题:单片机数码管显示原理

文章出处:【微信号:changxuemcu,微信公众号:畅学单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机的静态数码管

    怎么让单片机静态数码管在按键按下时数码管闪烁,再按一次时进入设置状态?
    发表于 11-07 20:24

    51单片机入门之数码管介绍

    的亮度。 硬件分析: 数码管的段选都是连在一起的,显示的时候通过片选来确定要点亮哪一片数码管,然后让片选要依次选通就可以实现数据动态显示。 这里用的是LPC11C14单片机,图中的宏
    发表于 07-19 01:11

    使用单片机来控制数码管显示不同数字

    数码管,a-g分别接单片机P2.0-P2.6.  看到电路图,我们应该就能想到,只要我们使单片机的P2口输出不同的高低电平,就可以让数码管显示不同的数字。假如我们要显示数字1,那么我们
    发表于 01-14 16:34

    keil单片机数码管显示数字

    keil单片机数码管显示数字,(C51单片机与keil uvision的简单运用——数码管的使用)51单片机入门相信很多人对51
    发表于 07-14 07:29

    基于普中单片机按键的数码管显示

    基于普中单片机按键-数码管显示简介1.硬件部分普中单片机开发板 数码管 独立按键2.软件部分keil软件硬件部分普中单片机开发板
    发表于 07-14 06:31

    数码管的基本知识

    文章目录基本知识数码管应用范围单片机常用显示器LED显示器显示结构LED数码管接法共阳数码管码表共阴数码管码表注意静态显示原理优点缺点基本
    发表于 07-19 09:33

    单片机数码管显示实验报告

    单片机数码管显示实验报告,一、 实验目的(一) 掌握单片机 I/O 口的输出控制;(二) 熟悉开发板上单片机 I/O 口与数码管的电路连接;
    发表于 07-21 09:12

    单片机是如何实现数码管的动态扫描的

    单片机作品中,我们常常能看到数码管的身影。现在通过这篇文章来介绍数码管的工作原理,单片机是如何实现数码管的动态扫描...
    发表于 11-18 06:38

    51单片机开发的数码管案例分享

    目前单片机是掌握嵌入式开发技术的基础,而单片机的种类多样,因此单片机的控制思想应该是我们学习的中心。本篇文章以51单片机开发的数码管案例进行
    发表于 11-22 06:37

    F3461BH数码管基础知识介绍

    数码管基础知识CT107D单片机综合实训平台上使用的数码管是F3461BH,告诉我们数码管的类型。倒数第2个字母是“B”,说明这个
    发表于 12-02 07:08

    数码管如何定义引脚

    单片机零基础入门(8-1)学会单片机数码管,这篇文章就够了,一文吃透数码管---数码管如何定义引脚?数码
    发表于 12-08 07:06

    单片机动态数码管消影的问题及原因

    单片机零基础入门(8-4)实战:单片机动态数码管消影一、回顾二、问题及原因三、解决办法:四、解决后的源代码:五、补充知识数码管驱动方式1、
    发表于 01-17 07:42

    BST-M51单片机数码管的基础学习

    单片机中,通过控制段选引脚的电平,可以选择要点亮的LED段。 位选:数码管通常由多位数字或字符组成,每一位都有一个对应的段选控制引脚。位选是指选择要显示哪一位的字符。通过控制位选引脚的电平,可以选择
    发表于 11-05 23:38

    51单片机数码管驱动

    控制数码 的每一位的 ,位码是一个二进制数 ,它决定了哪些数码管亮起, 哪些熄灭。通过逐位的选择 ,就可以将段码显示出来 ,形成完整的 数字或字母。 4.示例代码调试 ChatGPT *附件:
    发表于 11-06 11:06

    单片机零基础入门(8-1)学会单片机数码管,这篇文章就够了,一文吃透数码管---数码管如何定义引脚?数码

    单片机零基础入门(8-1)学会单片机数码管,这篇文章就够了,一文吃透数码管---数码管如何定义引脚?数码
    发表于 11-25 18:36 37次下载
    <b class='flag-5'>单片机</b>零基础入门(8-1)学会<b class='flag-5'>单片机</b><b class='flag-5'>数码管</b>,这篇文章就够了,一文吃透<b class='flag-5'>数码管</b>---<b class='flag-5'>数码管</b>如何定义引脚?<b class='flag-5'>数码</b>