新人求问~74hc595的串行数据怎么输出的

2020-01-25 15:24发布

如题,操作数码管时总是乱码,或者是不闪,但是关掉了重新开数据就又不一样了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
huangyiting1990
1楼-- · 2020-01-25 17:36
 精彩回答 2  元偷偷看……
dlmaowf
2楼-- · 2020-01-25 21:07
void hc595_output(void)
{
        unsigned char i;
        unsigned long temp;
       
        STCP_L();
        temp=0x01;
        for (i=0;i<32;i++)
        {
                SHCP_L();
                if (hc595_rg.b & temp) DS_H();
                else DS_L();
                SHCP_H();
                temp<<=1;
        }
        STCP_H();
}
dlmaowf
3楼-- · 2020-01-26 01:36
这是4片595级联的,所以for循环32次,只有一片的话,把for循环改为8次
墨逸、
4楼-- · 2020-01-26 05:22
huangyiting1990 发表于 2013-12-23 16:07
用逻辑分析仪抓波形分析。  对应 时钟 数据 锁存看看。没记错的话 应该是上升沿采样。 ...

试了,可是时钟波形不是正常的高低信号
墨逸、
5楼-- · 2020-01-26 07:08
dlmaowf 发表于 2013-12-23 16:25
这是4片595级联的,所以for循环32次,只有一片的话,把for循环改为8次

#include <reg52.h>
#include <intrins.h>

sbit SCLK=P2^4;   
sbit DAT=P2^5;   
sbit SLCK=P2^6;   

unsigned char code tab[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};


void out595(void)
{
        SLCK=0;
                                _nop_();
        SLCK=1;
}


void sendbyte(unsigned char a)

{
  unsigned char i;
    for(i=0;i<32;i++)
        {
         SCLK=0;
         DAT=a&0x80;
         a=a<<1;
         SCLK=1;
                                }
}



main()
{
      unsigned char i;
      unsigned int  f=60000;
      while(1)
      {
                                        for(i=0;i<9;i++)
                                        {
            sendbyte(tab);
            out595();
            while(f--);
                                        }
            }
}



大神你帮我看看,哪里不对呢
qinshi1208
6楼-- · 2020-01-26 11:16
 精彩回答 2  元偷偷看……

一周热门 更多>