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

📄 x5045.c

📁 Keil C51完整的128X64LCD显示的电子打铃仪代码,内含DS1302X5045等操作代码
💻 C
字号:
#define X5045_H
#include "config.h"
//--------------------------------------------------------------------------------------
void flash()  //延时子程序
{
   _NOP_();
   _NOP_();
}

//基本操作函数
void STAX(void)//;启动X25045指令
{   cs5045=1;
	flash();
	sck=0;
	flash();
    cs5045=0;
	flash();
}
void ENDX(void)//;结束X25045指令
{   sck=0;
	flash();
    cs5045=1;
	flash();
	sck=1;
    flash();
}

#ifdef MYUSE
//2)写状态寄存器子程序
void write_dogstate(uint8 wr)
{
    WrReady();

    write_enable();  /*写使能允许*/ 
	sck=0;
	cs5045=1;
	flash();
    cs5045=0;
    write_dog(WRSR); /*WRSR,写状态寄存器*/
    write_dog(wr);  /*写状态字节*/
    sck=0;
    cs5045=1;
}
void clear_dog(void)//1)看门狗定时器复位子程序
{
    cs5045=1;
	flash();
    cs5045=0;
	flash();
    cs5045=1;
}
#endif
//2)读1字节数据子程序
uint8 read_dog(void)
{
    uint8 n;
    uint8 rd;

    for(n=8;n>0;n--)
	{
        sck=1;
		flash();
        sck=0;

        if(so==1)
            rd|=0x01;
        else
            rd&=0xFE;

        if(n>1)rd=rd<<1;
	}

    return rd;
}

//3)写1字节数据子程序
void write_dog(uint8 wr)
{
    uint8 n;
    for(n=8;n>0;n--)
	{    
    	sck=0;

        if(wr&0x80)
            si=1;
        else 
            si=0;

        sck=1;
        wr=wr<<1;
	}
}

//4)写使能允许子程序
void write_enable(void)
{
    STAX();
	sck=0;
    cs5045=0;
    write_dog(WREN);/*写使能锁存器*/
    sck=0;
    cs5045=1;
	ENDX();
}

//读写状态寄存器或E2PROM操作函数
//1)读状态寄存器子程序
uint8 read_dogstate(void)
{
    uint8 status; 
    
	sck=0;    
    cs5045=0;
    write_dog(RSDR);    /*RSDR,读状态寄存器*/
    status=read_dog();    /*读出状态字节*/
    sck=0;
    cs5045=1;

    return status;         
}

void WrReady()
{
	uint16 i=0;
	uint8 status;

	do
	{
		status=read_dogstate();
		i++;
	}while(status&0x01 && i<MAX_POLL);
}



//3)读单元指定位置1字节数据子程序
uint8 EepromRead(uint16 addr)
{
    uint8 com;

    STAX();

    DPTR=addr;
    sck=0;
    cs5045=0;
    com=0x03;

    if(DPH&0x01)com|=0x08;

    write_dog(com);  /*READ,读数据命令*/
    write_dog(DPL);  /*写数据起始地址*/
    com=read_dog();  /*读数据*/
    sck=0;
    cs5045=1;
    ENDX();
    return com;
}

//4)向单元指定位置写1字节数据子程序
void EepromWrite(uint16 addr,uint8 wr)
{
    uint8 status;

	WrReady();

    write_enable();  /*WREN,写使能允许*/ 

	DPTR=addr;
    sck=0;
    cs5045=0;
    status=0x02;

    if(DPH&0x01)status|=0x08;

    write_dog(status);    /*WRITE,写数据命令*/

    write_dog(DPL);    /*写数据起始地址*/

    write_dog(wr);    /*写数据*/
    
	sck=0;

    cs5045=1;
}

⌨️ 快捷键说明

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