微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > DS1302底层协议指什么?红色字体标的程序是什么意思?

DS1302底层协议指什么?红色字体标的程序是什么意思?

时间:10-02 整理:3721RD 点击:
/**************** DS1302 *************************************************************/
//设置1302的初始时间
void Init_1302(void){//(2008年9月11日23时59分35秒星期四)*/
        write_clock(0x8e,0x00);//允许写操作
        write_clock(0x8c,0x08);//08年
        write_clock(0x8a,0x04);//星期
        write_clock(0x88,0x09);//月
        write_clock(0x86,0x11);//日
        write_clock(0x84,0x23);//小时
        write_clock(0x82,0x59);//分钟
        write_clock(0x80,0x35);//秒
        write_clock(0x90,0xa5);//充电
        write_clock(0x8c,0x08);//重启
       
        write_clock(0x8e,0x80);//禁止写操作
}
/*****************************************************************************/
//DS1302写数据(底层协议)
void write_clock(unsigned char ord, unsigned char dd){
        clock_clk=0;
        clock_Rst=0;
        clock_Rst=1;
        clock_out(ord);
        clock_out(dd);
        clock_Rst=0;
        clock_clk=1;
}
/*****************************************************************************/
//1302驱动程序(底层协议)
void clock_out(unsigned char dd){
        ACC=dd;
        clock_dat=a0; clock_clk=1; clock_clk=0;
        clock_dat=a1; clock_clk=1; clock_clk=0;
        clock_dat=a2; clock_clk=1; clock_clk=0;
        clock_dat=a3; clock_clk=1; clock_clk=0;
        clock_dat=a4; clock_clk=1; clock_clk=0;
        clock_dat=a5; clock_clk=1; clock_clk=0;
        clock_dat=a6; clock_clk=1; clock_clk=0;
        clock_dat=a7; clock_clk=1; clock_clk=0;
}
/*****************************************************************************/
//DS1302写入字节(底层协议)
unsigned char clock_in(void){
        clock_dat=1;
        a0=clock_dat;
        clock_clk=1; clock_clk=0; a1=clock_dat;
        clock_clk=1; clock_clk=0; a2=clock_dat;
        clock_clk=1; clock_clk=0; a3=clock_dat;
        clock_clk=1; clock_clk=0; a4=clock_dat;
        clock_clk=1; clock_clk=0; a5=clock_dat;
        clock_clk=1; clock_clk=0; a6=clock_dat;
        clock_clk=1; clock_clk=0; a7=clock_dat;
        return(ACC);
}
/*****************************************************************************/
//DS1302读数据(底层协议)
unsigned char read_clock(unsigned char ord){
        unsigned char dd=0;
        clock_clk=0;
        clock_Rst=0;
        clock_Rst=1;
        clock_out(ord);
        dd=clock_in();
        clock_Rst=0;
        clock_clk=1;
        return(dd);
}
/*****************************************************************************/
//向LCM中填写 年 数据
void lcm_w_yy(void){
        if(read_clock(0x8d) != yy){
                yy = read_clock(0x8d);
                write_com(0x90);
        hzkdis("20");
            write_com(0x91);
                write_data((yy/16)+0x30);       
                write_data(yy%16+0x30);
        write_com(0x92);
                hzkdis("年");
}        }
/*****************************************************************************/
//向LCM中填写 月 数据
void lcm_w_mo(void){
        if(read_clock(0x89) != mo){
                mo = read_clock(0x89);
                write_com(0x93);
                write_data((mo/16)+0x30);       
                write_data(mo%16+0x30);
                write_com(0x94);
                hzkdis("月");
        lcm_w_yy();//刷新 日
}        }
/*****************************************************************************/
//向LCM中填写 日 数据
void lcm_w_dd(void){
        if(read_clock(0x87) != dd){
                dd = read_clock(0x87);
                write_com(0x95);
                write_data((dd/16)+0x30);
                write_data(dd%16+0x30);
                write_com(0x96);
                hzkdis("日");
                lcm_w_mo();//刷新 小时
                               
}        }
/*****************************************************************************/
//星期处理并送入LCM的指定区域
void lcm_w_xq(void){
        unsigned char sel;
    if(read_clock(0x8b) != xq){
        write_com(0x88);
        hzkdis("星期");
        xq = read_clock(0x8b);
        sel = xq%16; //字节低4位的BCD码放入sel
        write_com(0x8a);//写入指定区域
        if(sel==7)  {hzkdis("日");}    //
          if(sel==6)  {hzkdis("六");}    //
          if(sel==5)  {hzkdis("五");}    //
          if(sel==4)  {hzkdis("四");}    //
          if(sel==3)  {hzkdis("三");}    //
          if(sel==2)  {hzkdis("二");}    //
          if(sel==1)  {hzkdis("一");}    //星期一
} }
/*****************************************************************************/
//向LCM中填写 小时 数据
void lcm_w_hh(void){
     if(read_clock(0x85)!=hh){
                hh = read_clock(0x85);
                write_com(0x8c);
                write_data((hh/16)+0x30);
                write_data(hh%16+0x30);
        lcm_w_dd();//刷新 分钟
        lcm_w_xq();//刷新 分钟
                               
}        }
/*****************************************************************************/
//向LCM中填写 分钟 数据
void lcm_w_mm(void){
  if(read_clock(0x83)!=mm){
        mm = read_clock(0x83);
        write_com(0x8d);       
        write_data(0x3a);          //":"
        write_data((mm/16)+0x30);
        write_data(mm%16+0x30);
        write_data(0x3a);         //":"
    lcm_w_hh();//刷新 秒
       
}   }
/*****************************************************************************/
//向LCM中填写 秒 数据
void lcm_w_ss(void){
       if(read_clock(0x81)!=ss){
                ss = read_clock(0x81);        //更新数据
                write_com(0x8f);                //秒值在LCM上的写入位置
                write_data((ss/16)+0x30);        //写十位               
                write_data(ss%16+0x30);        //写个位
        lcm_w_mm();//刷新 秒
        LED=~LED;
               
/*********DS18B20************************************************************/  
        Read_18B20();
        write_com(0x30);    //选择8bit数据流
        i=ResultTemperatureH/10;
        j=ResultTemperatureH-(i*10);
        b=ResultTemperatureLH/10;
        write_com(0x9D);
        write_data(i|0x30);
        write_data(j|0x30);
        write_data(0x2E);
        write_data(b|0x30);
          
}     }

就是根据DS1302的通讯协议来操作读写啊。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top