普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2510|回复: 5

51单片机I/O口扩展(串转并)LED点阵没有现象

[复制链接]

3

主题

4

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2022-3-12 22:25:07 | 显示全部楼层 |阅读模式
代码如下
#include <REGX52.H>
typedef unsigned int u16;
typedef unsigned char u8;
//&#182;¨ò&#229;74595&#191;&#216;&#214;&#198;1ü&#189;&#197;
sbit SER=P3^4;//ò&#198;&#206;&#187;&#188;&#196;′&#230;&#198;ê±&#214;ó÷ê&#228;è&#235;
sbit SRCLK=P3^5;//′&#230;′¢&#188;&#196;′&#230;&#198;÷ê±&#214;óê&#228;è&#235;
sbit rCLK=P3^6;//′&#174;DDêy&#190;Yê&#228;è&#235;
//&#182;¨ò&#229;μ&#227;&#213;óáD&#191;&#216;&#214;&#198;&#182;&#203;&#191;ú
#define LEDDZ_COL_PROT        P0
u8 ghc595_buf[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//&#209;ó3ùoˉêy
void delay_10us(u16 ten_us)
{
        while(ten_us--);
}
void delay_ms(u16 ms)
{
u16 i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
//&#207;ò74595ê&#228;è&#235;êy&#190;Y
void hc595_write_data(u8 dat)
{
                u8 i=0;
          for(i=0;i<8;i++)
          {
                        SER=dat>>7;
                        dat<<=1;
                        SRCLK=0;
                        delay_10us(1);
                        SRCLK=1;
                        delay_10us(1);
          }
                rCLK=0;
    delay_10us(1);
                rCLK=1;
}
void main()
{
        u8 i=0;
        LEDDZ_COL_PROT=0x00;
        while(1)
        {

                for(i=0;i<8;i++)
                {
         hc595_write_data(0x00);
         hc595_write_data(ghc595_buf[i]);
         delay_ms(500);
          }
  }
}
请问各位老哥是哪里出现了问题
回复

使用道具 举报

1

主题

3

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2022-3-13 12:15:53 | 显示全部楼层
因为不知道你要实现什么效果,所以就把我写的代码发上来了
我写的代码:
#include "reg51.h"//如果是52,则第一列全亮
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;

sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SET=P3^4;

u8 ledLie[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 ledHang[]={0x00,0x7e,0x81,0x81,0x81,0x81,0x7e,0x00};//显示数字0



void Hc595SendByte(u8 dat)
{
        u8 a;
        for(a=0;a<8;a++)
        {
                SET=dat>>7;
                dat<<=1;
                SRCLK=0;
                _nop_();
                SRCLK=1;
                _nop_();        
        }
        RCLK=0;
        _nop_();
        RCLK=1;
}

void delay(u8 i)
{
        while(i--);
}

void main()
{       
        u8 a;
        while(1)
        {
                for(a=0;a<8;a++)
                {
                        P0=ledLie[a];
                        Hc595SendByte(ledHang[a]);
                        delay(100);//视觉暂留时间约为0.05至0.2秒
                        Hc595SendByte(0x00);//P0=0xff;阳极可以消影,阴极不行
                }
        }
}
回复 支持 反对

使用道具 举报

1

主题

3

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2022-3-13 12:27:47 | 显示全部楼层
有一点你弄错了,sbit SRCLK=P3^5和sbit rCLK=P3^6你弄反了,应该交换一下。
还有消影尽量在一个循环内解决
代码修改后,是亮8*8所有的LED等
修改后的代码:
#include <REGX52.H>
typedef unsigned int u16;
typedef unsigned char u8;
//&#182;¨ò&#229;74595&#191;&#216;&#214;&#198;1ü&#189;&#197;
sbit SER=P3^4;//ò&#198;&#206;&#187;&#188;&#196;′&#230;&#198;ê±&#214;ó÷ê&#228;è&#235;
sbit SRCLK=P3^6;//′&#230;′¢&#188;&#196;′&#230;&#198;÷ê±&#214;óê&#228;è&#235;
sbit rCLK=P3^5;//′&#174;DDêy&#190;Yê&#228;è&#235;
//&#182;¨ò&#229;μ&#227;&#213;óáD&#191;&#216;&#214;&#198;&#182;&#203;&#191;ú
#define LEDDZ_COL_PROT        P0
u8 ghc595_buf[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


//&#209;ó3ùoˉêy
void delay_10us(u16 ten_us)
{
        while(ten_us--);
}
/*void delay_ms(u16 ms)
{
u16 i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}*/



//&#207;ò74595ê&#228;è&#235;êy&#190;Y
void hc595_write_data(u8 dat)
{
                u8 i=0;
          for(i=0;i<8;i++)
          {
                        SER=dat>>7;
                        dat<<=1;
                        SRCLK=0;
                        delay_10us(1);
                        SRCLK=1;
                        delay_10us(1);
          }
                rCLK=0;
    delay_10us(1);
                rCLK=1;
}
void main()
{
        u8 i=0;
        LEDDZ_COL_PROT=0x00;
        while(1)
        {

                for(i=0;i<8;i++)
                {
         hc595_write_data(ghc595_buf[i]);
         delay_10us(100);
                 hc595_write_data(0x00);
          }
  }
}
回复 支持 反对

使用道具 举报

3

主题

4

帖子

22

积分

新手上路

Rank: 1

积分
22
 楼主| 发表于 2022-3-13 14:53:56 | 显示全部楼层
谢谢,找到了错误,主要是那个跳线帽没弄到接地。
回复 支持 反对

使用道具 举报

1

主题

3

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2023-10-27 12:58:58 | 显示全部楼层
黑戈夫 发表于 2022-3-13 14:53
谢谢,找到了错误,主要是那个跳线帽没弄到接地。

我的LED点阵也不亮,能说一下那个跳线帽怎么接地嘛
回复 支持 反对

使用道具 举报

1

主题

2

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2023-11-10 16:36:26 | 显示全部楼层
那个led点阵旁边的j24的帽子摘下来就可以解决
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-29 01:20 , Processed in 0.087667 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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