标题: 求助大神 单片机点阵只会整体闪烁,把开始的35,36换一下就会是一排一排的流水灯 [打印本页]

作者: chenl_l_    时间: 2023-4-6 21:54
标题: 求助大神 单片机点阵只会整体闪烁,把开始的35,36换一下就会是一排一排的流水灯
萌新在学习74HC595时代码如下
#include <REG52.H>

sbit SER=P3^4;
sbit RCLK1=P3^5;
sbit SRCLK=P3^6;

void delay(int a)
        {
                while(a)
                {
                        a--;
                }
        }
        
void main()
{
        int i=0;
        int j=0;
        int b=0x01;
        P0=0x00;
        RCLK1=1;
        SRCLK=1;
        for(i=0;i<8;i++)
        {
                int c;
                b>>=i;
                c=b;
                for(j=0;j<8;j++)
                {
                        SER=c;
                        c<<=1;
                        SRCLK=0;
                        SRCLK=1;
                }
                RCLK1=0;
                RCLK1=1;
                delay(100000);
        }
}
点阵只会整体闪烁,把开始的35,36换一下就会是一排一排的流水灯。
用的是普中的51开发板

作者: zywng2153    时间: 2023-4-7 09:57
开发板有硬件电路,然后读读595的Datasheet,看看时序和锁存是怎样控制的

作者: zch5200    时间: 2023-4-7 11:13
b的初始值是1,右移i位不全是0了么。点阵扫描你的延时时间太长了
作者: chenl_l_    时间: 2023-4-7 11:34
zch5200 发表于 2023-4-7 11:13
b的初始值是1,右移i位不全是0了么。点阵扫描你的延时时间太长了

明白了,感谢

作者: chenl_l_    时间: 2023-4-7 14:55
虽然不太理解之前的情况是怎么回事程序改过之后能实现一次亮一排了
#include <REG52.H>

sbit SER=P3^4;
sbit RCLK1=P3^5;
sbit SRCLK=P3^6;

void delay(int a)
        {
                while(a)
                {
                        a--;
                }
        }
        
void main()
{
        int i=0;
        int j=0;
        int b=0x01;
        P0=0x00;
        RCLK1=1;
        SRCLK=1;
        for(i=0;i<9;i++)
        {
          int c=b;
                                        c<<=i;
          for(j=0;j<8;j++)
                {
                                                                c>>=1;
                                                    SER=c%2;
                SRCLK=0;
                SRCLK=1;
                }
          RCLK1=0;
          RCLK1=1;
          delay(50000);
        }
}




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