595输出要么都是0要么都是1
各位大佬,真正调试595,遇到难解决的问题了,代码如下,delay延迟故意加大的,缩小也是一样,stc8+595OE直接接低,有大佬能帮忙看下吗。目前重新装了一个板子,直接了第一个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();
} 单片机驱动的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:21
单片机驱动的IO先看下波形,有没有初始化IO?
我一个用来亮档位的驱动好像很简单
void DisPlay595(unsigned ...
(引用自2楼)
初始化,是双向IO,此外三个控制端口输出0 for (i=0;i<8;i++)
{
DIO=X&0x80;
SCLK = 0;
SCLK = 1;
X<<=1;
} 楼主的ST时序不对,不是上升沿。 #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: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 13:57
#include
#include
(引用自6楼)
大佬貌似你的程序也不行,可能是我的硬件问题吧。。我感觉软件问题要排除了。。。我换了好几个程序驱动方案都不行。。。 端口开强上拉或外加上拉电阻试试 示波器看下波形就好了 谢谢各位大佬捧场,问题已经解决,程序和芯片可能都有问题,我用的595A,换了595d貌似可以了,另外程序也用的饭桶大佬的,感谢! 顺带提一句,51单片机的串口模式0可以认为是只有发送功能的SPI,正好可以驱动595
页:
[1]