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

📄 text1.c

📁 利用DS3102时钟芯片跟12864液晶制作简单的多功能万年历
💻 C
字号:
		
		
		
		
			void ds1302_write(unsigned char ucdat)    //写入动作
{
    unsigned char i;
    for(i=8;i>0;i--){
        DS1302_IO = (bit)(ucdat & 0x01);
        DS1302_SCLK = 1;
        _nop_();
        DS1302_SCLK = 0;
        ucdat >>= 1;                //重要 !!!送数据出去时,移为动作要在后面!!!
    }
   
}

unsigned char ds1302_read(void)         //读出动作
{
    unsigned char i;
    unsigned char ucdat=0;
    for(i=8;i>0;i--)
    {
        DS1302_IO=1;
        ucdat >>= 1;                 // 读入数据时,移为动作要在前面!!!!!!!!

        if(DS1302_IO)ucdat|=0x80;
        DS1302_SCLK = 1;
        _nop_();
        DS1302_SCLK = 0;
    }
    return(ucdat);
}
void ds1302_write_One(unsigned char address, unsigned char ucdat)     //向特定地址写入数据 
{                                                         //每一次要写之前要去掉写保护 ,写完要恢复保护
    DS1302_RST = 0;                                      
    DS1302_SCLK = 0;
    DS1302_RST = 1;
    ds1302_write(address);    
    ds1302_write(ucdat);       
    DS1302_SCLK = 1;
    DS1302_RST =0;
    return;
}

unsigned char ds1302_read_One(unsigned char address)             //向特定地址读出数据
{
    unsigned char ucdat;
    DS1302_RST=0;
    DS1302_SCLK=0;
    DS1302_RST=1;

    ds1302_write(address);     
    ucdat = ds1302_read();   
    DS1302_SCLK = 1;
    DS1302_RST =0;
    return(ucdat);
}

void ds1302_write_str(uchar *Data,uchar size,uchar RAM_DS1302) //RAM_DS1302为0XFE时,写入RAM;为0XBE时写入DS1302
{    uchar i;                                  
    ds1302_write_One(0x8e,0);                                     //去掉写保护!!!!!!!!!!!!
    DS1302_RST=0;DS1302_SCLK=0;DS1302_RST=1;    
 ds1302_write(RAM_DS1302);
 for(i=0;i<size;i++)                        // 当写入的时DS1302的时间是,一定要一次性写如8字节 即SIZE为8!!!!
     {ds1302_write( *(Data+i) ); }
 DS1302_RST=0; DS1302_SCLK=1;
    ds1302_write_One(0x8e,0x80);          //恢复写保护!!!!
}


void ds1302_read_str(uchar *Data,uchar size,uchar RAM_DS1302) //RAM_DS1302为0XFF时读出RAM;为0XBF时读出DS1302 
{  uchar i ;                                  //秒分时日月周年 7个;0~30 31个内存 在这里把30作为密码存放!!!!
   DS1302_RST=0;DS1302_SCLK=0;DS1302_RST=1;
 ds1302_write(RAM_DS1302);
 for(i=0;i<size;i++)
     {*(Data+i)= ds1302_read(  ); }
 DS1302_RST=0; DS1302_SCLK=1;
}


 

void Init_ds1302()                //当写完了数据后,要恢复写保护 ds1302_write_One(0x8e,0x80) 
{  uchar i;
   ds1302_write_One(0x8e,0);      //去掉写保护!!!!!!!
   ds1302_write_One(0x90,0xa5);   //启用一个二极管 启用2K的电阻 进行充电
   ds1302_write_One(0x8e,0x80);                                 //恢复写保护!!!!!
   ds1302_write_One(0x80,0x80);   //初始化后 经过试验不知到为什么不能马上写入一连串的数据或者读出来
   i=ds1302_read_One(0x81);       //要先择行一次 单字节的写入和读出 之后才能正常的进行多字节的读/写操作 !!!!!!!
}

⌨️ 快捷键说明

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