找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3070|回复: 10
收起左侧

奇怪了 真奇怪了 关于74hc595驱动LED的问题

[复制链接]
ID:590194 发表于 2019-10-8 17:08 | 显示全部楼层 |阅读模式
显示效果应该是 011111111 11111111 11111111 01111111 11111111 11111111
但是实际效果是 011111111 11111111 11111111 11111111 11111111 11111111

第二行应该是 101111111 11111111 11111111 10111111 11111111 11111111
实际效果是    101111111 11111111 11111111 01111111 11111111 11111111

导致最后显示到最后一个的时最后2个LED一起灭

void In_Data(unsigned char a,b,c)
{
        unsigned char i,j,u;
for(u=0;u<6;u++)
  {
  if(u==0){j=a;}
  if(u==1){j=b;}
  if(u==2){j=c;}
  if(u==3){j=a;}
  if(u==4){j=b;}
  if(u==5){j=c;}
        for(i=0;i<8;i++)
        {
                j<<=1;
                _nop_();_nop_();
                Ds=CY;
               _nop_();_nop_();
                Sh=0;
                _nop_();_nop_();
                Sh=1;
        }
  }
        St=0;
        _nop_();_nop_();
        St=1;
}




if(i==0){In_Data(0x7F,0xFF,0xFF);}//01111111 11111111 11111111
if(i==1 || i==45){In_Data(0xBF,0xFF,0xFF);}//10111111 11111111 11111111
if(i==2 || i==44){In_Data(0xDF,0xFF,0xFF);}//11011111 11111111 11111111
if(i==3 || i==43){In_Data(0xEF,0xFF,0xFF);}//11101111 11111111 11111111
if(i==4 || i==42){In_Data(0xF7,0xFF,0xFF);}//11110111 11111111 11111111
if(i==5 || i==41){In_Data(0xFB,0xFF,0xFF);}//11111011 11111111 11111111
if(i==6 || i==40){In_Data(0xFD,0xFF,0xFF);}//11111101 11111111 11111111
if(i==7 || i==39){In_Data(0xFE,0xFF,0xFF);}//11111110 11111111 11111111
if(i==8 || i==38){In_Data(0xFF,0x7F,0xFF);}//11111111 01111111 11111111
if(i==9 || i==37){In_Data(0xFF,0xBF,0xFF);}//11111111 10111111 11111111
if(i==10 || i==36){In_Data(0xFF,0xDF,0xFF);}//11111111 11011111 11111111
if(i==11 || i==35){In_Data(0xFF,0xEF,0xFF);}//11111111 11101111 11111111
if(i==12 || i==34){In_Data(0xFF,0xF7,0xFF);}//11111111 11110111 11111111
if(i==13 || i==33){In_Data(0xFF,0xFB,0xFF);}//11111111 11111011 11111111
if(i==14 || i==32){In_Data(0xFF,0xFD,0xFF);}//11111111 11111101 11111111
if(i==15 || i==31){In_Data(0xFF,0xFE,0xFF);}//11111111 11111110 11111111
if(i==16 || i==30){In_Data(0xFF,0xFF,0x7F);}//11111111 11111111 01111111
if(i==17 || i==29){In_Data(0xFF,0xFF,0xBF);}//11111111 11111111 10111111
if(i==18 || i==28){In_Data(0xFF,0xFF,0xDF);}//11111111 11111111 11011111
if(i==19 || i==27){In_Data(0xFF,0xFF,0xEF);}//11111111 11111111 11101111
if(i==20 || i==26){In_Data(0xFF,0xFF,0xF7);}//11111111 11111111 11110111
if(i==21 || i==25){In_Data(0xFF,0xFF,0xFB);}//11111111 11111111 11111011
if(i==22 || i==24){In_Data(0xFF,0xFF,0xFD);}//11111111 11111111 11111101
if(i==23){In_Data(0xFF,0xFF,0xFE);}//11111111 11111111 11111110
DelayMS(1200);
i++;
if(i==46){i=0;}

