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

📄 1302.c

📁 可以实现多路数据采集和传输系统
💻 C
字号:
#include <reg52.h>
#define uchar unsigned char 
sbit clock_clk =P1^5;         //与硬件相关的连线  clk为DS1302的时钟信号线
sbit clock_dat=P1^6;        //DAT为DS1302的I/O数据线
sbit clock_Rst =P1^7;         //RST为DS1302的RST信号线

sbit a0   = ACC ^ 0;
sbit a1   = ACC ^ 1;
sbit a2   = ACC ^ 2;
sbit a3   = ACC ^ 3;
sbit a4   = ACC ^ 4;
sbit a5   = ACC ^ 5;
sbit a6   = ACC ^ 6;
sbit a7   = ACC ^ 7;
sbit key1=P1^2;

sbit key2=P1^3;
sbit key4=P1^5;
uchar set;
uchar j0,j1,j2,j3,j4,j5,j6,j7,k0,k1,k2,k3,k4,k5,k6,k7;
uchar code time[] = {0x00,0x10,0x7,0x1,0x1,0x01,0x07};
uchar year,month,day,week,hour,min,sec;
/****************************函数定义**************************************/

/******************************************************************/
/* 函数名:write(address);
/* 参  数:地址/数据字节
/* 功  能:用于向DS1302输入地址或数据信息
/******************************************************************/
void clock_out(unsigned char dd){ //write ds1302
 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;
}
/*****************************************************************************/
unsigned char clock_in(void){  //read ds1302
 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);
}
/*****************************************************************************/

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);
}
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;
}
void Init_1302(void){      //(2000年1月1日00时00分00秒星期一)
uchar i;
write_clock(0x8e,0x00);//允许写操作
 for(i=0;i<7;i++){
 write_clock(0x80+i+i,time[i]);
}

 write_clock(0x90,0xa5);//充电 
 write_clock(0x8e,0x80);//禁止写操作
 
}
 void delay0(uchar x){
 uchar i,j;
 for(i=0;i<x;i++)
   for(j=0;j<125;j++);
}

uchar DeToBCD(uchar DE){
    return (DE/10)*16+DE%10;
}
time_set(){
  if(!key1){
 delay0(20);
  if(!key1){
   set++;
 if(set == 8){
  set = 0;
  }
  }while(!key1);
 }
 if(set == 1){//秒
 write_clock(0x8e,0x00);
  if(!key2){
    delay0(20);
    if(!key2){
    j0++;
     if(j0==59){
      j0=0;
      }
     }
     while(!key2);
    } 
 k0 = DeToBCD(j0);
  write_clock(0x80,0+k1);
  write_clock(0x8e,0x80);
  }
  if(set == 2){//分
  write_clock(0x8e,0x00);
  if(!key2){
        delay0(20);
         if(!key2){
          j1++;
          if(j1==59){
          j1=0;
           }
          }
         while(!key2);
         } 
 k1 = DeToBCD(j1);
  write_clock(0x82,0+k1);
  write_clock(0x8e,0x80);
  }
   if(set == 3){//时
  write_clock(0x8e,0x00);
  if(!key2){
        delay0(20);
         if(!key2){
          j2++;
          if(j2==24){
          j2=1;
           }
          }
         while(!key2);
         } 
  k2= DeToBCD(j2);
  write_clock(0x84,0+k2);
  write_clock(0x8e,0x80);
  }
   if(set == 4){//日
  write_clock(0x8e,0x00);
  if(!key2){
        delay0(20);
         if(!key2){
          j3++;
          if(j3==31){
          j3=1;
           }
          }
         while(!key2);
         } 
 k3 = DeToBCD(j3);
  write_clock(0x86,0+k3);
  write_clock(0x8e,0x80);
  }
   if(set == 5){//月
  write_clock(0x8e,0x00);
  if(!key2){
        delay0(20);
         if(!key2){
          j4++;
          if(j4==12){
          j4=1;
           }
          }
         while(!key2);
         } 
 k4 = DeToBCD(j4);
  write_clock(0x88,0+k4);
  write_clock(0x8e,0x80);
  }
   if(set == 6){//周
  write_clock(0x8e,0x00);
  if(!key2){
        delay0(20);
         if(!key2){
          j5++;
          if(j5==7){
          j5=1;
           }
          }
         while(!key2);
         } 
 k5 = DeToBCD(j5);
  write_clock(0x8a,0+k5);
  write_clock(0x8e,0x80);
  }
    if(set == 7){//年
  write_clock(0x8e,0x00);
  if(!key2){
        delay0(20);
         if(!key2){
          j6++;
          if(j6==99){
          j6=0;
           }
          }
         while(!key2);
         } 
 k6 = DeToBCD(j6);
  write_clock(0x8c,0+k6);
  write_clock(0x8e,0x80);
  }
} 


⌨️ 快捷键说明

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