131 1300 0010
其他
当前位置: 首页>> 元件技术>>其他>>
  • 导航栏目
  • 二极管
  • 整流桥
  • MOS管
  • 其他
  • 74hc138控制共阳数码管 74hc138驱动共阳数码管显示
    74hc138控制共阳数码管 74hc138驱动共阳数码管显示
  • 74hc138控制共阳数码管 74hc138驱动共阳数码管显示
  •   发布日期: 2018-09-21  浏览次数: 2,297

    74hc138驱动共阳数码管你了解多少呢?74hc138驱动共阳数码管的方式是什么呢?本文主要关于74hc138驱动共阳数码管的介绍。

    数码管的基本介绍

    74hc138控制共阳数码管 74hc138驱动共阳数码管显示详解

    数码管原理图

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

    74hc138控制共阳数码管 74hc138驱动共阳数码管显示详解

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

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

    74hc138控制共阳数码管 74hc138驱动共阳数码管显示详解

    共阳数码管电路

    74hc138控制共阳数码管

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

    74hc138控制共阳数码管 74hc138驱动共阳数码管显示详解

    74HC138控制图

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

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

    74hc138控制共阳数码管程序

    #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段

    }

    }

    数码管的静态显示

    从上文我们了解到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;

    }

    }

    }

    }

    }

    结语

    关于74hc138控制共阳数码管的介绍就到这里了,如有不足之处欢迎指正。


  • ·上一篇:
    ·下一篇:
  • 其他关联资讯
    深圳市日月辰科技有限公司
    地址:深圳市宝安区松岗镇潭头第二工业城A区27栋3楼
    电话:0755-2955 6626
    传真:0755-2978 1585
    手机:131 1300 0010
    邮箱:hu@szryc.com

    深圳市日月辰科技有限公司 版权所有:Copyright©2010-2023 www.szryc.com 电话:13113000010 粤ICP备2021111333号