/*******************************************************************************
********************************************************************************/
#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); //将保存数据的变量取反后返回
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
原理图请帮忙看看,多谢了
一周热门 更多>