標(biāo)題: 74hc595級聯(lián)每一片輸出所耗時(shí)間是不是不同 [打印本頁]

作者: abc18434762843    時(shí)間: 2020-3-2 03:07
標(biāo)題: 74hc595級聯(lián)每一片輸出所耗時(shí)間是不是不同
如果三片74hc595級聯(lián),假如第一片完全輸出要8個(gè)脈沖信號,那第二片輸出是不是就得花費(fèi)16個(gè)脈沖信號才行,第三片是不是得24個(gè)脈沖才行,所有輸入不得都經(jīng)過第一片么,為什么有的程序每一片時(shí)間都一樣嘞,求大佬告知
作者: 黎明初至    時(shí)間: 2020-3-2 14:11
可否貼下你的級聯(lián)原理圖。
作者: tyrl800    時(shí)間: 2020-3-2 14:45
都是8個(gè)脈沖
作者: abc18434762843    時(shí)間: 2020-3-2 16:23
下邊是昨天看到的程序,是八個(gè)595級聯(lián),主函數(shù)里邊每個(gè)調(diào)用的函數(shù)都是先移了八位后就直接鎖存了,后邊再調(diào)用裝第二片595不是會影響第一片數(shù)據(jù)么


作者: hhdsdy    時(shí)間: 2020-3-2 16:34
只需要8個(gè)脈沖,因?yàn)樵摷?95要顯示的內(nèi)容是取自上一級595的輸出,而不是單片機(jī),所以只需移位8次。
作者: abc18434762843    時(shí)間: 2020-3-2 16:39
tyrl800 發(fā)表于 2020-3-2 14:45
都是8個(gè)脈沖

怎么都是八個(gè)脈沖呢?不是第二片輸出不是經(jīng)過第一片么,而且第一片八位輸完已經(jīng)鎖存了,那這樣不是第二片是時(shí)序多了,而且同一個(gè)鎖存脈沖不是存了第二片也會影響到第一片么
作者: abc18434762843    時(shí)間: 2020-3-2 16:40
abc18434762843 發(fā)表于 2020-3-2 16:23
下邊是昨天看到的程序,是八個(gè)595級聯(lián),主函數(shù)里邊每個(gè)調(diào)用的函數(shù)都是先移了八位后就直接鎖存了,后邊再調(diào) ...

不好意思,剛剛那個(gè)程序不全,現(xiàn)在補(bǔ)全

#include <reg52.h>
sbit  st=P1^5;   //  存儲脈沖 該脈沖上升沿所有被所存的信號一起輸出
sbit  sh=P1^6;   //  移位脈沖 該脈沖上升沿輸出信號移位,但不一定輸出
sbit  DA=P1^7;   //  待移入的數(shù)據(jù)信號
sbit oe_595=P3^6; // 595使能端
sbit oe_138=P1^4; // 138使能端
unsigned char code zf[4][32]=  //從左到右  從上到下  橫向8點(diǎn)右高位
{
0x00,0x10,0xFE,0x3F,0x80,0x00,0x80,0x00, //"正"
0x80,0x00,0x80,0x00,0x88,0x08,0x88,0x1F,
0x88,0x00,0x88,0x00,0x88,0x00,0x88,0x00,
0x88,0x00,0x88,0x20,0xFF,0x7F,0x00,0x00,

0x40,0x00,0x40,0x00,0x40,0x20,0xFF,0x7F, //"在"
0x20,0x00,0x20,0x02,0x10,0x02,0x10,0x0A,
0xC8,0x1F,0x0C,0x02,0x0A,0x02,0x09,0x02,
0x08,0x02,0x08,0x22,0xE8,0x7F,0x08,0x00,

0x00,0x00,0x02,0x22,0xE4,0x27,0x24,0x2A, //"測"
0xA1,0x2A,0xA6,0x2A,0xA4,0x2A,0xB0,0x2A,
0xA8,0x2A,0xA4,0x2A,0xA7,0x2A,0x84,0x20,
0x44,0x21,0x24,0x22,0x14,0x2A,0x04,0x10,

0x00,0x04,0x02,0x14,0x04,0x24,0x04,0x04, //"試"
0xF0,0x7F,0x00,0x04,0x07,0x04,0xE4,0x07,
0x84,0x04,0x84,0x08,0x84,0x08,0x84,0x08,
0x94,0x4B,0xEC,0x48,0x44,0x50,0x00,0x20
};
void Delay(unsigned int i)   // 延時(shí)函數(shù)
{
while(--i)
;
}
void SendByte(unsigned char Dat) // 對595寫入一個(gè)字節(jié)數(shù)據(jù)
{
   unsigned char a;
   for(a=0;a<8;a++)    // 分8次移位輸出到鎖存器
  {
    if((Dat&0x80)==0x80)  // 判斷寫0還是寫1
  { DA=1; }  
  else
  { DA=0; }
    sh = 0;  
  st = 0;
  sh = 1;      // SH上升沿所存移位輸出信號
  st = 1;      // ST上升沿輸出鎖存數(shù)據(jù)
    Dat=Dat<<1;     // 數(shù)據(jù)移一位
  }
}
void main(void)      // 主程序
{
oe_595=0;oe_138=1;    // 初始化 開595 關(guān)138
  while(1)
  {unsigned char i;
    for(i=0;i<16;i++)   // 共計(jì)16次,因?yàn)楣灿?6行要掃描
  {
  SendByte(zf[0][i*2]);
  SendByte(zf[0][i*2+1]);
  SendByte(zf[1][i*2]);
  SendByte(zf[1][i*2+1]);
  SendByte(zf[2][i*2]);
  SendByte(zf[2][i*2+1]);
  SendByte(zf[3][i*2]);
  SendByte(zf[3][i*2+1]);  // 送某行的8列顯示數(shù)據(jù)
  P1=i;      // 送掃描碼
  oe_138=0;     // 開138 顯示該行數(shù)據(jù)
  Delay(100);     // 延時(shí)一會
  oe_138=1;     // 關(guān)138
     }
   }
}
作者: abc18434762843    時(shí)間: 2020-3-2 16:50
hhdsdy 發(fā)表于 2020-3-2 16:34
只需要8個(gè)脈沖,因?yàn)樵摷?95要顯示的內(nèi)容是取自上一級595的輸出,而不是單片機(jī),所以只需移位8次。

那這樣后一片的內(nèi)容一鎖存,那前一片的輸出不就也變了么
作者: hhdsdy    時(shí)間: 2020-3-2 17:01
abc18434762843 發(fā)表于 2020-3-2 16:23
下邊是昨天看到的程序,是八個(gè)595級聯(lián),主函數(shù)里邊每個(gè)調(diào)用的函數(shù)都是先移了八位后就直接鎖存了,后邊再調(diào) ...

595有數(shù)據(jù)鎖存的,移位和數(shù)據(jù)并行輸出是分開的,移位過程中并不會改變并行的內(nèi)容,所以送數(shù)給第2片數(shù)據(jù)并不會改變第一片的顯示內(nèi)容
作者: xuyaqi    時(shí)間: 2020-3-2 17:35
因?yàn)?4hc595級聯(lián)是串行,串行先送的數(shù)是第三級,然后二級,一級,因此三級數(shù)到達(dá)后,其他兩級的數(shù)據(jù)也就到達(dá),再一起輸出,具體應(yīng)看595時(shí)序圖。
作者: haierzaifei11    時(shí)間: 2020-3-5 08:37
具體應(yīng)看595時(shí)序圖




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1