哪位大神有用 DS1302 数码管 做的电子钟的 C语言程序

[复制链接]
46|9
 楼主 | 2018-11-8 18:23 | 显示全部楼层 |阅读模式
哪位大神有用 DS1302 数码管 做的电子钟的 C语言程序
| 2018-11-8 18:26 | 显示全部楼层
你做到什么程度了
| 2018-11-8 18:30 | 显示全部楼层
本人菜鸟一个 刚开始做 做的只能显示时间 却不能用按键调整时间 换了很多程序都不好用  
| 2018-11-8 18:34 | 显示全部楼层

最好不要用数码管,很麻烦。
 楼主 | 2018-11-8 18:37 | 显示全部楼层
为什么啊
| 2018-11-8 18:44 | 显示全部楼层
用个1602最好,1602,12864的程序我有
| 2018-11-8 18:49 | 显示全部楼层
主要是BCD码和二进制码的转换
| 2018-11-8 18:55 | 显示全部楼层

#include  "stdlib.h"
#include "Common.h"
#include "M051.h"
#include "DS1302.h"
#include "GlobalPar.h"

/*******************************************
º¯Êý£ºDS1302_Write
²ÎÊý£ºreg ¼Ä´æÆ÷µØÖ·    Data Êý¾Ý
ÃèÊö£ºÏòDS1302ijµØַдÈëÒ»¸ö×Ö½ÚµÄÊý¾Ý
·µ»ØÖµ£ºÎÞ
*******************************************/
void DS1302_Write(uint8_t reg,uint8_t Data)
{
    uint8_t i;
    TSclk=0;                             //´®¿ÚʱÖÓ³õʼΪ0
          __nop();__nop();__nop();__nop();     //ÑÓʱ4¸öʱÖÓÖÜÆÚ
    TRst=1;                              //´®¿ÚƬѡÐźÅʹÄÜ   
                __nop();__nop();__nop();__nop();        
        
    for(i=0;i<8;i++)                     //ÏÈдÈëҪдÈëÊý¾ÝµÄ¼Ä´æÆ÷µØÖ·(8bit)
    {
                                TSda=reg&0x1;                    //°´1bitÖð¸öдÈë(8bit)  
        TSclk=1;                                            //´®¿ÚʱÖÓÉÏÉýÑØдÈë
                          __nop();__nop();__nop();__nop();
        TSclk=0;              
                          __nop();__nop();__nop();__nop();
        reg>>=1;                         //µØÖ·Êý¾ÝÓÒÒÆ
    }
    for(i=0;i<8;i++)                     //ÔÙдÈëҪдÈë¸ÃµØÖ·µÄÊý¾Ý
    {
                                TSda=Data&0x1;                   //°´1bitÖð¸öдÈëҪдÈë¸ÃµØÖ·µÄÊý¾Ý(8bit)
        TSclk=1;                                     //´®¿ÚʱÖÓÉÏÉýÑØдÈë
                          __nop();__nop();__nop();__nop();
        TSclk=0;  
                          __nop();__nop();__nop();__nop();
        Data>>=1;                        //Êý¾ÝÓÒÒÆ
    }
    TRst=0;                              //´®¿ÚƬѡÐźÅÇå³ý
}
/*******************************************
º¯Êý£ºDS1302_Read
²ÎÊý£ºreg ¼Ä´æÆ÷µØÖ·  
ÃèÊö£º´ÓDS1302ijµØÖ·¶Á³öÒ»¸ö×Ö½ÚµÄÊý¾Ý
·µ»ØÖµ£ºÎÞ
*******************************************/
uint8_t DS1302_Read(uint8_t reg)
{
    uint8_t Data=0;
          uint8_t i;
    reg+=1;                               //µØÖ·¼Ä´æÆ÷ÖеÄLSBλÉèΪ1,¶Á
    TSclk=0;                                                      //´®¿ÚʱÖÓÐźųõʼΪ0
          __nop();__nop();__nop();__nop();      //ÑÓʱ4¸öʱÖÓÖÜÆÚ
    TRst=1;                               //´®¿ÚƬѡÐźÅÖÃ1
                __nop();__nop();__nop();__nop();

    for(i=0;i<8;i++)                      //ÏÈдÈëҪȡÊý¾ÝËùÔڵļĴæÆ÷µØÖ·(8bit)
    {
                                TSda=reg&0x1;                     //´ÓLSB¿ªÊ¼1bitÖð¸öдÈë               
        TSclk=1;                                            //´®¿ÚʱÖÓÉÏÉýÑØдÈë
                          __nop();__nop();__nop();__nop();
        TSclk=0;                                
                          __nop();__nop();__nop();__nop();
        reg>>=1;                          //ÓÒÒÆһλ  Ö±µ½8bitÈ«²¿Ð´Èë
    }
    for(i=0;i<8;i++)                      //¶Á³ö¸ÃµØÖ·ÉÏÒ»¸ö×ֽڵĴ洢Êý¾Ý(8bit)
    {
        Data>>=1;                         //ÿ½ÓÊÜ1bit,Êý¾ÝÓÒÒÆ£¬½ÓÊÕÏÂ1bit(½Ï¸ßλ)
        if(TSda) Data|=0x80;              //¸ÃλΪ¸ßµçƽ  Èç:µØַΪ0x81(ÃëÖӼĴæÆ÷),¶Á²Ù×÷ ´æ´¢Êý¾ÝΪ0x59(Õñµ´Æ÷¹¤×÷+59s) ½ÓÊÕÕýÈ·
        TSclk=1;                           
                          __nop();__nop();__nop();__nop();
        TSclk=0;                                            //´®¿ÚʱÖÓϽµÑضÁ³ö
                          __nop();__nop();__nop();__nop();
    }
    TRst=0;                               //´®¿ÚƬѡÐźÅÇå³ý
    return(Data);                         //·µ»Ø¶Á³öÖµ
}
/*******************************************
º¯Êý£ºDS1302_Init
²ÎÊý£ºÎÞ
ÃèÊö£ºDS1302³õʼ»¯
·µ»ØÖµ£ºÎÞ
*******************************************/
void DS1302_Init(void)
{
    uint8_t val;
    val = DS1302_Read(DS1302_SEC_Reg);      //¶ÁÈ¡ÃëÖӼĴæÆ÷
    val &= 0x7f;                            //Êý¾Ý×î¸ßλÇåÁã
    DS1302_Write(DS1302_CONTROL_Reg,0);     //ÔÊÐíдÈë
    DS1302_Write(DS1302_SEC_Reg,val);       //´ò¿ª¾§Õñ,CH=0 Õñµ´Æ÷¹¤×÷ÔÊÐí
    //DS1302_Write(DS1302_CHARGER_Reg,0xaa);        //ä¸Á÷³äµç,TCS=1010 ʹÄÜä¸Á÷³äµç,DS=10 Ñ¡ÔñÁ½¸ö¶þ¼«¹Ü,RS=10 Ñ¡Ôñ4K Ohm µç×è
    DS1302_Write(DS1302_CONTROL_Reg,0x80);  //½ûֹдÈë
}