回复

使用道具 举报

ID:213173 发表于 2019-10-9 11:04 | 显示全部楼层
楼主描述的奇怪现象不存在,有图为证。 无标题.jpg

  1. #include <reg51.h>
  2. #include <intrins.h>

  3. sbit Ds=P1^0;
  4. sbit Sh=P1^1;
  5. sbit St=P1^2;

  6. void DelayMS(unsigned int z)
  7. {
  8.         unsigned char x;
  9.         while(z--)
  10.                 for(x=120;x>0;x--);
  11. }

  12. void In_Data(unsigned char a,b,c)
  13. {
  14.         unsigned char i,j,u;
  15.         for(u=0;u<6;u++)
  16.         {
  17.                 if(u==0){j=a;}
  18.                 if(u==1){j=b;}
  19.                 if(u==2){j=c;}
  20.                 if(u==3){j=a;}
  21.                 if(u==4){j=b;}
  22.                 if(u==5){j=c;}
  23.                 for(i=0;i<8;i++)
  24.                 {
  25.                         j<<=1;
  26.                         _nop_();_nop_();
  27.                         Ds=CY;
  28.                         _nop_();_nop_();
  29.                         Sh=0;
  30.                         _nop_();_nop_();
  31.                         Sh=1;
  32.                 }
  33.         }
  34.         St=0;
  35.         _nop_();_nop_();
  36.         St=1;
  37. }

  38. void main()
  39. {
  40.         unsigned char i;
  41.         while(1)
  42.         {
  43.                 if(i==0)          {In_Data(0x7F,0xFF,0xFF);}//01111111 11111111 11111111
  44.                 if(i==1 || i==45) {In_Data(0xBF,0xFF,0xFF);}//10111111 11111111 11111111
  45.                 if(i==2 || i==44) {In_Data(0xDF,0xFF,0xFF);}//11011111 11111111 11111111
  46.                 if(i==3 || i==43) {In_Data(0xEF,0xFF,0xFF);}//11101111 11111111 11111111
  47.                 if(i==4 || i==42) {In_Data(0xF7,0xFF,0xFF);}//11110111 11111111 11111111
  48.                 if(i==5 || i==41) {In_Data(0xFB,0xFF,0xFF);}//11111011 11111111 11111111
  49.                 if(i==6 || i==40) {In_Data(0xFD,0xFF,0xFF);}//11111101 11111111 11111111
  50.                 if(i==7 || i==39) {In_Data(0xFE,0xFF,0xFF);}//11111110 11111111 11111111
  51.                 if(i==8 || i==38) {In_Data(0xFF,0x7F,0xFF);}//11111111 01111111 11111111
  52.                 if(i==9 || i==37) {In_Data(0xFF,0xBF,0xFF);}//11111111 10111111 11111111
  53.                 if(i==10 || i==36){In_Data(0xFF,0xDF,0xFF);}//11111111 11011111 11111111
  54.                 if(i==11 || i==35){In_Data(0xFF,0xEF,0xFF);}//11111111 11101111 11111111
  55.                 if(i==12 || i==34){In_Data(0xFF,0xF7,0xFF);}//11111111 11110111 11111111
  56.                 if(i==13 || i==33){In_Data(0xFF,0xFB,0xFF);}//11111111 11111011 11111111
  57.                 if(i==14 || i==32){In_Data(0xFF,0xFD,0xFF);}//11111111 11111101 11111111
  58.                 if(i==15 || i==31){In_Data(0xFF,0xFE,0xFF);}//11111111 11111110 11111111
  59.                 if(i==16 || i==30){In_Data(0xFF,0xFF,0x7F);}//11111111 11111111 01111111
  60.                 if(i==17 || i==29){In_Data(0xFF,0xFF,0xBF);}//11111111 11111111 10111111
  61.                 if(i==18 || i==28){In_Data(0xFF,0xFF,0xDF);}//11111111 11111111 11011111
  62.                 if(i==19 || i==27){In_Data(0xFF,0xFF,0xEF);}//11111111 11111111 11101111
  63.                 if(i==20 || i==26){In_Data(0xFF,0xFF,0xF7);}//11111111 11111111 11110111
  64.                 if(i==21 || i==25){In_Data(0xFF,0xFF,0xFB);}//11111111 11111111 11111011
  65.                 if(i==22 || i==24){In_Data(0xFF,0xFF,0xFD);}//11111111 11111111 11111101
  66.                 if(i==23)         {In_Data(0xFF,0xFF,0xFE);}//11111111 11111111 11111110
  67.                 DelayMS(1200);
  68.                 i++;
  69.                 if(i==46){i=0;}
  70.         }
  71. }
