找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6891|回复: 2
收起左侧

基于51单片机设计的DS1302时钟程序

[复制链接]
ID:270854 发表于 2018-1-7 09:08 | 显示全部楼层 |阅读模式
#include < reg52.h>
  DS1302时钟程序  
*******************************************************/
sbit ACC_0 = ACC^0;
sbit ACC_1 = ACC^1;
sbit ACC_2 = ACC^2;
sbit ACC_3 = ACC^3;
sbit ACC_4 = ACC^4;
sbit ACC_5 = ACC^5;
sbit ACC_6 = ACC^6;
sbit ACC_7 = ACC^7;
//**************************
sbit T_SCLK = P3^5;                    // DS1302时钟信号       7脚
sbit T_DIO= P3^6;                      // DS1302数据信号       6脚
sbit T_CE = P3^7;
//**************************
uchar   sec,min,hour,day,month,week,year;    //时间变量
//**************************
uchar  DS1302_addr[]={
      0x80, //0,写入秒(Second)寄存器
      0x81, //1,读出秒(Second)寄存器
      0x82, //2,写入分(Minute)寄存器
      0x83, //3,读出分(Minute)寄存器
      0x84, //4,写入小时(Hour)寄存器
      0x85, //5,读出小时(Hour)寄存器
      0x86, //6,写入日(Day)寄存器
      0x87, //7,读出日(Day)寄存器
      0x88, //8,写入月份(Month)寄存器
      0x89, //9,读出月份(Month)寄存器
      0x8a, //10,写入周(Week)寄存器
      0x8b, //11,读出周(Week)寄存器
      0x8c, //12,写入年份(Year)寄存器
      0x8d, //13,读出年份(Year)寄存器
      0x8e, //14,写保护_寄存器
      0x8f  //15,涓流充电

}  ;

//***************写入一字节***********************
void DS1302_Input_Byte(uchar Input)  //向时钟IC写入一字节
{   
  uchar i;
    ACC =Input;
    for(i=8; i>0; i--)
    {  
        T_DIO = ACC_0;            //相当于汇编中的 RRC
  T_SCLK = 1;
  T_SCLK = 0;
        ACC = ACC >> 1;
    }   
}
//**************读取一字节()*************************
uchar DS1302_Output_Byte(void)      //从时钟IC读取一字节()
{
    uchar i;   
    for(i=8; i>0; i--)
    {  
     ACC>>=1; T_DIO= 1;
     ACC_7 = T_DIO;
   T_SCLK = 1;                 //相当于汇编中的 RRC
         T_SCLK = 0;      
    }
    return(ACC);
}
//**************向时钟IC写数据*************************
void DS1302_Write_one( uchar addr,dat )       // 写入地址、数据子程序
{
       T_CE=0;                             //T_CE引脚为低,数据传送中止
       T_SCLK=0;                          //清零时钟总线
       T_CE = 1;                          //T_CE引脚为高,逻辑控制有效
    DS1302_Input_Byte(addr);           // 地址,命令
       DS1302_Input_Byte(dat);          // 写1Byte数据
       T_SCLK = 1;
       T_CE = 0;     
}
//************从数据读取数据*****************************
uchar DS1302_Read ( uchar addr )    //数据读取子程序
{
      uchar date;
       T_CE=0;           
       T_SCLK=0;            
       T_CE = 1;
  DS1302_Input_Byte(addr);        // 地址,命令
     date = DS1302_Output_Byte();         // 读1Byte数据
     T_SCLK = 1;
     T_CE = 0;
     return(date);
}
//************从数据读取数据****************************
void DS1302_Write( uchar sec_w,min_w,hour_w,day_w,month_w,week_w,year_w )
{
        DS1302_Write_one(0x8e,0x00);
  DS1302_Write_one(0x80,sec_w);
  DS1302_Write_one(0x82,min_w);
  DS1302_Write_one(0x84,hour_w);
  DS1302_Write_one(0x86,day_w);
  DS1302_Write_one(0x88,month_w);
  DS1302_Write_one(0x8a,week_w);
  DS1302_Write_one(0x8c,year_w);
  DS1302_Write_one(0x8e,0x80);
}  

//************从数据读取数据*****************************
/*void DS1302_readtime()                           
{
    sec=DS1302_Read(0x81);                    //读秒
    min=DS1302_Read(0x83);                    //读分
    hour=DS1302_Read(0x85);                   //读时
    day=DS1302_Read(0x87);                    //读日
    month=DS1302_Read(0x89);                  //读月
    year=DS1302_Read(0x8d);     //读年
    week=DS1302_Read(0x8b);      //读星期
}*/
//************数码管DS1302显示*****************************
void DS1302_SMG_display()
{
/*  DS1302_readtime();
  SMG_display(6,sec%0x10);
  delay(1);
  SMG_display(5,sec/0x10);
  delay(1);
  SMG_display(4,min%0x10);
  delay(1);
  SMG_display(3,min/0x10);
   delay(1);
  SMG_display(2,hour%0x10);
  delay(1);
  SMG_display(1,hour/0x10);
  delay(1);
  */

////////////////////////////////////////////
   uchar i=0,a=6,*p;
   p=DS1302_addr;
   *p++;
   for(i=0;i<3;i++)
   {
   SMG_display(a,DS1302_Read(*p)%0x10);
   a--;
   delay(0);
   SMG_display(a,DS1302_Read(*p)/0x10);
   delay(0);
   a--;
   *p++;
   *p++;
   }
   delay(0);

}
回复

使用道具 举报

ID:475314 发表于 2019-2-8 15:58 | 显示全部楼层
跟我的普中科技的不同呀
回复

使用道具 举报

ID:84745 发表于 2020-9-19 22:43 来自手机 | 显示全部楼层
ACC是啥,51不是P^0吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表