标题: 如何仅用一个74HC595驱动四位甚至更多的数码管 [打印本页]

作者: hookloo    时间: 2016-3-4 16:17
标题: 如何仅用一个74HC595驱动四位甚至更多的数码管
每一个数码管显示不同的数字,位选直接接在单片机引脚。程序应该怎么写呢?


作者: myh9970    时间: 2016-3-4 17:28
这个是个例程,你看一下,自己摸索摸索,内容挺清晰的,stc官方的,有不懂得,追问,

02-HC595驱动8个数码管-C和汇编.zip

64.66 KB, 下载次数: 439


作者: hookloo    时间: 2016-3-4 22:50
myh9970 发表于 2016-3-4 17:28
这个是个例程,你看一下,自己摸索摸索,内容挺清晰的,stc官方的,有不懂得,追问,

我就是想知道595只有一个Q0-Q7,有好几个数码管的ABCDEFG接在Q0-Q7上,这样的话数码管显示的不都是同样的数字,怎么让他们独立显示任何数字?
作者: wc86110    时间: 2016-3-5 00:54
通俗点的说,在数码管上要显示同一个数字可以用静态显示,当数码管要显示不同数字时就用到动态显示。
LZ,还是多去单片机教程那里逛逛,那里可以找到答案的。

作者: myh9970    时间: 2016-3-6 12:35
hookloo 发表于 2016-3-4 22:50
我就是想知道595只有一个Q0-Q7,有好几个数码管的ABCDEFG接在Q0-Q7上,这样的话数码管显示的不都是同样的 ...

你看一下h595资料,你还不知道它的用法,他虽然说是只有7个脚,但是他可以控制好多数码管,为什么这样说呢,这么说吧,h595锁存的引脚是一个8位的寄存器,当再有第二组数据进来他会把之前的一组数据输出给下一个h595,就相当于排队一样,你在看一下h595吧,学东西得看资料,看手册,网上大把的。

作者: 腾飞的龙    时间: 2016-3-6 14:09
把数字编码,编成数组uchar code tem[]=(0xc0,............);
void 595_send(uchar data)
{
uchar i;
        for(i = 0; i < 8; i++)
        {
                  595_DAT =Data  & 0x01;

                  595_sck= 0;
                NOP();NOP();NOP();
                  595_sck= 1;
                  Data =Data >> 1;       
        }
   
}
void shianshi()
{
uchar i;
for(i=0;i<8;i++)
  {
    595_send(tem[i]);
  }
LD_RCK=0;
LD_RCK=1;
LD_RCK=0;
}
void main()
{
  while(1)
   {

  xianshi();
延时一会。
  }
}
照着这个思路试试吧
作者: sunl_rui    时间: 2016-3-6 16:12
多个hc595级连场合,根据电路图,决定先送显示数据还是先送位选。
作者: hookloo    时间: 2016-3-6 20:16
myh9970 发表于 2016-3-6 12:35
你看一下h595资料,你还不知道它的用法,他虽然说是只有7个脚,但是他可以控制好多数码管,为什么这样说 ...

595我知道,我是不知道怎么用一个595控制N个数码管
作者: hookloo    时间: 2016-3-6 20:18
腾飞的龙 发表于 2016-3-6 14:09
把数字编码,编成数组uchar code tem[]=(0xc0,............);
void 595_send(uchar data)
{

这个函数我懂,我不知道怎么用一个595控制n个数码管
作者: 腾飞的龙    时间: 2016-3-7 09:40
595级联控制位。也写个位的数组。我现在用595级联控制16x128行的点阵屏。
作者: jiajuntao    时间: 2016-3-7 10:02
动态显示,就是位选和数选的切换,先送数显,然后打开相应的位选,就可以驱动很多数码管
作者: wuquanxing1980    时间: 2016-3-7 12:46
这个东西对我有启发
作者: hookloo    时间: 2016-3-7 14:25
腾飞的龙 发表于 2016-3-7 09:40
595级联控制位。也写个位的数组。我现在用595级联控制16x128行的点阵屏。

我已经做出来了
作者: 腾飞的龙    时间: 2016-3-7 14:28
做好了就分享一下大家也一起学习进步谢谢!
作者: 19924615225    时间: 2021-2-19 13:38
用74HC595驱动八位动态数码管(直接在74HC595
控制LED流水灯的程序上整合动态数码管的程序而成

#include "reg51.h"
#include "intrins.h"


typedef unsigned int u16;
typedef unsigned char u8;


#define GPIO_LED P2
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;


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


void hc595(u8 byte)
{
    u8 a;
    SRCLK=1;
    RCLK=1;
   
    for(a=0;a<8;a++)
    {
        SER=byte>>7;
        byte<<=1;
        SRCLK=0;
        _nop_();
        SRCLK=1;
    }
    RCLK=0;
    _nop_();
    RCLK=1;
}


void delay(u16 i)
{
    while(i--);
}


void main()
{
    u8 ledNum;
    u8 j;
    ledNum = ~0x01;
    while(1)
    {
        for(j=0;j<8;j++)
        {
            hc595(ledNum);
            P0=smgduan[j];
            ledNum = _crol_(ledNum, 1);
            delay(50000);
        }
    }
}

作者: cn_zhx    时间: 2021-2-21 10:59
动态扫描能实现。
作者: aqiong    时间: 2021-2-22 17:42
hookloo 发表于 2016-3-4 22:50
我就是想知道595只有一个Q0-Q7,有好几个数码管的ABCDEFG接在Q0-Q7上,这样的话数码管显示的不都是同样的 ...

你再在每个数码管管脚之前添加器件不就可以吗?比如都是D0亮,在不想显示出来的数码管前加个非门,不给导通,实现单个数码管的选通




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1