m0_63369676 2021-11-20 22:53 采纳率: 50%
浏览 55

74hc595的问题dat右移动七位

下面这个程序为什么dat需要右移七位?,595不是高位先输入到Q7吗?为什么要写个低输入的程序

#include "reg51.h"
#include<intrins.h>

typedef unsigned int u16;
typedef unsigned char u8;

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

u8 ledduan[]={0x38,0x44,0x42,0x21,0x42,0x44,0x38,0x00};
u8 ledwei[]={0x7f
,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

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

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

    SRCLK=1;
    _nop_();
    _nop_();
    SRCLK=0;    
}


RCLK=1;
_nop_();
_nop_();
RCLK=0;

}

void main()
{
u8 i;
while(1)
{
P0=0x7f;
for(i=0;i<8;i++)
{
P0=ledwei[i]; //位选
Hc595SendByte(ledduan[i]); //发送段选数据
delay(100); //延时
Hc595SendByte(0x00); //消隐
}
}
}

  • 写回答

1条回答 默认 最新

  • 路与本 2023-01-16 21:26
    关注

    SER=dat>>7; 不就是 SER=dat的最高位了吗。
    比如 10000000 右移七位就是1;
    dat<<=1;就是让次高位成为最高位通过SER=dat>>7全部传输

    评论

报告相同问题?

问题事件

  • 创建了问题 11月20日

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大