595的数据是串行写入的,也就是按位写
首先,要写入的数据dat,是8位二进制数,dat&0x80;是取dat的最高位,送到数据线ds上
然后,dat=dat<<1;dat左移一位,接着输出下一位
0x80H=1000 0000 B
dat&0x80就相当于只判断dat当前的最高位是否为1,其他位全为0,然后放入DS 8位寄存器中
我查了一下reg51.h 头文件 没有发现DS寄存器的定义。
这个for循环8次后就相当于把dat的最低位赋值给了DS的最高位,其他位全为0.
如果从高位数第二位有值(1)则保留,为零就舍弃,其它位全部置零
这只是从字面形式解释
这类的东西把十六进制数转换成二进制数串比较好理解
ds应当是某个管脚的定义。595是移位寄存器,因此程序中按串行输出,从高到低依次输出dat中的各个位。
金葵花