找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17815|回复: 16
打印 上一主题 下一主题
收起左侧

如何仅用一个74HC595驱动四位甚至更多的数码管

  [复制链接]
跳转到指定楼层
楼主
ID:107116 发表于 2016-3-4 16:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
每一个数码管显示不同的数字,位选直接接在单片机引脚。程序应该怎么写呢?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:97886 发表于 2016-3-4 17:28 | 只看该作者
这个是个例程,你看一下,自己摸索摸索,内容挺清晰的,stc官方的,有不懂得,追问,

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

64.66 KB, 下载次数: 439

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

我就是想知道595只有一个Q0-Q7,有好几个数码管的ABCDEFG接在Q0-Q7上,这样的话数码管显示的不都是同样的数字,怎么让他们独立显示任何数字?
回复

使用道具 举报

地板
ID:96682 发表于 2016-3-5 00:54 | 只看该作者
通俗点的说,在数码管上要显示同一个数字可以用静态显示,当数码管要显示不同数字时就用到动态显示。
LZ,还是多去单片机教程那里逛逛,那里可以找到答案的。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

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

使用道具 举报

6#
ID:79544 发表于 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();
延时一会。
  }
}
照着这个思路试试吧
回复

使用道具 举报

7#
ID:107577 发表于 2016-3-6 16:12 | 只看该作者
多个hc595级连场合,根据电路图,决定先送显示数据还是先送位选。
回复

使用道具 举报

8#
ID:107116 发表于 2016-3-6 20:16 | 只看该作者
myh9970 发表于 2016-3-6 12:35
你看一下h595资料,你还不知道它的用法,他虽然说是只有7个脚,但是他可以控制好多数码管,为什么这样说 ...

595我知道,我是不知道怎么用一个595控制N个数码管
回复

使用道具 举报

9#
ID:107116 发表于 2016-3-6 20:18 | 只看该作者
腾飞的龙 发表于 2016-3-6 14:09
把数字编码,编成数组uchar code tem[]=(0xc0,............);
void 595_send(uchar data)
{

这个函数我懂,我不知道怎么用一个595控制n个数码管
回复

使用道具 举报

10#
ID:79544 发表于 2016-3-7 09:40 | 只看该作者
595级联控制位。也写个位的数组。我现在用595级联控制16x128行的点阵屏。
回复

使用道具 举报

11#
ID:104472 发表于 2016-3-7 10:02 | 只看该作者
动态显示,就是位选和数选的切换,先送数显,然后打开相应的位选,就可以驱动很多数码管
回复

使用道具 举报

12#
ID:107677 发表于 2016-3-7 12:46 | 只看该作者
这个东西对我有启发
回复

使用道具 举报

13#
ID:107116 发表于 2016-3-7 14:25 | 只看该作者
腾飞的龙 发表于 2016-3-7 09:40
595级联控制位。也写个位的数组。我现在用595级联控制16x128行的点阵屏。

我已经做出来了
回复

使用道具 举报

14#
ID:79544 发表于 2016-3-7 14:28 | 只看该作者
做好了就分享一下大家也一起学习进步谢谢!
回复

使用道具 举报

15#
ID:881831 发表于 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);
        }
    }
}
回复

使用道具 举报

16#
ID:883031 发表于 2021-2-21 10:59 | 只看该作者
动态扫描能实现。
回复

使用道具 举报

17#
ID:882731 发表于 2021-2-22 17:42 | 只看该作者
hookloo 发表于 2016-3-4 22:50
我就是想知道595只有一个Q0-Q7,有好几个数码管的ABCDEFG接在Q0-Q7上,这样的话数码管显示的不都是同样的 ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表