找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3420|回复: 4
收起左侧

关于89C51单片机扩展74HC165的问题

[复制链接]
ID:227385 发表于 2018-9-8 00:45 | 显示全部楼层 |阅读模式
请问各位大侠,小弟刚学51单片机不久在做一个项目时需要很多输入按钮(大概22个按钮)发现用hc165联级的方式最多只能采集到两片HC165的联级的数据,第三片hc165的数据采集不到,代码如下:
#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数据*/
  for(i=0;i<8;i++)
  {
    inData1=inData1<<1
    CLK=0;
    _nop_();
    inData1|=out_q7;
    CLK=1;
    _nop_();
  }

  /*读取第2片HC165数据*/
  for(i=0;i<8;i++)
  {
    inData2=inData2<<1
    CLK=0;
    _nop_();
    inData2|=out_q7;
    CLK=1;
    _nop_();
  }

  /*读取第2片HC165数据*/
  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) //此处范围只能设置0-15,超过这个范围结果一直是0小灯一直闪烁
    test=0;
    delay(20000);
    test=1;
    delay(20000);
  }
}

回复

使用道具 举报

ID:111634 发表于 2018-9-8 21:10 | 显示全部楼层
利用虚拟串行比真串行速度要慢,但即使这样,也不至于漏掉按键信号,按键信号至少10ms以上。要漏掉也不至于全部漏掉。因此,可以肯定,你的电路连接或程序有问题。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:111634 发表于 2018-9-8 21:13 | 显示全部楼层
实例39 74HC165串行输入8-16位按键状态
回复

使用道具 举报

ID:384109 发表于 2018-9-8 23:04 | 显示全部楼层
HC165的信号引脚最好都接一个上拉电阻,单片机的引脚可能没有足够的驱动力去驱动多个芯片

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:111634 发表于 2018-9-9 09:00 | 显示全部楼层
我这个案例是真串口传送
Proteus仿真一下,确认有效。
实例39 74HC165串行输入8-16位按键状态.rar (57.52 KB, 下载次数: 67)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表