⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24c01.h

📁 24C02和12864显示的电子密码锁设计
💻 H
字号:
/************************************************************************

                   函数库名称:密码保护部分 ,将新密码写入IIC器件实时保护 

                  设计者: 05级新本一班  易龙明 	      08,8,12 
************************************************************************/      
#ifndef _24C01_h_
#define _24C01_h_

#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

#define AddWr 0xa0
#define AddRd 0xa1
#define _Nop _nop_

bit ack;
sbit SDA=P2^1;
sbit SCL=P2^0;

//*********************************************************************驱动程序 
void Start()				  //启动IIC器件 
{
	SDA=1;
	_Nop();
	SCL=1;
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	SDA=0;
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	SCL=0;
	_Nop();
	_Nop();
}

void Stop()				   //停止IIC器件 
{
    SDA=0;
    _Nop();
	SCL=1;
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	SDA=1;
	_Nop();
    _Nop();
	_Nop();
	_Nop();
	_Nop();
}

void Cack(bit a)			//检查IIC器件的回复 
{	 
    if(a==0)SDA=0;
    else SDA=1;
	_Nop();
	_Nop();
	_Nop();
	SCL=1;
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	SCL=0;
	_Nop();
	_Nop();
}

void Send(uchar c)			   //向IIC器件发送一个字节的内容 ,并标志回复位,若有回复,ack=1
{
	uchar i;
	for(i=0;i<8;i++)
	{
		if(c&0x80)SDA=1;
		else SDA=0;
		_Nop();
		SCL=1;
		_Nop();
	    _Nop();
		_Nop();
		_Nop();
		_Nop();
		SCL=0;
	    c=c<<1;
	}
	_Nop();
	_Nop();
	SDA=1;
	_Nop();
	_Nop();
	SCL=1;
	_Nop();
	_Nop();
	_Nop();
	if(SDA==1)ack=0;
	else ack=1;
	SCL=0;
	_Nop();
	_Nop();
}

bit SendB(uchar *s,uchar Address,uchar Number)		 //向IIC器件发送N个字节   ,发送成功,返回1
{
	uchar i;
	Start();
	Send(AddWr);
	if(ack==0)return(0);
	Send(Address);
	if(ack==0)return(0);
	for(i=0;i<Number;i++)
	{
        Send(*s);
	    if(ack==0)return(0);
		s++;
     }
	Stop();
	return(1);
}

uchar Read()						//从IIC器件读一个字节的内容并返回所读的数据 
{
	uchar temp;
	uchar i;
	temp=0;
	SDA=1;
	for(i=0;i<8;i++)
	{	  
	    _Nop();
		SCL=0;
	    _Nop();
		_Nop();
		_Nop();
		_Nop();
		_Nop();
		SCL=1;
		_Nop();
		_Nop();
		temp=temp<<1;
		if(SDA==1)temp++;
		_Nop();
		_Nop();}
		SCL=0;
		_Nop();
		_Nop();
		return(temp);
}


bit ReadB(uchar *s,uchar Address,uchar Number)	   //从IIC器件读出N个字节,并将所读的数据存入数组 
{
	uchar i;
	Start();
    Send(AddWr);
	if(ack==0)return(0);
	Send(Address);
	if(ack==0)return(0);
	Start();
	Send(AddRd);
	if(ack==0)return(0);
	for(i=0;i<Number;i++)
	{
		*s=Read();
		Cack(0);
		s++;
	}
	*s=Read();
	Cack(1);
	Stop();
	return(1);
}
//**************************************************
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -