利用两个LS165级联,怎么只能控制一位拨码开关?帮我看看...

2020-01-27 11:42发布

/*******************************************************************************

********************************************************************************/
#include <reg52.H>
#include <intrins.h>

#define  NOP()   _nop_()   /* 定义空指令 */

//SPI 接口
sbit    CLK    = P1^5;           //串行时钟
sbit    IN_PL  = P1^6;    //把数据加载到锁存器中
sbit    IN_Dat = P1^7;    //数据通过P1.7脚移进单片机内处理

unsigned long ReHC74165(void);         //函数声名
//void beep();  
void Delay(void)
{
   unsigned char i , j;
   for(i=250;i>0;i--)
     for(j=250;j>0;j--);
}  

/********************************************************
*        主函数                                                                                                 *
*                                                                                                                 *
********************************************************/
main()
  {         
   unsigned char i;

  while(1)
  {
    unsigned long  Input=ReHC74165();//调用165驱动程序
     
     P2 = 0xff;          //清除
         P3 = 0xff;

         P2 = Input;
         Delay();
         Delay();
            for(i=0; i<8; i++)
    {
          Input=Input>>1;
     }
         P3 = Input;
         Delay();
         Delay();


   }   
   
}



unsigned long ReHC74165(void)
{  
  unsigned char i;
  unsigned long indata;
               
   IN_PL=0;
   NOP();    //短暂延时 产生一定宽度的脉冲
   IN_PL=1;         //将外部信号全部读入锁存器中
   NOP();
              
   indata=0;   //保存数据的变量清0  
   for(i=0; i<16; i++)
    {
          indata=indata<<1;         //左移一位
      if(IN_Dat==1)indata=indata+1;        //如果IN_Dat检测到高电平 保存数据的变量加1
          CLK=0;   //时钟置0
      NOP();
      CLK=1;   //时钟置1          
        }
   
   return(~indata);         //将保存数据的变量取反后返回
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
1501697860
1楼-- · 2020-01-27 14:20
本帖最后由 1501697860 于 2013-7-2 07:50 编辑

原理图请帮忙看看,多谢了
adongliu
2楼-- · 2020-01-27 16:29
 精彩回答 2  元偷偷看……
1501697860
3楼-- · 2020-01-27 21:51
程序那里不对啊?帮帮看看,多谢!
wkman
4楼-- · 2020-01-28 00:52
应该是程序问题,没读到16bit数据?
proteldxp
5楼-- · 2020-01-28 04:39
级联吧?你去看看STC的技术文档,后面有的。
proteldxp
6楼-- · 2020-01-28 10:36
本帖最后由 proteldxp 于 2013-7-2 09:13 编辑

https://www.amobbs.com/forum.php?mod=attachment&aid=MTIyNzQwfGEyNDc3MzQ3ZGIxMGRhNjMwNDBjNmMxMWU1ZWM0OWM2fDE1Nzk5MzU4NzM%3D&request=yes&_f=.png
https://www.amobbs.com/forum.php?mod=attachment&aid=MTIyNzQxfGQwOWZjNDU2OGY0NThjMjJmZDkxYTUxNjMwY2EzMTM4fDE1Nzk5MzU4NzM%3D&request=yes&_f=.png

一周热门 更多>