打印
[AVR单片机]

新手问关于74HC595级联问题,别怪问题太简单了,谢谢回答。

[复制链接]
14085|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
giles2013|  楼主 | 2013-3-13 09:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      我有一学习板,就是通过两片HC595来控制八个数码管的段位和段码的。但是我不知到应该怎么样做才能够让,段码输入到一个HC595之后,再将段位输入到另外一个HC595最后输出。尽管我看书也看了很多,但是还是不怎么理解。我暂时的理解是,将段码输入到一个HC595之后,再将这些数据打入HC595的锁存器里,然后再输入段位到HC595,移位到另外的HC595然后打入其锁存器中,最后输出。下面附上我的学习板的原理图,希望诸位大虾能够帮我一把,凑点时间给一个控制数码管显示东西的实例,谢谢了。

学习板原理图.pdf

626.63 KB

原理图

相关帖子

沙发
123654789| | 2013-3-13 09:59 | 只看该作者


   CS片选拉低     CS=0;


   时钟拉低       CLK=0;     //这3条C语言的语句,就可以输出一个位bit的数据

   送出数据 D7    DAT=D7;    //这3条C语言的语句,就可以输出一个位bit的数据

   时钟拉高       CLK=1;     //这3条C语言的语句,就可以输出一个位bit的数据




   时钟拉低       CLK=0;     //这3条C语言的语句,就可以输出一个位bit的数据

   送出数据 D6    DAT=D6;    //这3条C语言的语句,就可以输出一个位bit的数据

   时钟拉高       CLK=1;     //这3条C语言的语句,就可以输出一个位bit的数据



   时钟拉低       CLK=0;     //这3条C语言的语句,就可以输出一个位bit的数据

   送出数据 D5    DAT=D5;    //这3条C语言的语句,就可以输出一个位bit的数据

   时钟拉高       CLK=1;     //这3条C语言的语句,就可以输出一个位bit的数据




   时钟拉低       CLK=0;     //这3条C语言的语句,就可以输出一个位bit的数据

   送出数据 D4    DAT=D4;    //这3条C语言的语句,就可以输出一个位bit的数据

   时钟拉高       CLK=1;     //这3条C语言的语句,就可以输出一个位bit的数据




   时钟拉低       CLK=0;     //这3条C语言的语句,就可以输出一个位bit的数据

   送出数据 D3    DAT=D3;    //这3条C语言的语句,就可以输出一个位bit的数据

   时钟拉高       CLK=1;     //这3条C语言的语句,就可以输出一个位bit的数据




   时钟拉低       CLK=0;     //这3条C语言的语句,就可以输出一个位bit的数据

   送出数据 D2    DAT=D2;    //这3条C语言的语句,就可以输出一个位bit的数据

   时钟拉高       CLK=1;     //这3条C语言的语句,就可以输出一个位bit的数据



   时钟拉低       CLK=0;     //这3条C语言的语句,就可以输出一个位bit的数据

   送出数据 D1    DAT=D1;    //这3条C语言的语句,就可以输出一个位bit的数据

   时钟拉高       CLK=1;     //这3条C语言的语句,就可以输出一个位bit的数据




   时钟拉低       CLK=0;     //这3条C语言的语句,就可以输出一个位bit的数据

   送出数据 D0    DAT=D0;    //这3条C语言的语句,就可以输出一个位bit的数据

   时钟拉高       CLK=1;     //这3条C语言的语句,就可以输出一个位bit的数据

                    (以上8组操作  就可以输出一个字节byte ;
                       如果级联,就要把下面3条语句循环16次

                                    时钟拉低
                                    送出数据
                                    时钟拉高  )


   CS片选拉高     CS=1;  把数据锁存   完成


初学者先学会一个74595  然后再学习级联

把数码管的公共端接到VCC就可以了

使用特权

评论回复
板凳
123654789| | 2013-3-13 10:19 | 只看该作者
本帖最后由 123654789 于 2013-3-13 10:26 编辑

简化上面的程序
可以得到如下

   CS片选拉低     CS=0;
      
            ←   ←   ←   ←   ←   ←   ←   ←   ←   ←   ←   ←   ←   ←   ←
       ↓                                                                                                                        ↑

   时钟拉低       CLK=0;     //这3条C语言的语句,就可以输出一个位bit的数据             ↑
                                                                                   
      ↓                                                                                                                          ↑

   送出数据 DATA    DAT=DATA;   //这3条C语言的语句,就可以输出一个位bit的数据(循环8次 )      
                                                                                    
      ↓                                                                                                                          ↑
                                                                                   
   时钟拉高       CLK=1;     //这3条C语言的语句,就可以输出一个位bit的数据             ↑
                                                                                   
      ↓                                                                           
         →   →   →   →   →   →   →   →   →   →   →   →   →   →   →   →   →   →   →  ↑

                    (以上8组操作  就可以输出一个字节byte ;
                       如果级联,就要把下面3条语句循环16次

                                    时钟拉低
                                    送出数据
                                    时钟拉高  )

