qq_45379364 2024-03-20 23:19 采纳率: 91.9%
浏览 19
已结题

led点阵为什么不亮,OE脚已经跳到GND 芯片是74HC595

led点阵为什么不亮,OE脚已经跳到GND 芯片是74HC595,注释部分这样写行不行,SER 信号输入脚不能直接给0或给1吗?必须进行位操作吗?为什么,位操作不也是执行的高低电平吗,和给0和1也没啥区别呀


```c
#include <REGX52.H>
#include "Delay.h"

sbit  ser=P3^4;
sbit _1sck=    P3^6;
sbit _8rck=P3^5;
unsigned char bite;



void _74HC( bite)
{ unsigned i=0;
    
    for(i=0;i<8;i++)
{        ser=bite&(0x80>>i);
        _1sck=1;
        _1sck=0;
}
        _8rck=1;
        _8rck=0;
}


void main()
{        _1sck=0;

        _8rck=0;
        _74HC(0xf0);
while(1)

{        
    
    
    






}
    }

//    void _74HC( bite)
//{ 
//    
//        ser=0;
//        _1sck=1;
//        _1sck=0;
//        
//     ser=1;
//        _1sck=1;
//        _1sck=0;
//        
//     ser=1;
//        _1sck=1;
//        _1sck=0;
//        
//     ser=0;
//        _1sck=1;
//        _1sck=0;
//        
//     ser=1;
//        _1sck=1;
//        _1sck=0;
//        
//         ser=0;
//        _1sck=1;
//        _1sck=0;
//        
//         ser=0;
//        _1sck=1;
//        _1sck=0;
//        
//         ser=0;
//        _1sck=1;
//        _1sck=0;
//    
//      _8rck=1;
//        _8rck=0;
//    
//    
//    
//    


//        
//}
如上面的代码块LED点阵不亮。



```

  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-03-20 23:19
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述: LED点阵为什么不亮,OE脚已经跳到GND,芯片是74HC595,注释部分这样写行不行,SER信号输入脚不能直接给0或给1吗?必须进行位操作吗?为什么,位操作不也是执行的高低电平吗,和给0和1也没啥区别呀。 解答:
    1. LED点阵不亮的原因可能有多种,需要进一步排查。可以确认一下硬件连接是否正确以及点阵行列是否有控制。
    2. 注释部分的代码不太符合实际情况,建议根据芯片的数据手册进行配置。一般来说,输入的数据需要通过位操作来逐位传送到芯片中,SER信号输入脚不能直接给0或给1,否则会影响位传输的正确性。
    3. 位操作与给0/1的区别在于,位操作是操作数据的二进制位,能够逐位设定,可以实现更加精确的控制。 参考代码: 下面是控制LED点阵亮起来的代码,可以供参考:
    #include <regx52.h>
    #define SER P3_4
    #define _1sck P3_6
    #define _8rck P3_5
    unsigned char bite;
    void _74HC(unsigned char bite)
    {
        unsigned char i;
        for(i=0; i<8; i++)
        {
            SER = bite & (0x80>>i);
            _1sck = 1;
            _1sck = 0;
        }
        _8rck = 1;
        _8rck = 0;
    }
    void main()
    {
        _1sck = 0;
        _8rck = 0;
        _74HC(0xff);
        while(1)
        {
            //do something
        }
    }
    

    注意: 1. 在具体实现中,需要根据芯片的数据手册进行具体的配置和控制。 2. 这里的控制代码只是一个简单的示例,实际应用中需要根据具体情况进行优化和修改。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月21日
  • 创建了问题 3月20日