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

📄 yj1302.c

📁 自己写的DS1302 的代码
💻 C
字号:
//lcd显示用的
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit t_clk=P1^2;
sbit t_io=P1^3;
sbit t_rst=P1^4;
sbit BIT0=ACC^0;
sbit BIT7=ACC^7;
uchar time1[7];
void inputbyte(uchar shuju);


//-------------------------液晶部分
sbit RS=P3^0;
sbit RW=P3^2;
sbit EN=P3^4;

uchar count,shi,fen,miao;

uchar code table[]="2008 7 24 week 1 ";
uchar code table1[]="  00:00:00     ";

void delay(uint z)

  {
        uint x,y;
     for(x=z;x>0;x--)
       for(y=120;y>0;y--);
  }

  void write_com(uchar com)
   {
     EN=0;
     RS=0;
     RW=0;
     P0=com;
     delay(5);
     EN=1;
     delay(5);
     EN=0;
    }
 void write_data(uchar date)
   {
     EN=0;
     RS=1;
     RW=0;
     P0=date;
     delay(5);
     EN=1;
     delay(5);
     EN=0;
   }


   void init()
   {
     uchar num;
     EN=0;
	 write_com(0x38);
	 write_com(0x0c);  //开显示
	 write_com(0x06);
	 write_com(0x01);  //清零

     write_com(0x80);   //给地址
	 for(num=0;num<16;num++)
      {
	   write_data(table[num]);
	    delay(5);
       }
	 write_com(0x80+0x40);//换行给地址
	 for(num=0;num<16;num++)
      {
	   write_data(table1[num]);
	     delay(5);
      }
   }


     void write_sfm(uchar addr, uchar dat)
   {
        uchar sh,ge;
		sh=dat/16;
		ge=dat%16;
        write_com(0x80+0x40+addr);
	   write_data(0x30+sh);
	   write_data(0x30+ge);
   }
//-----------------------------



void inputbyte(uchar shuju)//对ds1302输入操作
{
 uchar i;
 ACC=shuju;
 t_rst=1;//启动对1302允许传送
 for(i=8;i>0;i--)
   {
     t_io=BIT0;//准备送最低位数据
     t_clk=0;
     t_clk=1;//产生一个上升沿,写人数据
     ACC=ACC>>1;
   }
}
uchar outputbyte()//对ds1302进行输出操作
{
 uchar i;
 t_rst=1;//启动对1302允许传送

 for(i=8;i>0;i--)
   {
     ACC=ACC>>1;//将接受到的数据移到最低位
     t_io=1;//准备
     t_clk=1;
     t_clk=0;//产生一个下降沿,读出数据
     BIT7=t_io;//把数据给最高位
   }
return ACC;
}
void wr_1302(uchar addr,uchar shuju)
{//将指令或数据(shuju)写入对应寄存器(addr)
  t_rst=0;
  t_clk=0;
  t_rst=1;
inputbyte(addr);//输入地址
inputbyte(shuju);//输入数据
t_rst=0;
t_io=1;
}
uchar re_1302(uchar addr)
{// 读出对应寄存器的内容
 uchar dat1;
  t_rst=0;
  t_clk=0;
  t_rst=1;
  inputbyte(addr);
  dat1=outputbyte();
  t_rst=0;
  return (dat1);
}

void get_1302(uchar time[])
{
  uchar i;
  uchar addr=0x81;
  for(i=0;i<5;i++)
  {
    time[i]=re_1302(addr);
   /* j=time[i];//lcd显示用的
    j1=j/16;//
    j=j%16;//
    j=j1*10+j;//
    time[i]=j;//*/
    addr+=2;
  }
}


void main()
{
uchar shi=0,fen=0,miao=0;
wr_1302(0x8e,0x00);//取消写保护
wr_1302(0x80,0x50);//初始化秒
wr_1302(0x82,0x59);//分
wr_1302(0x84,0x01);//小时
wr_1302(0x8e,0x80);//写保护

 init();

 while(1)
	{
	get_1302(time1);
       
	shi=time1[2];//测试小时
        write_sfm(2,shi);

	fen=time1[1];//分钟
        write_sfm(5,fen);

	miao=time1[0];//秒
        write_sfm(8,miao);
        

	}
}

⌨️ 快捷键说明

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