标题: 关于74hc595多片级联的问题,请大神指教 [打印本页]
作者: 会飞的大象 时间: 2018-9-18 17:31
标题: 关于74hc595多片级联的问题,请大神指教
请大神指教怎么会出现这种问题
-
QQ截图20180918173109.png
(3.79 KB, 下载次数: 91)
作者: xzf586 时间: 2018-9-18 22:29
几个口显示内容是一样的,应该将程序与电路图放上来,这样大家也好建议啊!
作者: zl2168 时间: 2018-9-19 07:37
情况不明,程序与电路都有可能出问题。
作者: 会飞的大象 时间: 2018-9-19 08:14
用proteus的仿真图,用的是留个595级联,1个74hc138选择行
-
QQ截图20180919081119.png
(45.59 KB, 下载次数: 92)
作者: 会飞的大象 时间: 2018-9-19 08:15
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit SH=P2^0;
sbit DS=P2^1;
sbit ST=P2^2;
uchar tab[6][8]={{0x00,0x18,0x24,0x24,0x24,0x24,0x18,0x00},
{0x00,0x10,0x18,0x10,0x10,0x10,0x38,0x00},
{0x00,0x18,0x24,0x20,0x10,0x08,0x3C,0x00},
{0x00,0x18,0x24,0x20,0x10,0x20,0x24,0x18},
{0x00,0x10,0x18,0x14,0x3C,0x10,0x10,0x00},
{0x00,0x38,0x08,0x18,0x20,0x20,0x18,0x00}};
void delay(uchar i)
{
uchar j;
for(j=100;j>0;j--)
{
for(;i>0;i--)
;
}
}
void main()
{
uchar n,i,j,k,t;
//SH=0;
while(1)
{
// n=0x00;
n=0;
for (i=0;i<8;i++)
{
ST=0;
P0=i;
// for(j=0;j<8;j++)
{
for(k=0;k<5;k++)
{
t=tab[5][n];
for(j=0;j<8;j++)
{
SH=0;
_nop_();
if(t&0x80)
DS=1;
else
DS=0;
SH=1;
t<<=1;
_nop_();
}
//n++ ;
}
}
ST=1;
delay(10);
n++;
}
}
}
作者: phang 时间: 2018-9-19 09:15
嗯,得看看原理图和代码才好找问题,楼主再仔细调调。
作者: angmall 时间: 2018-9-19 18:14
- for(k=0;k<5;k++)
- {
- t=tab[5][n];
- for(j=0;j<8;j++)
- {
复制代码
应该是这样
- for(k=0;k<5;k++)
- {
- t=tab[k][n]; // 改成这样
- for(j=0;j<8;j++)
- {
复制代码
作者: HEIZI555 时间: 2018-9-20 17:18
这个很简单的。。。。
作者: cjm82 时间: 2018-9-20 20:48
stcp引脚不能串一起,需要单独分开
作者: 会飞的大象 时间: 2018-9-21 10:22
现在情况是显示两个‘5’两个交错了一行,stcp好多 资料里都是并在一起的,
作者: zl2168 时间: 2018-9-21 10:43
错!不要瞎指导。
作者: zl2168 时间: 2018-9-21 10:58
本帖最后由 zl2168 于 2018-9-21 15:30 编辑
给你几个595应用案例,自己对照琢磨查错吧!
74LS595为串行移位寄存器,功能表如表3-21所示,引脚图如图3-46所示。DS为串行输入端,QS为串行输出端,Q0~Q7为并行输出端,CLK为移位脉冲输入端,CLR为并行输出清0端。
74HC595与74HC164功能相仿,区别是595串入并出分二步操作,第一步在CLK信号有效条件下移入595片内缓冲寄存器,第二步由595 RCK端(#12)输入一个触发正脉冲,片内缓冲寄存器中的数据进入输出寄存器。而74HC164是直接串入输出寄存器,串入中间过程有可能在并行输出端产生误动作。
另外,74HC595有禁止输出(高阻态)控制端OE,OE=0时,输出熄灭。若用一个引脚控制它,可以方便地产生闪烁效果。
实例44 74HC595串入并出控制8/16循环灯
实例
56 74LS595串行扩展3
位LED数码管静态显示
实例
77 74HC595+165
扩展8×8键盘
先Proteus仿真一下,确认有效。以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。
作者: cjm82 时间: 2018-9-21 13:00
DS SHCP接一起,Q7'悬空,用STCP当选通也是可以的,只要以SHCP位时钟,在DS上发一个8位的数据,用STCP当选通,可以指定哪片595更新,而没被选通的则保持,这样灵活性更高,当然缺点是IO口占多点.
作者: xzf586 时间: 2018-9-21 17:49
最后加上for(n==8)n=0;效果如图
-
1.png
(20.36 KB, 下载次数: 52)
作者: xzf586 时间: 2018-9-21 17:53
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit SH=P2^0;
sbit DS=P2^1;
sbit ST=P2^2;
uchar tab[6][8]={
{0x00,0x18,0x24,0x24,0x24,0x24,0x18,0x00},
{0x00,0x10,0x18,0x10,0x10,0x10,0x38,0x00},
{0x00,0x18,0x24,0x20,0x10,0x08,0x3C,0x00},
{0x00,0x18,0x24,0x20,0x10,0x20,0x24,0x18},
{0x00,0x10,0x18,0x14,0x3C,0x10,0x10,0x00},
{0x00,0x38,0x08,0x18,0x20,0x20,0x18,0x00}
};
void delay(uchar i)
{
uchar j;
for(j=100;j>0;j--)
{
for(;i>0;i--)
;
}
}
void main()
{
uchar n,i,j,k,t;
//SH=0;
while(1)
{
// n=0x00;
n=0;
for (i=0;i<8;i++)
{
ST=0;
P0=i;
// for(j=0;j<8;j++)
{
for(k=0;k<5;k++)
{
t=tab[k][n];
for(j=0;j<8;j++)
{
SH=0;
_nop_();
if(t&0x80)
DS=1;
else
DS=0;
SH=1;
t<<=1;
_nop_();
}
//n++ ;
}
}
ST=1;
delay(10);
n++;
if(n==8)
n=0;
}
}
}
-
1.png
(5.49 KB, 下载次数: 51)
作者: 会飞的大象 时间: 2018-9-28 08:16
谢谢大家
作者: qing龙龙 时间: 2019-6-11 17:36
兄弟,没有程序。。。。。。怎么参考
作者: 154642 时间: 2020-4-3 09:42
有没有动态显示的啊
作者: 154642 时间: 2020-4-3 09:43
有没有动态显示的
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |