pzhmgzxs 2019-07-28 22:48 采纳率: 0%
浏览 1019

51单片机在led点阵中,我编的是心形灯,为什么灯全亮了

#include "reg52.h"
#include "intrins.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit SRCLK=P3^6;
sbit RCL=P3^5;
sbit SER=P3^4;

u16 code duan[]={0xff,0x48,0x44,0x22,0x44,0x48,0x30,0x00};
u16 code wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

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

void Hc(u8 led)
{
u8 a;
SRCLK=0;
RCL=0;
for(a=0;a {
SER=led>>7;
led<<=1;
SRCLK=1;
nop();
nop();
SRCLK=0;
}
RCL=1;
nop();
nop();
RCL=0;
}

void main()
{
u16 j;
while(1)
{
for(j=0;j<8;j++)
{
P0=wei[j];
Hc(duan[j]);
delay(100);
Hc(0x00);
}
}
}

  • 写回答

1条回答 默认 最新

  • wangyq891 2019-08-12 16:06
    关注

    没看见你的硬件原理图。不好说问题在哪。

    猜测你应该用了74LS595电路。移位写入的部分看着好像有问题,或者是没发全。

    附上一段74LS595的写入程序:
    /*********************************************/
    //函数名称:IO_74ls595_send(unsigned int dat)
    //函数功能:数据发送函数(32位)
    //返 回 值:无
    /*********************************************/
    void IO_74ls595_send(unsigned long dat)
    {
    uchar data i;

    IO_74ls595_RCLK = 0;    //: 锁存RCLK输出0
    IO_74ls595_SRCLK = 0;       //:移位寄存器时钟=0
    
    for(i=0;i<32;i++)       //:0xffffffff,高位在前,低位在后
    {
        if(dat&0x80000000)      //利用&运算 取数
        {
            IO_74ls595_SER=1;
        }
        else
        {
            IO_74ls595_SER=0;
        }
        IO_74ls595_SRCLK = 1;
        dat = dat<<1;
        IO_74ls595_SRCLK = 0;
    }
    
    IO_74ls595_RCLK = 1;    //: CS44-RCLK输出1
        _nop_();    _nop_();
    IO_74ls595_RCLK = 0;    //: CS44-RCLK输出0
    

    }

    该段代码经过验证,是正确可用的。供参考。

    评论

报告相同问题?

悬赏问题

  • ¥15 优质github账号直接兑换rmb,感兴趣伙伴可以私信
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)