1501697860 发表于 2013-8-28 16:57:38

大侠,帮我看74HC165程序,怎么不能控制8位啊?多谢!

#include <reg52.h> // 包含头文件
#include<intrins.h>

sbit HC165_DATA= P2^0; // 定义串行数据端口
sbit HC165_SH = P2^1; // 定义数据锁存端口
sbit HC165_CLK = P2^2; // 定义串行时钟端口
//sbit rck=P1^2;
//sbit ds=P1^1;
//sbit clk=P1^0;

unsigned char a;

void read_char165(void)//并入串出
{
unsigned char i;   
HC165_SH =0; //置入控制有效,锁存端口值
HC165_SH =1;
for(i=0;i<8;i++)
{
a<<=1;   //先取高位
if(HC165_DATA)
{
   a|=0X01;   
}

HC165_CLK=0; //
HC165_CLK=1; //上升沿
}

//for(i=0;i<8;i++)   
//{
// a<<=1;
// if(HC165_DATA)
// {
//    a|=0X01;   
// }   
//HC165_CLK=0; //
//HC165_CLK=1; //上升沿
//}
}


//void write_595(unsigned char dat)//串入并出
//{
// unsigned char i=0;
//   for(i=0;i<8;i++)
//   {
//    clk=0;
//    if((dat&0x80)==0x80) //先读高位
//    ds=1;
// else ds=0;
// clk=1;
// dat<<=1;//一直往高位移
//   }
//}

//void send_595(unsigned char dat0,unsigned char dat1)//显示
//{
// write_595(dat0);
// write_595(dat1);
// rck=0;
// rck=1;
//}

void main(void)
{
P0=0xFF;
P1=0xFF;
while(1)   
{
//read_char165();
//send_595(a,a);
read_char165();
P0=~a;
//P1=~a;
}
}


xiaobendan001 发表于 2013-8-28 17:26:27

那你能控制几位?

1501697860 发表于 2013-8-29 08:04:24

xiaobendan001 发表于 2013-8-28 17:26 static/image/common/back.gif
那你能控制几位?

只有一位,是不是延时的问题啊

xiaobendan001 发表于 2013-8-29 08:20:53

这类HC的器件的速度还是不错的,你可以用示波器看看波形,看是否要加延时,没有示波器,自己加点延时测试一下就好
另外这里
if(HC165_DATA)
{
   a|=0X01;   
}

我通常会这样:

if(HC165_DATA)
{
   a|=0X01;   
}else{
a &= 0xfe;
}
我就是觉得万一<<=1的时候 移进来的本来就是1怎么办?你以前用汇编的?

1501697860 发表于 2013-8-29 14:45:19

xiaobendan001 发表于 2013-8-29 08:20 static/image/common/back.gif
这类HC的器件的速度还是不错的,你可以用示波器看看波形,看是否要加延时,没有示波器,自己加点延时测试一 ...

多謝,經典程序,我以後要加上.

xiaobendan001 发表于 2013-8-30 10:38:51

楼主还没有说搞定没有啊,怎么搞定的?

1501697860 发表于 2013-8-30 12:32:24

xiaobendan001 发表于 2013-8-30 10:38 static/image/common/back.gif
楼主还没有说搞定没有啊,怎么搞定的?

多謝,已經OK了,程序沒問題。

xiaobendan001 发表于 2013-8-30 15:57:34

那是哪儿的问题?
页: [1]
查看完整版本: 大侠,帮我看74HC165程序,怎么不能控制8位啊?多谢!