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

📄 x5045.c

📁 C51 LCD 显示程序非常具有参考价值
💻 C
字号:
/*-------------------------------------------------------
X5045源程序

--------------------------------------------------------*/
#include "regx52.h"
#include "x5045.h" 

sbit SO=P2^5;
sbit SI=P2^4;
sbit SCK=P2^3;

//片选择信号定义
#define		RAMCS		0x00
#define		LCDCS1		0x01
#define		LCDCS2		0x02
#define		LCDCS3		0x03
#define		EEPCS		0x04//DOGCS
#define		ROMCS		0x05
#define		KEYCS		0x06
#define		NOSET		0x07

//25045可编程看门狗监控EEPROM指令集
#define WREN 0x06 //00000110 //设置写使能锁存器(允许写操作)
#define WRDI 0x04 //00000100 //复位写使能锁存器(禁止写操作)
#define RDSR 0x05 //00000101 //读状态寄存器
#define WRSR 0x01 //00000001 //写状态寄存器(块锁定)
#define READ 0x03 //00000011 //从开始于所选地址的存储器列阵中读出数据
#define WRTE 0x02 //00000010 //把数据写入开始于所选地址的存储器阵列中,1至4字节

extern void p1tune(unsigned char temp);
//#pragma save
//#pragma OT(8,size)
//写使能子程序
void wren_dog(void)
{      
	
	SCK=0;//
	p1tune(EEPCS);//CS=0
	Write8(WREN);//
	SCK=0;//for debug
	p1tune(RAMCS);//CS=1
}
/*
//写禁止子程序
void wrdi_dog(void)
{
	unsigned char data i;
	SCK=0;
	p1tune(EEPCS);
	i++;
	Write8(WRDI);
	SCK=0;
	p1tune(RAMCS);

}
*/
//写状态寄存器
void wrsr_dog(unsigned char status_reg)
{
	
	while(rdsr_dog()&0x01==1) ;
	wren_dog();//使能“写”
	
	p1tune(EEPCS);
	
	Write8(WRSR);
	Write8(status_reg);
	
	p1tune(RAMCS);
	wip_poll();
}


//读状态寄存器
unsigned char rdsr_dog(void)
{
	// unsigned char com=0x05;//RDSR;
	unsigned char data cTemp;

	SCK=0;
	p1tune(EEPCS);
	Write8(RDSR);
	cTemp=Read8();
	
	SCK=0;
	p1tune(RAMCS);
	return(cTemp);
}

//字节读
unsigned char byte_read(bit HiHalf,unsigned char Addr)
{
	unsigned char data EepromData,ReadInstruct=0x00;
	//while(rdsr_dog()&0x01==1) {}
	wren_dog();
		
	SCK=0;
	p1tune(EEPCS);
	SO=1;
	SI=1;
	if(HiHalf)
		ReadInstruct=0x08;
	//
	ReadInstruct|=READ;//READ;
	Write8(ReadInstruct);
	Write8(Addr);
	EepromData=Read8();
	SCK=0;
	p1tune(RAMCS);
	return(EepromData);
}
//字节写

void byte_write(bit HiHalf,unsigned char Addr,unsigned char Data)
{
	unsigned char data WriteInstuct=0x00;
	//while(rdsr_dog()&0x01==1) {}
	wren_dog();
	SCK=0;
	p1tune(EEPCS);
	//SO=1;
	//SI=1;
	if(HiHalf)
		WriteInstuct=0x08;
	WriteInstuct|=WRTE;//WRTE;
	Write8(WriteInstuct);
	Write8(Addr);
	Write8(Data);
	p1tune(RAMCS);
	wip_poll();
}

//检验写操作是否结束。
unsigned char wip_poll(void)
{
	unsigned int i;
	unsigned char wip;
	for(i=0x1ff;i>0;i--) 
	{
		wip=rdsr_dog();
		wip&=0x01;
		if(wip==0) break;
	}
	return(wip);

}

//单字节指令或数据写入X25045
//在SI线上输入的数据在SCK的上升沿被锁存。
void Write8(unsigned char byt)
{
	unsigned char data i;
		   
	for(i=0;i<8;i++)
	{	if((byt&0x80)==0)//
			SI=0;//
		else//
			SI=1;// //
		SCK=0; 
		SCK=1;
		byt=byt<<1; 
	}

}
//单字节数据从X25045读到单片机
//数据由SCK的下降沿输出到SO线上。
unsigned char Read8(void)
{
	unsigned char i,j;
	unsigned char byt;
	bit bTemp;
	
	for(i=0;i<8;i++)
	{
		SCK=1;
		j++;
		SCK=0;

		bTemp=SO; 
				
		if(bTemp)
			byt|=0x01;
		if(i<7)
			byt=byt<<1; 
	
	}

	return (byt);
}

//#pragma restore
 

⌨️ 快捷键说明

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