/******************************************
º¯Êý£ºDS1302_Fix
ÃèÊö£º¸üÐÂDS1302ʱ¼äµÄÉ趨ֵ(»ù×¼Öµ)
·µ»ØÖµ£ºÎÞ
*******************************************/
void DS1302_Fix(void)
{
    uint8_t temp;
    DS1302_Write(DS1302_CONTROL_Reg,0x00);                                                //ÔÊÐíдÈë
          DS1302_Write(DS1302_SEC_Reg,0x80);                                              //ÃëÖӼĴæÆ÷Êý¾ÝÇåÁã,Õñµ´Æ÷Í£Ö¹,×¼±¸Ð´ÈëеÄʱ¼ä»ù×¼Öµ
    //DS1302_Write(DS1302_CHARGER_Reg,0xaa);        //ä¸Á÷³äµç,TCS=1010 ʹÄÜä¸Á÷³äµç,DS=10 Ñ¡ÔñÁ½¸ö¶þ¼«¹Ü,RS=10 Ñ¡Ôñ4K Ohm µç×è

    temp=(SetupData[1]<<4)|SetupData[0];                DS1302_Write(DS1302_YEAR_Reg,temp);                 //дÈëеÄÄê·ÝÊý¾Ý
    temp=(SetupData[3]<<4)|SetupData[2];          DS1302_Write(DS1302_MONTH_Reg,temp);                      //дÈëеÄÔ·ÝÊý¾Ý
    temp=(SetupData[5]<<4)|SetupData[4];           DS1302_Write(DS1302_DATE_Reg,temp);                 //дÈëеÄÈÕÆÚÊý¾Ý
    temp=(SetupData[8]<<4)|SetupData[7];          DS1302_Write(DS1302_HR_Reg,temp);                   //дÈëеÄʱÖÓÊý¾Ý
    temp=(SetupData[10]<<4)|SetupData[9];          DS1302_Write(DS1302_MIN_Reg,temp);                  //дÈëеķÖÖÓÊý¾Ý
    temp=(SetupData[12]<<4)|SetupData[11]; temp &= 0x7f;DS1302_Write(DS1302_SEC_Reg,temp);      //дÈëеÄÃëÖÓÊý¾Ý,´ò¿ª¾§ÕñÕñµ´Æ÷¹¤×÷
    DS1302_Write(DS1302_CONTROL_Reg,0x80);                                                      //½ûֹдÈë
}
/*********************************************
º¯Êý£ºReadDS1302Time
ÃèÊö£º¶Áȡijʱ¿ÌµÄʱ¼äÖµ
·µ»ØÖµ£ºÎÞ
*********************************************/
void ReadDS1302Time(void)
{
    uint8_t Data;

    Data=DS1302_Read(DS1302_YEAR_Reg);                 //¶ÁÈ¡´Ë¿ÌÄê·Ý
    year0=Data&0x0f;                                   //µÍλ
    year1=Data>>4;                                     //¸ßλ
    Data=DS1302_Read(DS1302_MONTH_Reg);                //¶ÁÈ¡´Ë¿ÌÔ·Ý
    month0=Data&0x0f;
    month1=(Data>>4)&0x01;
    Data=DS1302_Read(DS1302_DATE_Reg);                 //¶ÁÈ¡´Ë¿ÌÈÕÆÚ
    date0=Data&0x0f;
    date1=(Data>>4)&0x03;
    Data=DS1302_Read(DS1302_HR_Reg);                   //¶ÁÈ¡´Ë¿ÌʱÖÓ
    hour0=Data&0x0f;
    hour1=(Data>>4)&0x03;
    Data=DS1302_Read(DS1302_MIN_Reg);                  //¶ÁÈ¡´Ë¿Ì·ÖÖÓ
    minute0=Data&0x0f;
    minute1=(Data>>4)&0x07;
    Data=DS1302_Read(DS1302_SEC_Reg);                  //¶ÁÈ¡´Ë¿ÌÃëÖÓ
    second0=Data&0x0f;
    second1=(Data>>4)&0x07;
}
 楼主 | 2018-11-8 18:58 | 显示全部楼层
结贴了,多谢大家讨论这么多哈,呵呵
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

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