74hc165接收函数支持联级
/**************************************************** 74hc165intn();//初始化
74hc165satin();//开始输入
接收单级数据:dat=inpute();//接收返回值到dat
使用数组保存多级:hc165pinsav(d)//d为接收个数,联级个数。
******************************************************/ #ifndef __74hc165_H__
#define __74hc165_H__
#include "A T89X52.h"
#include <intrins.h>
#include<stdio.h>
unsigned char hc165insav[4];//保存接收数据联极
sbit ck=P1^1;//时钟2引脚。
sbit sd=P1^0;//数据9引脚。
sbit sh=P1^2;//开始输入1引脚。
//SI联级10引脚,连接下级的9引脚。
/****************************************************
五个机器周期
******************************************************/ void nop()
{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
/****************************************************
74hc165初始化
******************************************************/
void hc165intn() //初始化
{sh=1;
sd=1;
ck=1;
}
/****************************************************
74hc165开始输人
******************************************************/ void hc165satin()
{
sh=0; //起始接收脉冲开始接收。
sh=1;
}
/****************************************************
74hc165接收函数
******************************************************/ unsigned char hc165inpute() //接收扩展8位函数{unsigned char i,mm;
for(i=0;i<8;i++)
{ mm=(mm<<1)|sd;
ck=0;
nop();
ck=1; }
return mm;
}
/****************************************************
74hc数165保存
******************************************************/
hc165pinsav(unsigned char d)
{unsigned char i;
for(i=0;i<d;i++)
{hc165insav[i]=hc165inpute();
}
}
#endif
74HC595程序支持联级
/**************************************************** 74HC595intn();
单级数据发送:74HC595Write(要发送的数);
数组发送多联级数:hc595Writef(ms)//ms为发送个数。
4HC595out();开始输出
** ****************************************************/
#ifndef __74HC595_H__
#define __74HC595_H__
#include "A T89X52.h"
#include <intrins.h>
#include<stdio.h>
unsigned char hc595sen[5];//联级发送
sbit scl=P3^4;//时钟信号11号引脚
sbit scp=P3^2 ;//数据线14号引脚
sbit sda=P3^3; //锁存12号引脚
//Q'7联级9引脚,连接下级的14引脚。
/****************************************************
起始信号放开总线
******************************************************/ void hc595intn() //595发送初始化
{
scl=0;//时钟信号11号引脚
sda=1;//数据线14号引脚
scp=0; //锁存12号引脚
}
/****************************************************
五个机器周期
******************************************************/ void snop()
{_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();}
/****************************************************
74HC595开始输出
******************************************************/
void hc595out()
{
scp=0;
snop();
scp=1;
snop();
scp=0;
hc595intn();
}
/**************************************************** 74hc595发送数据8位数据发送
******************************************************/ hc595Write(unsigned char input) //发送input
{unsigned char temp;
for(temp=0;temp<8;temp++)
{sda=(bit)(input&0x80);
input=input<<1;
snop();
scl=1;
snop();
scl=0;
nop();
}
}
/**************************************************** 74hc595发送数据ms个联级ms个数据
******************************************************/ hc595Writef(unsigned char ms) //发送ms个数据
{
unsigned char temp;
for(temp=0;temp<ms;temp++)
{ hc595Write(hc595sen[temp]) ;
}
}
#endif。