复制代码



回复

使用道具 举报

ID:123289 发表于 2019-10-9 16:19 | 显示全部楼层
用示波器看,走单步。
回复

使用道具 举报

ID:590194 发表于 2019-10-9 20:18 来自手机 | 显示全部楼层
wulin 发表于 2019-10-9 11:04
楼主描述的奇怪现象不存在,有图为证。

用的是我贴出来的代码?硬件接线不会有问题,我有视频为证
回复

使用道具 举报

ID:213173 发表于 2019-10-10 10:24 | 显示全部楼层
sq8422779 发表于 2019-10-9 20:18
用的是我贴出来的代码?硬件接线不会有问题,我有视频为证

把你的完整程序和硬件接线图发出来分析才能知道问题所在
回复

使用道具 举报

ID:590194 发表于 2019-10-12 09:03 来自手机 | 显示全部楼层
wulin 发表于 2019-10-10 10:24
把你的完整程序和硬件接线图发出来分析才能知道问题所在

按照图片顺序跳线的

458C8C56-333E-4A5D-8DB5-D4B4F9BF83D7.jpeg



090320z8tbbob07bjco6j2.jpg
回复

使用道具 举报

ID:590194 发表于 2019-10-12 13:25 | 显示全部楼层
74HC595流水灯 - 48灯.rar (68.64 KB, 下载次数: 15)
回复

使用道具 举报

ID:590194 发表于 2019-10-12 13:26 | 显示全部楼层
wulin 发表于 2019-10-10 10:24
把你的完整程序和硬件接线图发出来分析才能知道问题所在

595的引脚 只接了11 12 14
回复

使用道具 举报

ID:213173 发表于 2019-10-12 15:08 | 显示全部楼层
sq8422779 发表于 2019-10-12 13:26
595的引脚 只接了11 12 14

软件都是基于硬件条件编写的。你的仿真电路图与程序风马牛不相及。
回复

使用道具 举报

ID:590194 发表于 2019-10-13 10:01 来自手机 | 显示全部楼层
wulin 发表于 2019-10-12 15:08
软件都是基于硬件条件编写的。你的仿真电路图与程序风马牛不相及。

仿真文件不是的,我直接下载到硬件上测试的,还有我问下,595的11 12 14 中间最长多远,我放在2个地方,中间差不多有3米,会不会行为这个原因
回复

使用道具 举报

ID:213173 发表于 2019-10-15 11:20 | 显示全部楼层
本帖最后由 wulin 于 2019-10-15 13:58 编辑
sq8422779 发表于 2019-10-13 10:01
仿真文件不是的,我直接下载到硬件上测试的,还有我问下,595的11 12 14 中间最长多远,我放在2个地方, ...

单片机与595之间3根线就可以了,但两块板子必须共地,所有595的10、16脚接VCC,8、13脚接GND。先用短线调试,成功后再改长线试。从你的程序看单片机用的是STC15系列芯片,流水灯已改成对称方式,已设置3个输出口为推挽模式,端口有足够的带负载能力和抗干扰能力。如果还不行把单片机的3个输出口接510欧上拉电阻,连线换成屏蔽线。 595驱动LED仿真.zip (110.42 KB, 下载次数: 19)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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