找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3702|回復(fù): 4
收起左側(cè)

關(guān)于89C51單片機(jī)擴(kuò)展74HC165的問(wèn)題

[復(fù)制鏈接]
ID:227385 發(fā)表于 2018-9-8 00:45 | 顯示全部樓層 |閱讀模式
請(qǐng)問(wèn)各位大俠,小弟剛學(xué)51單片機(jī)不久在做一個(gè)項(xiàng)目時(shí)需要很多輸入按鈕(大概22個(gè)按鈕)發(fā)現(xiàn)用hc165聯(lián)級(jí)的方式最多只能采集到兩片HC165的聯(lián)級(jí)的數(shù)據(jù),第三片hc165的數(shù)據(jù)采集不到,代碼如下:
#include "reg51.h"
#include "intrins.h

typedef unsigned char u8;
typedef unsigned int u16

/*74HC165管腳定義*/
sbit   out_q7=P1^0;
sbit       CLK=P1^1;
sbit         PL=P1^2
sbit       test=P1^3;


u16 HC165ReadData()
{
  u16 Datavalue,inData1,inData2,inData3,i;
  inData1=0;
  inData2=0;
  inData3=0;
  Datavalue=0;

  PL=0;
  _nop_();
  PL=1;//
  _nop_();

  /*讀取第1片HC165數(shù)據(jù)*/
  for(i=0;i<8;i++)
  {
    inData1=inData1<<1
    CLK=0;
    _nop_();
    inData1|=out_q7;
    CLK=1;
    _nop_();
  }

  /*讀取第2片HC165數(shù)據(jù)*/
  for(i=0;i<8;i++)
  {
    inData2=inData2<<1
    CLK=0;
    _nop_();
    inData2|=out_q7;
    CLK=1;
    _nop_();
  }

  /*讀取第2片HC165數(shù)據(jù)*/
  for(i=0;i<8;i++)
  {
    inData3=inData3<<1
    CLK=0;
    _nop_();
    inData3|=out_q7;
    CLK=1;
    _nop_();
  }  
  Datavalue=inData1;
  Datavalue<<=8;
  Datavalue|=inData2;
  Datavalue<<=8;
  Datavalue|=inData3;
  return(Datavalue);
}



void delay(u16 y)
{
  while(y--);
}
                                            
void main()
{
  u16 hc165value;

  while(1)
  {
    hc165value=HC165ReadData();
    if((hc165value&(1<<0))==0) //此處范圍只能設(shè)置0-15,超過(guò)這個(gè)范圍結(jié)果一直是0小燈一直閃爍
    test=0;
    delay(20000);
    test=1;
    delay(20000);
  }
}

回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2018-9-8 21:10 | 顯示全部樓層
利用虛擬串行比真串行速度要慢,但即使這樣,也不至于漏掉按鍵信號(hào),按鍵信號(hào)至少10ms以上。要漏掉也不至于全部漏掉。因此,可以肯定,你的電路連接或程序有問(wèn)題。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2018-9-8 21:13 | 顯示全部樓層
實(shí)例39 74HC165串行輸入8-16位按鍵狀態(tài)
回復(fù)

使用道具 舉報(bào)

ID:384109 發(fā)表于 2018-9-8 23:04 | 顯示全部樓層
HC165的信號(hào)引腳最好都接一個(gè)上拉電阻,單片機(jī)的引腳可能沒(méi)有足夠的驅(qū)動(dòng)力去驅(qū)動(dòng)多個(gè)芯片

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2018-9-9 09:00 | 顯示全部樓層
我這個(gè)案例是真串口傳送
Proteus仿真一下,確認(rèn)有效。
實(shí)例39 74HC165串行輸入8-16位按鍵狀態(tài).rar (57.52 KB, 下載次數(shù): 67)
165串行輸入16位.jpg
以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1.。書中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,程序語(yǔ)句條條有注解。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表