本帖最后由 lswhome 于 2014-1-7 01:19 编辑
51单片机,只有一片,典型的应用线路图:
QQ图片20140107010357.jpg (301.37 KB, 下载次数: 0)
下载附件
2014-1-7 01:15 上传
程序:
sbit _74HC165_nPL=P0^3;
sbit _74HC165_SDA=P0^4;
sbit _74HC165_CLK=P0^5;
UINT8 _74HC165_GetData(void)//读取数据
{
UINT8 i,Data=0;
_74HC165_nPL=0;
_74HC165_nPL=1;
for(i=0;i<8;i++)
{
_74HC165_CLK=0;
Data<<=1;
Data|=_74HC165_SDA;
_74HC165_CLK=1;
}
return(Data);
}
程序改了无数次了,现在改成这样了,但还是不对,读到的数据完全不对,上拉电阻我改成10K不行,现在又改成4.7K,问题就是除了D7接地读到的数据是正确的(0111 1111),其他的D0~D6任何一个接地,读出的数据都是1111 1110,我就纳闷了,IC换了4个了,都是这样。。。除了D7,其他任意两个接地,读到的数据,就这几种,0xfe,0xee,0xfc,这是啥毛病?程序里我也加过延时,但结果都一样,主频试过11.05926M 12M 24M,结果都相同,实在搞不明白了。。。电压是5V供电的,用万能表测试对应的引脚,接地的时候,D0~D7引脚的对应的电压都是正确的。。但就是无法得到正确的数据,无语了,IC是SOP16封装的74HC165D。。各位帮忙看看是哪里的问题?
QQ图片20140107015822.jpg (221.79 KB, 下载次数: 0)
下载附件
2014-1-7 01:58 上传
51的代码:
uint KeyPort(void)
{
uchar i;
uint key;
KeySH = 0;
_nop_();_nop_();
KeySH = 1;
for(i=0;i<16;i++)
{
KeyCLK = 0;
key >>= 1;
if(KeyDat)
key |= 0x8000;
else
key &= 0x7fff;
KeyCLK = 1;
}
return key;
}
sbit _74HC165_nPL=P0^3;
sbit _74HC165_SDA=P0^4;
sbit _74HC165_CLK=P0^5;
UINT8 _74HC165_GetData(void)//读取数据
{
UINT8 i,Data=0;
_74HC165_nPL=0;
_74HC165_CLK=1;
_74HC165_CLK=0;
_74HC165_nPL=1;
for(i=0;i<8;i++)
{
_74HC165_CLK=0;
Data<<=1;
if(_74HC165_SDA){
Data++;
}
_74HC165_CLK=1;
}
return(Data);
}
一周热门 更多>