双 {MOD}点阵问题 !求大神答疑!!

2019-07-15 16:36发布

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;
}里面进行锁存呢?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
自动化小子
1楼-- · 2019-07-15 20:05
感觉你这程序有点像是用单片机的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后面好些,这样就能让输出状态切换时中间不会出现一些不必要的状态。
(纯属个人看法,不喜勿喷
小代码
2楼-- · 2019-07-15 20:34
自动化小子 发表于 2015-7-15 11:05
感觉你这程序有点像是用单片机的IO口模拟串口通讯进行控制74HC595,,
    SRCLK_B=0;
    SER_B=dat&0x80;

多谢;你的答案很不错,基本上我都懂了,     这样写的原因会不会是74HC595  8位串入并出的这个特性呢?
自动化小子
3楼-- · 2019-07-16 00:17
 精彩回答 2  元偷偷看……
vega_Mylove
4楼-- · 2019-07-16 04:51
都是大神啊   学习学习
绿源学习者
5楼-- · 2019-07-16 09:01
支持一个,顶顶顶
qduwg
6楼-- · 2019-07-16 14:18
本来这个芯片就是应该先循环8次,把一个字节输入进锁存芯片内,然后退出循环后,给一个锁存并输出到点阵的信号。是让这8位同时作用到点阵的哦。如果你边循环边锁存,多做无益,你看看你的点阵,肯定是花的。

一周热门 更多>