寻思 发表于 2022-5-25 13:09:44

595输出要么都是0要么都是1

各位大佬,真正调试595,遇到难解决的问题了,代码如下,delay延迟故意加大的,缩小也是一样,stc8+595
OE直接接低,有大佬能帮忙看下吗。目前重新装了一个板子,直接了第一个595芯片,目前输入要么全部0XFF,要么0x00,而且跟最低位数据一样,比如我输入0xf0,实际输出0X00,输入0x0f,实际输出0xff,
整体要么要输0xff,要么是0x00,输出与最低位一样,程序设定0xaa,实际也是0x00,程序设定0x55则是0xff。。。被一个595搞这么烦。。
void send_byte(unsigned char dat)
{
        unsigned char i;
        ST_CP = 0;
        SH_CP = 0;
        DS=0;
        for(i=0;i<8;i++)
        {
                SH_CP = 0;
                if(dat & 0x80)
                {
                        DS=1;       
                }
                else DS=0;
        //        DS = dat & 0x80;
                delay_ms(10);
                SH_CP = 1;
                dat <<= 1;       
                delay_ms(10);
        }
        SH_CP = 0;
        delay_ms(10);
        ST_CP = 1;//Delay10us();

}

智涅 发表于 2022-5-25 13:21:47

单片机驱动的IO先看下波形,有没有初始化IO?
我一个用来亮档位的驱动好像很简单
void DisPlay595(unsigned char num)//亮8个档位的灯
{
        u8 i;
        num=8-num;
        for(i=0;i<8;i++)
        {
                if(i<num)
                        DS=1;
                else
                        DS=0;
                        NOP1();
                SCK=0;NOP1();
                SCK=1;
        }
        RCK=1;NOP5();
        RCK=0;
}

寻思 发表于 2022-5-25 13:25:38

智涅 发表于 2022-5-25 13:21
单片机驱动的IO先看下波形,有没有初始化IO?
我一个用来亮档位的驱动好像很简单
void DisPlay595(unsigned ...
(引用自2楼)

初始化,是双向IO,此外三个控制端口输出0

饭桶 发表于 2022-5-25 13:53:08

        for (i=0;i<8;i++)
        {
                DIO=X&0x80;
                SCLK = 0;
                SCLK = 1;
                X<<=1;
        }

饭桶 发表于 2022-5-25 13:56:49

楼主的ST时序不对,不是上升沿。

饭桶 发表于 2022-5-25 13:57:51

#include <STC8F.H>
#include <intrins.h>

unsigned char code Seg[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char code LED_Tab[] ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char DD;
sbit DIO         = P3^2;
sbit RCLK        = P3^3;
sbit SCLK         = P3^4;

void LED_OUT(unsigned char X)
{
        unsigned char i;
        for (i=0;i<8;i++)
        {
                DIO=X&0x80;
                SCLK = 0;
                SCLK = 1;
                X<<=1;
        }
}

void LED_Display (void)
{
        LED_OUT(LED_Tab);
        LED_OUT(Seg);
        RCLK = 0;
        RCLK = 1;
}

void main (void)
{
        while (1)
        {
                LED_Display ();
                DD++;
                if (DD>=8) DD=0;
        }
}

初音之恋 发表于 2022-5-25 14:04:37

本帖最后由 初音之恋 于 2022-5-25 14:15 编辑

static void        outWrite_595(uint64 data_595)
{
    uint16 cont;
    out595_Delay();
    for(cont=0;cont<48;cont++)
    {
      if(data_595&0x800000000000)
            SDO_595_set(1);
      else
            SDO_595_set(0);
      data_595<<=1;
      out595_Delay();
      CLK_595_set(1);
      out595_Delay();
      CLK_595_set(0);
      out595_Delay();
    }
}

static void Output_595(void)
{
    OUT_595_set(0);
    out595_Delay();
    OUT_595_set(1);
    out595_Delay();
    OUT_595_set(0);
    out595_Delay();
}

寻思 发表于 2022-5-25 14:12:36

饭桶 发表于 2022-5-25 13:57
#include
#include

(引用自6楼)

大佬貌似你的程序也不行,可能是我的硬件问题吧。。我感觉软件问题要排除了。。。我换了好几个程序驱动方案都不行。。。

hzyyl2008 发表于 2022-5-25 15:10:33

端口开强上拉或外加上拉电阻试试

peteryzm 发表于 2022-5-25 15:14:17

示波器看下波形就好了

寻思 发表于 2022-5-26 07:54:32

谢谢各位大佬捧场,问题已经解决,程序和芯片可能都有问题,我用的595A,换了595d貌似可以了,另外程序也用的饭桶大佬的,感谢!

wshtyr 发表于 2022-5-26 08:00:47

顺带提一句,51单片机的串口模式0可以认为是只有发送功能的SPI,正好可以驱动595
页: [1]
查看完整版本: 595输出要么都是0要么都是1