void SendSeg(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++) //发送字节
{
SRCLK_B=0;
SER_B=dat&0x80;
dat<<=1;
SRCLK_B=1;
}
LATCH_B=0; //锁存
_nop_();
LATCH_B=1;
}//这段为位锁存代码;
在双 {MOD}点阵中,这段代码for(i=0;i<8;i++)结束后才进行锁存,为什么不是在
for(i=0;i<8;i++)
{
SRCLK_B=0;
SER_B=dat&0x80;
dat<<=1;
SRCLK_B=1;
LATCH_B=0;
_nop_();
LATCH_B=1;
}里面进行锁存呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
SRCLK_B=0;
SER_B=dat&0x80;
dat<<=1;
SRCLK_B=1;
这些是发送一位数据到74HC595的移位寄存器中,当8位数据全部发送完成后再执行下面的
LATCH_B=0;
_nop_();
LATCH_B=1;
上升沿作用下将移位寄存器中的数据输入到存储寄存器中去,,当使能时,存储器的数据从Q0~Q7口输出。
按理说你把那段代码放进for语句里面也是可以的,但是这样74HC595就会输出一些“乱码”
还是把它放在FOR后面好些,这样就能让输出状态切换时中间不会出现一些不必要的状态。
(纯属个人看法,不喜勿喷)
多谢;你的答案很不错,基本上我都懂了, 这样写的原因会不会是74HC595 8位串入并出的这个特性呢?
一周热门 更多>