找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机+74HC595一直输出低电平,求解

查看数: 5747 | 评论数: 19 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-7-13 10:13

正文摘要:

下图是延时很慢的74hc595的仿真图: 如上图显示,在ST_CP 有上升沿后,右边应该有输出才对。这个图片是输入了两组数据。下边附上单片机代码: #include<reg51.h> #include "intrins.h" sbit YA=P2^ ...

回复

ID:824490 发表于 2022-9-4 13:18
595这么纯粹的器件,不会很难吧?
1、在SHCP的上升沿,把DS的电平存入595内(共8个位,SHCP需8个时钟),串行
2、在STCP的上升沿,把595内的数据存到输出缓存寄(8位并行),这里只要一个STCP时钟
3、OE低电平时,Q0-Q7的电平等于输出缓存寄(8位并行),OE为高电平时,Q0-Q7为高阻态
注意上升沿和低电平在代码上的区别,基本上就能驱起来了。
595的时钟高达50M,渣渣51单片机的速度对它来说是小CASE,根本不需要什么NOP,即便是M1的内核都不需要NOP!
ID:440585 发表于 2022-9-3 16:19
void HC595SendByte(unsigned char dat)//3入多出,这是串行输入,并行输出的东西
{
        unsigned char a;
        YA=0;
        HUAN=0;
        
        for(a=0;a<8;a++)
        {
                DAT=dat>>7;
                dat<<=1;

                YA=1;
                _nop_();//对于12mhz的芯片延时1us,包含在intrinsic.h里
                _nop_();
                delay(1000);//故意延时
                YA=0;        
                delay(1000);//故意延时
        }

        HUAN=1;
        _nop_();
        _nop_();
//        delay(3000);//故意延时
        HUAN=0;
        
}
ID:440585 发表于 2022-9-3 16:19
void HC595SendByte(unsigned char dat)//3入多出,这是串行输入,并行输出的东西 {         unsigned char a;         YA=0;         HUAN=0;                  for(a=0;a<8;a++)         {                 DAT=dat>>7;                 dat<<=1;                  YA=1;                 _nop_();//对于12mhz的芯片延时1us,包含在intrinsic.h里                 _nop_();                 delay(1000);//故意延时                 YA=0;                         delay(1000);//故意延时         }          HUAN=1;         _nop_();         _nop_(); //        delay(3000);//故意延时         HUAN=0;          }
ID:440585 发表于 2022-9-3 15:56
本帖最后由 wjsyjh 于 2022-9-3 16:21 编辑

void HC595SendByte(unsigned char dat)//3入多出,这是串行输入,并行输出的东西
{
        unsigned char a;
        YA=0;
        HUAN=0;

        for(a=0;a<8;a++)
        {
                DAT=dat>>7;
                dat<<=1;

                YA=1;
                _nop_();//对于12mhz的芯片延时1us,包含在intrinsic.h里
                _nop_();
                delay(1000);//故意延时
                YA=0;        
                delay(1000);//故意延时
        }

        HUAN=1;
        _nop_();
        _nop_();
//        delay(3000);//故意延时
        HUAN=0;

}
子函数延时短一点就可以了     
ID:332444 发表于 2021-7-14 08:13
ID:897180 发表于 2021-7-13 23:46
可以试试把28和29行代码换成dat<<1;DAT=CY;
ID:952782 发表于 2021-7-13 21:58
接线有问题的吧,或者图发完整一点
ID:94031 发表于 2021-7-13 17:24
接线有问题,应该U2-11接P21,U2-14接P20,U2-12接P22.
ID:934353 发表于 2021-7-13 14:37
void HC595SendByte(unsigned char dat)//3入多出,这是串行输入,并行输出的东西
{
        unsigned char a;
        HUAN=0;
      
        for(a=0;a<8;a++)
        {                YA=0;   
                DAT=dat>>7;
                dat<<=1;
                YA=1;
                _nop_();//对于12mhz的芯片延时1us,包含在intrinsic.h里
                _nop_();
                delay(50000);//故意延时
        }

        HUAN=1;
        _nop_();
        _nop_();
        delay(50000);//故意延时
        HUAN=0;
        YA=0;
}

我稍改了一下,试一下这个
ID:161164 发表于 2021-7-13 14:33

对~只是把delay(50000);改delay(3000);
ID:592807 发表于 2021-7-13 14:33
595和595A是不一样的,看下是不是用了595A
ID:569561 发表于 2021-7-13 14:22

用的我的程序么
ID:934353 发表于 2021-7-13 14:19
原理图发完整一点,至少74HC595的这些引脚怎么接得发全一点,你这样发我只能看到一半
ID:161164 发表于 2021-7-13 14:03

我的没问题


ID:161164 发表于 2021-7-13 13:24
Q0~Q7'接的是什么?
ID:569561 发表于 2021-7-13 12:52
devcang 发表于 2021-7-13 11:15
直接跳转吧  http://www.51hei.com/bbs/dpj-110372-1.html

您这个是595对的用法,我看了很多资料了,我这个问题还没有解决
ID:277550 发表于 2021-7-13 11:15
ID:94031 发表于 2021-7-13 11:11
595输出要加上拉
ID:332444 发表于 2021-7-13 11:07
注意时序必须符合要求

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

Powered by 单片机教程网

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