双色点阵问题 !求大神答疑!
时间:10-02
整理:3721RD
点击:
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;
}//这段为位锁存代码;
在双色点阵中,这段代码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;
}里面进行锁存呢?
{
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;
}//这段为位锁存代码;
在双色点阵中,这段代码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;
}里面进行锁存呢?
感觉你这程序有点像是用单片机的IO口模拟串口通讯进行控制74HC595,,
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位串入并出的这个特性呢?
嗯,基本思想是把8位串行数据都收到后再并口输出
都是大神啊 学习学习
支持一个,顶顶顶
本来这个芯片就是应该先循环8次,把一个字节输入进锁存芯片内,然后退出循环后,给一个锁存并输出到点阵的信号。是让这8位同时作用到点阵的哦。如果你边循环边锁存,多做无益,你看看你的点阵,肯定是花的。