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

📄 24ceprom.c

📁 这是液晶的操作源代码,希望对做这个工作的朋友有一定的帮助
💻 C
字号:
/*******************************************
*	文件名	:	24CEPROM.C
*	功能	:	24C系列EPROM读写程序
*	占用资源:	两个IO口
*	程序员	:	wyl(wyl-e@163.com)
*	日期	:	2007.07
*	包含文件:	24CEPROM.H(见本文件结尾处)
*	说明	:	
	  Table	:	Description	 RomSize
				EPROM24C01	 128
				EPROM24C02	 256
				EPROM24C04	 512
				EPROM24C08	 1024
				EPROM24C16	 2048
********************************************/

#include<_REG52_.H>
#include"24CEPROM.H"

/******************************************/
#define	SETB_SDA	SDA_EPROM=1;_nop_();_nop_()
#define	CLR_SDA		SDA_EPROM=0;_nop_();_nop_()

#define	SETB_SCK	SCK_EPROM=1;_nop_();_nop_()
#define	CLR_SCK		SCK_EPROM=0;_nop_();_nop_()	

#define	WAIT_FOR_ACK	_nop_()		  //等待时钟周期.
/*******************************************/

			  
/*******************************************
* 函数功能 : 启动EPROM
* 入口参数 : (void)
* 返回值   : (void)
********************************************/
void	START_EPROM(void)
	{
	   	CLR_SCK;		
		SETB_SDA;
		SETB_SCK;
		CLR_SDA;
		CLR_SCK;		
	}

/*******************************************
* 函数功能 : 停止EPROM
* 入口参数 : (void)
* 返回值   : (void)
********************************************/
void	STOP_EPROM(void)
	{
		CLR_SCK;
		CLR_SDA;
		SETB_SCK;
		SETB_SDA;
		CLR_SCK;	
	}

/*******************************************
* 函数功能 : 写字节到EPROM
* 入口参数 : (uchar)
* 返回值   : (bit)
********************************************/
static bit WriteByte_EPROM(uchar	byte_dat)
	{
		uchar	dat,i,j=255;
		dat	=	byte_dat;
		for(i=0;i<8;i++)
			{
				CLR_SCK;				
				if(dat&0x80){SETB_SDA;}
					else	{CLR_SDA;}				
			   	SETB_SCK;
				dat<<=1;
			}
		CLR_SCK;
		SETB_SDA;		
		SETB_SCK;		
		while((SDA_EPROM)&&(j>10))
			{	
				#ifdef WAIT_FOR_ACK
				WAIT_FOR_ACK;				
				#endif
				j--;				
			}
		CLR_SCK; 
		if(j>10)	return 	1;		//OK
		else		return	0;		//ERROR	
	}

/*******************************************
* 函数功能 : 从EPROM读一个字节
* 入口参数 : (void)
* 返回值   : (uchar)
********************************************/
static uchar ReadByte_EPROM(void)
	{
		uchar	dat,i;
		CLR_SCK;
		SETB_SDA;
		for(i=0;i<8;i++)
			{
				dat<<=1;
				CLR_SCK;
				SETB_SCK;
				if(SDA_EPROM)dat+=1;
			}
		CLR_SCK;		
		SETB_SDA;
		SETB_SCK;
		return	dat;
	}

/*******************************************
* 函数功能 : 写一个字节到EPROM指定地址.
* 入口参数 : (uchar dat,uint addr)
* 	返回值 : (bit)
* 	  说明 : 连续执行本函数时中间应该有10毫秒
			 的延时.以待ROM内部操作完毕.	 
********************************************/
bit	WriteByteToEPROM(uchar byte,uint f_add)
	{
		uchar	addr;
		uchar	page;
		bit		ack;		
		page = (uchar)(f_add/256);
		addr = (uchar)(f_add%256);
		page <<= 1;
		page &= 0x0E;
		START_EPROM();
		WriteByte_EPROM(0xA0|page);
		WriteByte_EPROM(addr);
		ack=WriteByte_EPROM(byte);
		STOP_EPROM();
		return	ack;
	}

/*******************************************
* 函数功能 : 从EPROM的指定地址读取一个字节
* 入口参数 : (uint  addr)
* 返回值   : (uchar dat)
********************************************/
uchar	ReadByteFromEPROM(uint f_add)
	{
		uchar	addr,dat;		
		uchar	page;		
		page = (uchar)(f_add/256);
		addr = (uchar)(f_add%256);
		page <<= 1;
		page &= 0x0E;
		START_EPROM();
		WriteByte_EPROM(0xA0|page);
		WriteByte_EPROM(addr);
		START_EPROM();
		WriteByte_EPROM(0xA1|page);			
		dat=ReadByte_EPROM();
		STOP_EPROM();
		return	dat;
	}
/*******************************************
* 函数功能 : 从EPROM的指定地址进行读取,获得应得信号
* 入口参数 : (uint  addr)
* 返回值   : (uchar dat)
********************************************/ 
bit	ReadACKFromEPROM(uint f_add)
	{
		uchar	addr;
		bit 	ack;		
		uchar	page;		
		page = (uchar)(f_add/256);
		addr = (uchar)(f_add%256);
		page <<= 1;
		page &= 0x0E;
		START_EPROM();
		ack = WriteByte_EPROM(0xA0|page);
		/*
		WriteByte_EPROM(addr);
		START_EPROM();
		ack=WriteByte_EPROM(0xA1|page);			
		dat=ReadByte_EPROM();
		*/
		STOP_EPROM();
		return	ack;
	}

/******************THE END*********************/


⌨️ 快捷键说明

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