循环8次就结束

   CS片选拉高     CS=1;  把数据锁存   完成

ATmega16有硬件SPI口
至于如何配置寄存器,控制输出数据 , 就靠你自己了


使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
qin552011373 + 6 赞一个!
地板
giles2013|  楼主 | 2013-3-13 13:06 | 只看该作者
123654789 发表于 2013-3-13 10:19
简化上面的程序
可以得到如下

谢谢。

使用特权

评论回复
5
giles2013|  楼主 | 2013-3-13 13:53 | 只看该作者
123654789 发表于 2013-3-13 10:19
简化上面的程序
可以得到如下
void hc595_send_byte(unsigned char byte)
{
   char i;
   for(i=0;i<8;i++)
   {
      hc595_clk=0;
      hc595_data=byte&1<<i;
      hc595_clk=1;
   }
}
我想问问,写成C语言的形式是不是这样。

使用特权

评论回复
6
123654789| | 2013-3-13 14:06 | 只看该作者
对了其中一部分
记得补上 CS=0;  CS=1;
unsigned char i;

使用特权

评论回复
7
qin552011373| | 2013-3-13 21:19 | 只看该作者
123654789 发表于 2013-3-13 10:19
简化上面的程序
可以得到如下

很给力的解释

使用特权

评论回复
8
zhaoyu2005| | 2013-3-19 09:39 | 只看该作者
看你的595是级联的还是非级联的,
如果是级联的(也就是共用时钟、片选、输出锁存,数据线不共用,串起来组成16位宽),那确认下是段和位的位置关系,然后把段数据和位数据依次送入到595,一次锁存到输出。
如果是非级联的(通常共用时钟、数据,片选分开),那就各送各的数据。这种得注意消隐
不论哪种情况(级联的用的多),都是

使用特权

评论回复
9
giles2013|  楼主 | 2013-3-19 19:36 | 只看该作者
zhaoyu2005 发表于 2013-3-19 09:39
看你的595是级联的还是非级联的,
如果是级联的(也就是共用时钟、片选、输出锁存,数据线不共用,串起来组 ...

是级联的,你说的将段选和位选的数据依次送入595,是不是将这种数据分别从同一个数据口串入,例如先送入位选,再送入段选,然后一次锁存输出?

使用特权

评论回复
10
zhaoyu2005| | 2013-3-20 09:13 | 只看该作者
giles2013 发表于 2013-3-19 19:36
是级联的,你说的将段选和位选的数据依次送入595,是不是将这种数据分别从同一个数据口串入,例如先送入 ...

至于先送位数据还是段数据,得根据硬件确定,当然你也用数据可以试试
因为是级联的,连续16个时钟,就将两个字节的数据(段数据和位数据)送入595了,然后一个输出锁存,595的输出端口就输出送入的数据了

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
qin552011373 + 6 很给力!
11
yhhsky| | 2013-3-30 18:58 | 只看该作者

使用特权

评论回复
12
wentao0100| | 2013-4-3 13:05 | 只看该作者
解释的好

使用特权

评论回复
13
lwyjw| | 2013-4-6 20:13 | 只看该作者
没问题,595先输入一字节的高位开始。

使用特权

评论回复
14
张625744506| | 2013-4-7 20:25 | 只看该作者
595是先从低位开始的!!!

使用特权

评论回复
15
giles2013|  楼主 | 2013-4-7 22:23 | 只看该作者
张625744506 发表于 2013-4-7 20:25
595是先从低位开始的!!!

级联的话是先从高位吧,按照我的那个原理图的话,我是先串入位选,在串入段选的。

使用特权

评论回复
16
zhao2014| | 2016-11-1 10:56 | 只看该作者
这是见过最通俗易懂的595讲解!!!!!!!!!!!!

使用特权

评论回复
17
蓝魔大师弟| | 2016-11-14 07:42 | 只看该作者
学习了。。。。。。。。。。

使用特权

评论回复
18
我爱周琴| | 2017-3-21 22:28 | 只看该作者
看来自己要努力了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我是学机械行业的,但是喜欢学习单片机。 giles2010@163.com

1

主题

7

帖子

0

粉丝