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

📄 x5045p_drivers.c

📁 该压缩包内还有51单片机常用各类外设驱动C程序源码(128*64点阵屏
💻 C
字号:
#include "AT89S52.h"
#include "CONFIG.H"
#include "X5045P_Driver.h"
#include <intrins.h>


/************************************************************
				X5045_EEPROM 指令宏定义						*
************************************************************/
#define WREN    0x06				//写使能
#define WRDI    0x04				//写禁止
#define RSDR    0x05				//读状态寄存器
#define WRSR    0x01				//写状态寄存器
#define READ_L  0x03				//读_L命令
#define WRITE_L 0x02				//写_L命令
#define READ_H  0x0b				//读_H命令
#define WRITE_H 0x0a				//写_H命令

/************************************************************
				X5045_EEPROM 读缓冲与写缓冲变量定义			*
************************************************************/
uchar bdata WRITE_BUF,READ_BUF;
uchar bdata STATUS;
sbit STATUS_0=STATUS^0;
sbit WRITE_BUF_7=WRITE_BUF^7;
sbit READ_BUF_7=READ_BUF^7;

/************************************************************
				X5045_EEPROM 写数据子程序					*
************************************************************/
void Send_Dat(uchar temp)
{
uchar data i;
WRITE_BUF=temp;

for(i=0;i<8;i++)
{ 
  SCK=0;
  SI=WRITE_BUF_7;
  SCK=1;
  WRITE_BUF=_crol_(WRITE_BUF,1);
}
}

/************************************************************
				X5045_EEPROM 读数据子程序					*
************************************************************/
uchar Read_Dat(void)
{
uchar data i;
SO=1;
for(i=0;i<8;i++)
{ 
  SCK=0;
  READ_BUF_7=SO;
  SCK=1;
  READ_BUF=_crol_(READ_BUF,1);
}
return READ_BUF;
}

/************************************************************
				X5045_EEPROM 读状态子程序					*
************************************************************/
uchar Read_Status(void)
{
uchar data buf;
CS=1;
CS=0;
Send_Dat(RSDR);
buf=Read_Dat();
CS=1;
return buf;
}

/************************************************************
				X5045_EEPROM 写状态子程序					*
************************************************************/
void Write_Status(uchar temp)
{
CS=1;
CS=0;
Send_Dat(WREN);
CS=1;
CS=0;
Send_Dat(WRSR);
Send_Dat(temp);
CS=1;
do{
	STATUS=Read_Status();
  }
while(STATUS_0==1);
}



/************************************************************
				X5045_EEPROM 读_L存储器子程序(单元)		*
			格式:写READ_L+写8位地址+读8位数据				*
			 		add:地址								*
************************************************************/
uchar Read_L_EEPROM_Cell(uchar add)
{
uchar data buf;
CS=1;
CS=0;
Send_Dat(READ_L);
Send_Dat(add);
buf=Read_Dat();
CS=1;
return buf;
}

/************************************************************
				X5045_EEPROM 读_L存储器子程序(页)			*
			格式:写READ_L+写8位地址+读8位数据				*
			 		add:起始地址(16的整数倍)				*
					*dat:目标数组指针						*
					num:读取字节数(1~16)					*
************************************************************/
void Read_L_EEPROM_Page(uchar add,uchar *dat,uchar num)
{
uchar data i;
CS=1;
CS=0;
Send_Dat(READ_L);
Send_Dat(add);
for(i=0;i<num;i++)
    {
        *dat=Read_Dat();
         dat++;
    }
CS=1;
}

/************************************************************
				X5045_EEPROM 写_L存储器子程序(单元)			*
			格式:写WREN+写WRITE_L+写8位地址+写8位数据		*
			 		add:地址								*
					dat:传送数据							*
************************************************************/
void Write_L_EEPROM_Cell(uchar add,uchar dat)
{
CS=1;
CS=0;
Send_Dat(WREN);
CS=1;
CS=0;
Send_Dat(WRITE_L);
Send_Dat(add);
Send_Dat(dat);
CS=1;
do{
	STATUS=Read_Status();
  }
while(STATUS_0==1);
}

/************************************************************
				X5045_EEPROM 写_L存储器子程序(页)			*
			格式:写WREN+写WRITE_L+写8位地址+写8位数据		*
			 		add:起始地址(16的整数倍)				*
					*dat:数组指针							*
					num:传送字节数(1~16)					*
************************************************************/
void Write_L_EEPROM_Page(uchar add,uchar *dat,uint num)
{
uint data i;
CS=1;
CS=0;
Send_Dat(WREN);
CS=1;
CS=0;
Send_Dat(WRITE_L);
Send_Dat(add);
for(i=0;i<num;i++)
{
  Send_Dat(*dat);
  dat++;
}
CS=1;
do{
	STATUS=Read_Status();
  }
while(STATUS_0==1);
}

/************************************************************
				X5045_EEPROM 读_H存储器子程序(单元)		*
			格式:写READ_H+写8位地址+读8位数据				*
			 		add:地址								*
************************************************************/
uchar Read_H_EEPROM_Cell(uchar add)
{
uchar data buf;
CS=1;
CS=0;
Send_Dat(READ_H);
Send_Dat(add);
buf=Read_Dat();
CS=1;
return buf;
}

/************************************************************
				X5045_EEPROM 读_H存储器子程序(页)			*
			格式:写READ_H+写8位地址+读8位数据				*
			 		add:起始地址(16的整数倍)				*
					*dat:目标数组指针						*
					num:读取字节数(1~16)					*
************************************************************/
void Read_H_EEPROM_Page(uchar add,uchar *dat,uchar num)
{
uchar data i;
CS=1;
CS=0;
Send_Dat(READ_H);
Send_Dat(add);
for(i=0;i<num;i++)
    {
        *dat=Read_Dat();
         dat++;
    }
CS=1;
}

/************************************************************
				X5045_EEPROM 写_H存储器子程序(单元)			*
			格式:写WREN+写WRITE_H+写8位地址+写8位数据		*
			 		add:地址								*
					dat:传送数据							*
************************************************************/
void Write_H_EEPROM_Cell(uchar add,uchar dat)
{
CS=1;
CS=0;
Send_Dat(WREN);
CS=1;
CS=0;
Send_Dat(WRITE_H);
Send_Dat(add);
Send_Dat(dat);
CS=1;
do{
	STATUS=Read_Status();
  }
while(STATUS_0==1);
}

/************************************************************
				X5045_EEPROM 写_H存储器子程序(页)			*
			格式:写WREN+写WRITE_H+写8位地址+写8位数据		*
			 		add:起始地址(16的整数倍)				*
					*dat:数组指针							*
					num:传送字节数(1~16)					*
************************************************************/
void Write_H_EEPROM_Page(uchar add,uchar *dat,uint num)
{
uint data i;
CS=1;
CS=0;
Send_Dat(WREN);
CS=1;
CS=0;
Send_Dat(WRITE_H);
Send_Dat(add);
for(i=0;i<num;i++)
{
  Send_Dat(*dat);
  dat++;
}
CS=1;
do{
	STATUS=Read_Status();
  }
while(STATUS_0==1);
}











⌨️ 快捷键说明

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