找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11449|回复: 29
收起左侧

我也来做个时钟

  [复制链接]
ID:58628 发表于 2015-7-7 23:35 | 显示全部楼层 |阅读模式
今年忘买日历了,业余时间做个日历时钟吧,也练下手,过程不详解了,总之以后再也不想再焊这样的洞洞板了,程序是网上移植的,加以修改后就是我的了,呵呵

2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg

评分

参与人数 1威望 +50 黑币 +50 收起 理由
admin + 50 + 50 共享资料的积分奖励!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2015-7-7 23:36 来自手机 | 显示全部楼层
楼主飞线好厉害啊!太牛了,能分享一下源程序吗?
回复

使用道具 举报

ID:58628 发表于 2015-7-8 22:54 | 显示全部楼层
本帖最后由 abc123194 于 2015-7-8 23:05 编辑
还是初学者,有不足处请指点!

main.c
/********************************************************************************
以实时时钟的分钟定时功能来实现中断,
当分钟数据变化时,进行数据的更新;
         MCU 使用外部11.0592MHz时钟。
         实时时钟中断接入MCU的INT0,
         
*********************************************************************************/


#include <STC89C5xRC.H>
#include"config.h"
#include"ds3231.h"
#include"display.h"
#include"time.h"
#include"keymark.h"
#include "nongli.h"
#include"Port.h"

/***************************************************************************/

/**********************函数声明*********************************/

/*********************************************************************/


void MCUINIT()
{

        /*********************************************************************/
        int0=1;
        InitDS3231();                            //初始化DS3231
        DisplayInit();                        //74HC595  串口线初始化
        delayms(5);
        ge_shidisplay_code ();
        Display();                                                                                                 //年、月、日、时间、星期、温度动态扫描显示函数
        yeardis=BCD2Hex(read_random(DS3231_YEAR));                           
        monthdis=BCD2Hex(read_random(DS3231_MONTH)&(0x1f));                 //上电第一次调整时间时会归零,初始化时赋初值解决
        datedis=BCD2Hex(read_random(DS3231_DAY)&(0x3f));
    hourdis=BCD2Hex(read_random(DS3231_HOUR)&(0x3f));
        mindis=BCD2Hex(read_random(DS3231_MINUTE)&(0x7f));
        weekdis=BCD2Hex(read_random(DS3231_WEEK)&(0x0f));
        nongli_Display();             //农历月、日静态显示函数

        /*********************************************************************/
        _nop_();_nop_();
        _nop_();_nop_();
}


/****************************主函数*****************************************/
void main()
{
        MCUINIT();
        Display ();
        while(1)
        {
        Display ();
         if (int0==0)                                        //如果是DS3231每分钟时间到                                 
                {        
                        minutedisplay_code ();                                                //分钟显示码
                        Display ();
                        minutedisplay_code ();                                                //分钟显示码
                        Display ();
                          write_byte(0x0f,0x00);        //32KHZ输出禁止,闹钟标志位清零
                        Display ();
                        
                if ((Mintemp==0)||(Mintemp==1)||(Mintemp==2))                        //如果是DS3231每小时时间到,前三分钟每分钟都读数据,防漏读
                                {
                                hourdisplay_code ();                                                //小时显示码
                                Display ();
                                if (Htemp==0)                //如果是DS3231每天时间到
                                        {
                                        datedisplay_code ();                                                //日显示码
                                        weekdisplay_code ();                                                //星期显示码
                                        Display ();
                                        nonglidisplay_code ();                                                //农历月日显示码
                                        Display ();
                                        nongli_Display();
                                        Display ();
                                        Display ();
                                        if (Dtemp==0x01)                //如果是DS3231每月时间到
                                                {        
                                                monthdisplay_code ();                                                //月显示码
                                                Display ();
                                                Display ();
                                                if (Montemp==0x01)                //如果是DS3231每年时间到
                                                        {
                                                        yeardisplay_code ();                                                //年显示码
                                                        Display ();
                                                    Display ();
                                                        }
                                                }
                                        }
                            }
                        temperdisplay_code ();                                                //温度显示码
                        Display ();
                        write_byte(0x0f,0x00);                                                        //32KHZ输出禁止,闹钟标志位清零
                        int0=1;
                        Display ();
                }
        Display ();
        Display ();
    keyscan();                             //按键扫描
        Display ();
        }        
}



/*********************************************************************/


config.h
/***************************************************
**文件名  :config.h
**功能    :MCU有关的配置
**建立日期:15/05/01
**修改记录:
**MCU初始化设置:MCU型号STC89C51RC 使用内置RC震荡器,频率初步定为11.0592M.其它端口详见PORT.H

*****************************************************/
/********************************************/
#ifndef _CONFIG_H_
#define _CONFIG_H_


/*type define*/
typedef unsigned char uchar;

typedef unsigned int uint;




/******************************************/

#endif


Port.h
/***************************************************
**文件名  :Port.h
**功能    :引脚有关的定义
**显示电路使用串行IC74HC595D,时钟使用时钟芯片DS3231SN
*****************************************************/
#include <STC89C5xRC.H>
#ifndef PORT_H_
#define PORT_H_

/**********************************************************
**
**DS3231 管脚定义
**
*********************************************************/
sbit SDA=P3^6;     //模拟I2C数据传送位SDA        
sbit SCL=P3^7;     //模拟I2C时钟控制位SCL
sbit int0=P3^2;      




/**********************************************************
**
**74HC595D 管脚定义
**
*********************************************************/
sbit SI_nian_HC595    = P0^0;
sbit SCK_nian_HC595   = P0^1;
sbit RCK_nian_HC595   = P0^2;
sbit SI_time_HC595    = P0^3;
sbit SCK_time_HC595   = P0^4;
sbit RCK_time_HC595   = P0^5;
sbit SI_temper_HC595  = P0^6;
sbit SCK_temper_HC595 = P0^7;
sbit RCK_temper_HC595 = P1^0;
sbit SI_nongli_HC595  = P1^1;
sbit SCK_nongli_HC595 = P1^2;
sbit RCK_nongli_HC595 = P1^3;


/***按键 管脚定义
**
*********************************************************/

sbit sw1=P3^3;
sbit sw2=P3^4;

#endif



time.h#ifndef __TIME_H__
#define __TIME_H__


extern void delayus(unsigned char itemp);
extern void delayms(unsigned int xms);     


#endif






time.c

#include"time.h"


void delayms(unsigned int xms)     
{
  unsigned int i,j;   
   for(i=xms;i>0;i--)        //i=xms即延时约xms毫秒   
   for(j=60;j>0;j--);
}   


void delayus(unsigned char itemp)
{
        while(--itemp) ;
}






ds3231.c
#include <STC89C5xRC.H>
#include "display.h"
#include "ds3231.h"
#include "keymark.h"
#include "nongli.h"
#include "time.h"
#include "Port.h"
#include "config.h"        
#include <intrins.h>                          



bit  ack;          //应答标志位




uchar Decimal2BCD(uchar val);    //二进制(Decimal)数转换为BCD码
void Start_I2C();                        //I2C起始信号
void Stop_I2C();                        //I2C结束信号
void SendByte(uchar c);                                           //发送字节数据
uchar RcvByte();                                   //接收字节数据
void Ack_I2C(bit a);                        //应答信号
uchar write_byte(uchar addr, uchar write_data);                         //写入DS3231地址的数据
uchar read_random(uchar random_addr);                                   //读回DS3231地址的数据
void ModifyTime(uchar yea,uchar mon,uchar da,uchar hou,uchar min,uchar sec,uchar wee);
void InitDS3231 (); //初始化DS3231





/***********************************************************************************/

uchar Decimal2BCD(uchar val)    //二进制(Decimal)数转换为BCD码
{
    uchar i,j,k;
        i=val/10;
        i=i<<4;
        j=val%10;
        k=i|j;
    return k;
}

/***********************************************************************************/


/************************START***************************/
void Start_I2C()
{
    SDA=1;                  //发送起始条件的数据信号
    _nop_();
    SCL=1;
    _nop_();
        _nop_();
        _nop_();
        _nop_();             //起始条件建立时间大于4.7us,延时
           _nop_();
    SDA=0;                  //发送起始信号
    _nop_();
        _nop_();
        _nop_();
        _nop_();            
           _nop_();             // 起始条件锁定时间大于4μs
      
    SCL=0;                  //钳住I2C总线,准备发送或接收数据
    _nop_();
        _nop_();

}
/********************************************************/
/************************STOP****************************/
void Stop_I2C()
{
    SDA=0;                  //发送结束条件的数据信号
        _nop_();             //发送结束条件的时钟信号
    SCL=1;                  //结束条件建立时间大于4us
        _nop_();
        _nop_();
        _nop_();
    _nop_();
        _nop_();
   
    SDA=1;                  //发送I2C总线结束信号
    _nop_();
        _nop_();
        _nop_();
        _nop_();
    _nop_();
}
/********************************************************/
/*******************************************************************
                  字节数据发送函数               
函数原型:     void   SendByte(uint8 Dat);
功能:      将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
           此状态位进行操作.(不应答或非应答都使ack=0)
           ack=1        发送数据正常,
           ack=0        被控器无应答或损坏。
********************************************************************/
void SendByte(uchar c)
{
uchar BitCnt;
   
    for(BitCnt=0;BitCnt<8;BitCnt++)         //要传送的数据长度为8位
    {
        if((c<<BitCnt)&0x80)
            SDA=1;                          //判断发送位
        else
            SDA=0;               
           _nop_();
          SCL=1;                            //置时钟线为高,通知被控器开始接收数据位
                    _nop_();
         _nop_();
         _nop_();
         _nop_();
         _nop_();                       //保证时钟高电平周期大于4μs   
          SCL=0;
             _nop_();
    }
   
        _nop_();
    SDA=1;                                  //8位发送完后释放数据线,准备接收应答位
    _nop_();
        _nop_();  
    SCL=1;
    _nop_();
        _nop_();
        _nop_();
    _nop_();
    _nop_();
    if(SDA==1)
        ack=0;   
    else
        ack=1;                              //判断是否接收到应答信号
    SCL=0;
    _nop_();
        _nop_();
        
}
/********************************************************/
/*******************************************************************
                  字节数据接收函数               
函数原型:     uint8   RcvByte();
功能:      用来接收从器件传来的数据,并判断总线错误(不发应答信号),
           发完后请用应答函数应答从机。  
********************************************************************/
uchar RcvByte()                                           //接收字节数据
{
   uchar retc;
   uchar BitCnt;

   retc=0;
   SDA=1;                           //置数据线为输入方式
   for(BitCnt=0;BitCnt<8;BitCnt++)
   {
        _nop_();
        SCL=0;                      //置时钟线为低,准备接收数据位
                _nop_();
                _nop_();
            _nop_();
                _nop_();
                _nop_();                //时钟低电平周期大于4.7μs
      
        SCL=1;                      //置时钟线为高使数据线上数据有效
    _nop_();
        _nop_();
        _nop_();
        retc=retc<<1;
        if(SDA==1)
            retc=retc+1;            //读数据位,接收的数据位放入retc中
    _nop_();
        _nop_();
   }
   SCL=0;
    _nop_();
        _nop_();
   return(retc);
}
/********************************************************************
                      应答子函数
函数原型:   void I2CACK(bit a);
功能:       主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
********************************************************************/
void Ack_I2C(bit a)                        //应答信号
{

    if(a==0)
        SDA=0;              //在此发出应答或非应答信号
    else
        SDA=1;
    _nop_();
        _nop_();
        _nop_();     
    SCL=1;
   
    _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();             //时钟低电平周期大于4μs
   
    SCL=0;                  //清时钟线,钳住I2C总线以便继续接收
    _nop_();
        _nop_();
}
/****************************************************/
/***********将一个字节写入DS3231指定的地址***********/
uchar write_byte(uchar addr, uchar write_data)                         //写入DS3231地址的数据
{
        Start_I2C();
    SendByte(0xd0);
    if (ack == 0)
        return 0;
   
    SendByte(addr);   
    if (ack == 0)
        return 0;
   
    SendByte(write_data);
    if (ack == 0)
        return 0;
    Stop_I2C();
    _nop_();
        _nop_();
        _nop_();
    _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();      
    return 1;
}


/****************************************************/
/************从DS3231当前地址读一个字节************
uchar I2CRead()
{
uchar read_data;

    Start_I2C();
    SendByte(0xd1);
    if(ack==0)
                return 0;
                  
    read_data = RcvByte();
    Ack_I2C(1);
    Stop_I2C();
    return read_data;
}

****************************************************/
/************从DS3231指定地址读一个字节************/
uchar read_random(uchar random_addr)                                           //读回DS3231地址的数据
{
uchar read_data;                                                  //DS3231读数据必须先写入要读的数据地址,再重新发送开始信号再读取当前地址数据,
    Start_I2C();                                                  //这个问题没注意,搞了好一阵子,连芯片都更换了都没用,后来仔细研究了网
    SendByte(0xd0);                                                  //上的程序思路才搞明白这么回事!
    if(ack==0)
                return 0;
                  
    SendByte(random_addr);
    if(ack==0)
                return 0;

    Start_I2C();
    SendByte(0xd1);
    if(ack==0)
                return 0;
                  
    read_data = RcvByte();
    Ack_I2C(1);
    Stop_I2C();
    return read_data;
}



/***********************************************************************************/




void ModifyTime(uchar yea,uchar mon,uchar da,uchar hou,uchar min,uchar sec,uchar wee)
{
    uchar temp=0;
   
    temp=Decimal2BCD(yea);
    write_byte(DS3231_YEAR,temp);   //修改年
   
    temp=Decimal2BCD(mon);
    write_byte(DS3231_MONTH,temp);  //修改月
   
    temp=Decimal2BCD(da);
    write_byte(DS3231_DAY,temp);    //修改日
   
    temp=Decimal2BCD(hou);
    write_byte(DS3231_HOUR,temp);   //修改时
   
    temp=Decimal2BCD(min);
    write_byte(DS3231_MINUTE,temp); //修改分
   
    temp=Decimal2BCD(sec);
    write_byte(DS3231_SECOND,temp); //修改秒

        temp=Decimal2BCD(wee);
    write_byte(DS3231_WEEK,temp);   //修改星期
}


/***********************************************************************************/



void InitDS3231 () //初始化DS3231
{
        SCL=1;
        delayus(5);
        SDA=1;
        delayus(5);
         
         write_byte(0x0b, 0x80);    //A2M2置位
         write_byte(0x0c,0x80);             //A2M3置位,
         write_byte(0x0d,0x80);             //A2M4置位,
         write_byte(0x0f,0x00);        //32KHZ输出禁止,闹钟标志位清零
         write_byte(0x0e,0x06);        //中断允许,闹钟2打开闹钟1关闭 ,每分钟#INT口输出中断


}

/***********************************************************************************/


ds3231.h
/**************************************
**时钟使用时钟芯片DS3231SN  
**************************************/

#ifndef _DS3231_H_
#define _DS3231_H_
#include <STC89C5xRC.H>
#include <intrins.h>
#include "config.h"

#define DS3231_WriteAddress 0xd0    //器件写地址
#define DS3231_ReadAddress  0xd1    //器件读地址
#define DS3231_SECOND       0x00    //秒        
#define DS3231_MINUTE       0x01    //分
#define DS3231_HOUR         0x02    //时
#define DS3231_WEEK         0x03    //星期
#define DS3231_DAY          0x04    //日
#define DS3231_MONTH        0x05    //月
#define DS3231_YEAR         0x06    //年
            
#define DS3231_SALARM1ECOND 0x07    //秒
#define DS3231_ALARM1MINUTE 0x08    //分
#define DS3231_ALARM1HOUR   0x09    //时
#define DS3231_ALARM1WEEK   0x0a    //星期/日

#define DS3231_ALARM2MINUTE 0x0b    //分
#define DS3231_ALARM2HOUR   0x0c    //时
#define DS3231_ALARM2WEEK   0x0d    //星期/日
#define DS3231_CONTROL      0x0e    //控制寄存器
#define DS3231_STATUS       0x0f    //状态寄存器
#define DS3231_XTAL         0x10    //晶体老化寄存器
#define DS3231_TEMPERATUREH 0x11    //温度寄存器高字节(8位)
#define DS3231_TEMPERATUREL 0x12    //温度寄存器低字节(高2位)

extern uchar Decimal2BCD(uchar val);    //二进制(Decimal)数转换为BCD码
extern void Start_I2C();
extern void Stop_I2C();
extern void SendByte(uchar c) ;
extern uchar RcvByte();
extern void Ack_I2C(bit a);
extern uchar write_byte(uchar addr, uchar write_data) ;
extern uchar read_random(uchar random_addr);
extern void ModifyTime(uchar yea,uchar mon,uchar da,uchar hou,uchar min,uchar sec,uchar wee);
extern void InitDS3231(); //初始化DS3231
#endif





nongli.c
#include "nongli.h"
#include <intrins.h>
#include "config.h"
#include "time.h"

//输入输出数据均为BCD数据
idata bit c_moon,c_sun=0;//        c_sun=0为20xx,        c_sun=1为19xx
//uchar year_sun,month_sun,day_sun;
idata uchar year_moon,month_moon,day_moon;        // 转换出的农历年 、月 、 日


         

///////////


//以下为程序的实现~~~~~,不用看了
//忘了是哪个网友的程序了,,,感谢ing
/*
公历年对应的农历数据,每年三字节,
格式第一字节BIT7-4 位表示闰月月份,值为0 为无闰月,BIT3-0 对应农历第1-4 月的大小
第二字节BIT7-0 对应农历第5-12 月大小,第三字节BIT7 表示农历第13 个月大小
月份对应的位为1 表示本农历月大(30 天),为0 表示小(29 天)
第三字节BIT6-5 表示春节的公历月份,BIT4-0 表示春节的公历日期
*/
code uchar year_code[597]={
                    0x04,0xAe,0x53,    //1901 0
                    0x0A,0x57,0x48,    //1902 3
                    0x55,0x26,0xBd,    //1903 6
                    0x0d,0x26,0x50,    //1904 9
                    0x0d,0x95,0x44,    //1905 12
                    0x46,0xAA,0xB9,    //1906 15
                    0x05,0x6A,0x4d,    //1907 18
                    0x09,0xAd,0x42,    //1908 21
                    0x24,0xAe,0xB6,    //1909
                    0x04,0xAe,0x4A,    //1910
                    0x6A,0x4d,0xBe,    //1911
                    0x0A,0x4d,0x52,    //1912
                    0x0d,0x25,0x46,    //1913
                    0x5d,0x52,0xBA,    //1914
                    0x0B,0x54,0x4e,    //1915
                    0x0d,0x6A,0x43,    //1916
                    0x29,0x6d,0x37,    //1917
                    0x09,0x5B,0x4B,    //1918
                    0x74,0x9B,0xC1,    //1919
                    0x04,0x97,0x54,    //1920
                    0x0A,0x4B,0x48,    //1921
                    0x5B,0x25,0xBC,    //1922
                    0x06,0xA5,0x50,    //1923
                    0x06,0xd4,0x45,    //1924
                    0x4A,0xdA,0xB8,    //1925
                    0x02,0xB6,0x4d,    //1926
                    0x09,0x57,0x42,    //1927
                    0x24,0x97,0xB7,    //1928
                    0x04,0x97,0x4A,    //1929
                    0x66,0x4B,0x3e,    //1930
                    0x0d,0x4A,0x51,    //1931
                    0x0e,0xA5,0x46,    //1932
                    0x56,0xd4,0xBA,    //1933
                    0x05,0xAd,0x4e,    //1934
                    0x02,0xB6,0x44,    //1935
                    0x39,0x37,0x38,    //1936
                    0x09,0x2e,0x4B,    //1937
                    0x7C,0x96,0xBf,    //1938
                    0x0C,0x95,0x53,    //1939
                    0x0d,0x4A,0x48,    //1940
                    0x6d,0xA5,0x3B,    //1941
                    0x0B,0x55,0x4f,    //1942
                    0x05,0x6A,0x45,    //1943
                    0x4A,0xAd,0xB9,    //1944
                    0x02,0x5d,0x4d,    //1945
                    0x09,0x2d,0x42,    //1946
                    0x2C,0x95,0xB6,    //1947
                    0x0A,0x95,0x4A,    //1948
                    0x7B,0x4A,0xBd,    //1949
                    0x06,0xCA,0x51,    //1950
                    0x0B,0x55,0x46,    //1951
                    0x55,0x5A,0xBB,    //1952
                    0x04,0xdA,0x4e,    //1953
                    0x0A,0x5B,0x43,    //1954
                    0x35,0x2B,0xB8,    //1955
                    0x05,0x2B,0x4C,    //1956
                    0x8A,0x95,0x3f,    //1957
                    0x0e,0x95,0x52,    //1958
                    0x06,0xAA,0x48,    //1959
                    0x7A,0xd5,0x3C,    //1960
                    0x0A,0xB5,0x4f,    //1961
                    0x04,0xB6,0x45,    //1962
                    0x4A,0x57,0x39,    //1963
                    0x0A,0x57,0x4d,    //1964
                    0x05,0x26,0x42,    //1965
                    0x3e,0x93,0x35,    //1966
                    0x0d,0x95,0x49,    //1967
                    0x75,0xAA,0xBe,    //1968
                    0x05,0x6A,0x51,    //1969
                    0x09,0x6d,0x46,    //1970
                    0x54,0xAe,0xBB,    //1971
                    0x04,0xAd,0x4f,    //1972
                    0x0A,0x4d,0x43,    //1973
                    0x4d,0x26,0xB7,    //1974
                    0x0d,0x25,0x4B,    //1975
                    0x8d,0x52,0xBf,    //1976
                    0x0B,0x54,0x52,    //1977
                    0x0B,0x6A,0x47,    //1978
                    0x69,0x6d,0x3C,    //1979
                    0x09,0x5B,0x50,    //1980
                    0x04,0x9B,0x45,    //1981
                    0x4A,0x4B,0xB9,    //1982
                    0x0A,0x4B,0x4d,    //1983
                    0xAB,0x25,0xC2,    //1984
                    0x06,0xA5,0x54,    //1985
                    0x06,0xd4,0x49,    //1986
                    0x6A,0xdA,0x3d,    //1987
                    0x0A,0xB6,0x51,    //1988
                    0x09,0x37,0x46,    //1989
                    0x54,0x97,0xBB,    //1990
                    0x04,0x97,0x4f,    //1991
                    0x06,0x4B,0x44,    //1992
                    0x36,0xA5,0x37,    //1993
                    0x0e,0xA5,0x4A,    //1994
                    0x86,0xB2,0xBf,    //1995
                    0x05,0xAC,0x53,    //1996
                    0x0A,0xB6,0x47,    //1997
                    0x59,0x36,0xBC,    //1998
                    0x09,0x2e,0x50,    //1999 294
                    0x0C,0x96,0x45,    //2000 297
                    0x4d,0x4A,0xB8,    //2001
                    0x0d,0x4A,0x4C,    //2002
                    0x0d,0xA5,0x41,    //2003
                    0x25,0xAA,0xB6,    //2004
                    0x05,0x6A,0x49,    //2005
                    0x7A,0xAd,0xBd,    //2006
                    0x02,0x5d,0x52,    //2007
                    0x09,0x2d,0x47,    //2008
                    0x5C,0x95,0xBA,    //2009
                    0x0A,0x95,0x4e,    //2010
                    0x0B,0x4A,0x43,    //2011
                    0x4B,0x55,0x37,    //2012
                    0x0A,0xd5,0x4A,    //2013
                    0x95,0x5A,0xBf,    //2014
                    0x04,0xBA,0x53,    //2015
                    0x0A,0x5B,0x48,    //2016
                    0x65,0x2B,0xBC,    //2017
                    0x05,0x2B,0x50,    //2018
                    0x0A,0x93,0x45,    //2019
                    0x47,0x4A,0xB9,    //2020
                    0x06,0xAA,0x4C,    //2021
                    0x0A,0xd5,0x41,    //2022
                    0x24,0xdA,0xB6,    //2023
                    0x04,0xB6,0x4A,    //2024
                    0x69,0x57,0x3d,    //2025
                    0x0A,0x4e,0x51,    //2026
                    0x0d,0x26,0x46,    //2027
                    0x5e,0x93,0x3A,    //2028
                    0x0d,0x53,0x4d,    //2029
                    0x05,0xAA,0x43,    //2030
                    0x36,0xB5,0x37,    //2031
                    0x09,0x6d,0x4B,    //2032
                    0xB4,0xAe,0xBf,    //2033
                    0x04,0xAd,0x53,    //2034
                    0x0A,0x4d,0x48,    //2035
                    0x6d,0x25,0xBC,    //2036
                    0x0d,0x25,0x4f,    //2037
                    0x0d,0x52,0x44,    //2038
                    0x5d,0xAA,0x38,    //2039
                    0x0B,0x5A,0x4C,    //2040
                    0x05,0x6d,0x41,    //2041
                    0x24,0xAd,0xB6,    //2042
                    0x04,0x9B,0x4A,    //2043
                    0x7A,0x4B,0xBe,    //2044
                    0x0A,0x4B,0x51,    //2045
                    0x0A,0xA5,0x46,    //2046
                    0x5B,0x52,0xBA,    //2047
                    0x06,0xd2,0x4e,    //2048
                    0x0A,0xdA,0x42,    //2049
                    0x35,0x5B,0x37,    //2050
                    0x09,0x37,0x4B,    //2051
                    0x84,0x97,0xC1,    //2052
                    0x04,0x97,0x53,    //2053
                    0x06,0x4B,0x48,    //2054
                    0x66,0xA5,0x3C,    //2055
                    0x0e,0xA5,0x4f,    //2056
                    0x06,0xB2,0x44,    //2057
                    0x4A,0xB6,0x38,    //2058
                    0x0A,0xAe,0x4C,    //2059
                    0x09,0x2e,0x42,    //2060
                    0x3C,0x97,0x35,    //2061
                    0x0C,0x96,0x49,    //2062
                    0x7d,0x4A,0xBd,    //2063
                    0x0d,0x4A,0x51,    //2064
                    0x0d,0xA5,0x45,    //2065
                    0x55,0xAA,0xBA,    //2066
                    0x05,0x6A,0x4e,    //2067
                    0x0A,0x6d,0x43,    //2068
                    0x45,0x2e,0xB7,    //2069
                    0x05,0x2d,0x4B,    //2070
                    0x8A,0x95,0xBf,    //2071
                    0x0A,0x95,0x53,    //2072
                    0x0B,0x4A,0x47,    //2073
                    0x6B,0x55,0x3B,    //2074
                    0x0A,0xd5,0x4f,    //2075
                    0x05,0x5A,0x45,    //2076
                    0x4A,0x5d,0x38,    //2077
                    0x0A,0x5B,0x4C,    //2078
                    0x05,0x2B,0x42,    //2079
                    0x3A,0x93,0xB6,    //2080
                    0x06,0x93,0x49,    //2081
                    0x77,0x29,0xBd,    //2082
                    0x06,0xAA,0x51,    //2083
                    0x0A,0xd5,0x46,    //2084
                    0x54,0xdA,0xBA,    //2085
                    0x04,0xB6,0x4e,    //2086
                    0x0A,0x57,0x43,    //2087
                    0x45,0x27,0x38,    //2088
                    0x0d,0x26,0x4A,    //2089
                    0x8e,0x93,0x3e,    //2090
                    0x0d,0x52,0x52,    //2091
                    0x0d,0xAA,0x47,    //2092
                    0x66,0xB5,0x3B,    //2093
                    0x05,0x6d,0x4f,    //2094
                    0x04,0xAe,0x45,    //2095
                    0x4A,0x4e,0xB9,    //2096
                    0x0A,0x4d,0x4C,    //2097
                    0x0d,0x15,0x41,    //2098
                    0x2d,0x92,0xB5,    //2099
};
///月份数据表
code uchar day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};
code uint  day_code2[3]={0x111,0x130,0x14e};

/*子函数,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0*/
bit get_moon_day(uchar month_p,uint table_addr)
{
        uchar temp;
    switch(month_p)
        {
        case 1 :temp=year_code[table_addr  ]&0x08;break;
        case 2 :temp=year_code[table_addr  ]&0x04;break;
        case 3 :temp=year_code[table_addr  ]&0x02;break;
        case 4 :temp=year_code[table_addr  ]&0x01;break;
        case 5 :temp=year_code[table_addr+1]&0x80;break;
        case 6 :temp=year_code[table_addr+1]&0x40;break;
        case 7 :temp=year_code[table_addr+1]&0x20;break;
        case 8 :temp=year_code[table_addr+1]&0x10;break;
        case 9 :temp=year_code[table_addr+1]&0x08;break;
        case 10:temp=year_code[table_addr+1]&0x04;break;
        case 11:temp=year_code[table_addr+1]&0x02;break;
        case 12:temp=year_code[table_addr+1]&0x01;break;
        case 13:temp=year_code[table_addr+2]&0x80;break;
            
    }
        if(temp==0)
                return 0;
        else
                return 1;
}


//公历与农历转换子函数
//函数功能:输入BCD阳历数据,输出BCD阴历数据(只允许1901-2099年)        
//调用函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历BCD数据


void Conversion(bit sj,uchar year,uchar month,uchar day)
{                         //sj=0 为21世纪,sj=1 为20世纪 输入输出数据均为BCD数据
    uchar temp1,temp2,temp3,month_p;
    uint temp4,table_addr;
    bit flag2,flag_y;
    temp1=year/16;   //BCD->hex 先把数据转换为十六进制
    temp2=year%16;
    year=temp1*10+temp2;
    temp1=month/16;
    temp2=month%16;
    month=temp1*10+temp2;
    temp1=day/16;
    temp2=day%16;
    day=temp1*10+temp2;
    //定位数据表地址
    if(sj==0)
        {                  
        table_addr=(year+0x64-1)*0x3;
    }
    else
    {
        table_addr=(year-1)*0x3;
    }
    //定位数据表地址完成
    //取当年春节所在的公历月份
    temp1=year_code[table_addr+2]&0x60;
    temp1=_cror_(temp1,5);
    //取当年春节所在的公历月份完成
    //取当年春节所在的公历日
    temp2=year_code[table_addr+2]&0x1f;
    //取当年春节所在的公历日完成
    // 计算当年春年离当年元旦的天数,春节只会在公历1月或2月
    if(temp1==0x1){  
        temp3=temp2-1;  
    }  
    else{
        temp3=temp2+0x1f-1;        
    }
    //计算当年春年离当年元旦的天数完成
    //计算公历日离当年元旦的天数,为了减少运算,用了两个表
    //day_code1[9],day_code2[3]
    //如果公历月在九月或前,天数会少于0xff,用表day_code1[9],
    //在九月后,天数大于0xff,用表day_code2[3]
    //如输入公历日为8月10日,则公历日离元旦天数为day_code1[8-1]+10-1
    //如输入公历日为11月10日,则公历日离元旦天数为day_code2[11-10]+10-1
    if (month<10){
        temp4=day_code1[month-1]+day-1;
    }
    else{
        temp4=day_code2[month-10]+day-1;
    }
    if ((month>0x2)&&(year%0x4==0)){  //如果公历月大于2月并且该年的2月为闰月,天数加1
        temp4+=1;
    }
    //计算公历日离当年元旦的天数完成
    //判断公历日在春节前还是春节后
    if (temp4>=temp3){ //公历日在春节后或就是春节当日使用下面代码进行运算
        temp4-=temp3;
        month=0x1;
        month_p=0x1;  //month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月
        flag2=get_moon_day(month_p,table_addr); //检查该农历月为大小还是小月,大月返回1,小月返回0
        flag_y=0;
        if(flag2==0)temp1=0x1d; //小月29天
        else temp1=0x1e; //大小30天
        temp2=year_code[table_addr]&0xf0;
        temp2=_cror_(temp2,4);  //从数据表中取该年的闰月月份,如为0则该年无闰月
        while(temp4>=temp1){
            temp4-=temp1;
            month_p+=1;
            if(month==temp2){
            flag_y=~flag_y;
            if(flag_y==0)month+=1;
            }
            else month+=1;
            flag2=get_moon_day(month_p,table_addr);
            if(flag2==0)temp1=0x1d;
            else temp1=0x1e;
        }
        day=temp4+1;
    }
    else{  //公历日在春节前使用下面代码进行运算
        temp3-=temp4;
        if (year==0x0){year=0x63;sj=1;}
        else year-=1;
        table_addr-=0x3;
        month=0xc;
        temp2=year_code[table_addr]&0xf0;
        temp2=_cror_(temp2,4);
        if (temp2==0)month_p=0xc;
        else month_p=0xd; //
        
   //month_p为月份指向,如果当年有闰月,一年有十三个月,月指向13,无闰月指向12
        
        flag_y=0;
        flag2=get_moon_day(month_p,table_addr);
        if(flag2==0)temp1=0x1d;
        else temp1=0x1e;
        while(temp3>temp1){
            temp3-=temp1;
            month_p-=1;
            if(flag_y==0)month-=1;
            if(month==temp2)flag_y=~flag_y;
            flag2=get_moon_day(month_p,table_addr);
            if(flag2==0)temp1=0x1d;
            else temp1=0x1e;
         }
        day=temp1-temp3+1;
    }
    c_moon=sj;                 //HEX->BCD ,运算结束后,把数据转换为BCD数据
    temp1=year/10;
    temp1=_crol_(temp1,4);
    temp2=year%10;
    year_moon=temp1|temp2;                        //得到year_moon 的农历年
    temp1=month/10;
    temp1=_crol_(temp1,4);
    temp2=month%10;
    month_moon=temp1|temp2;                         //得到month_moon 的农历月
    temp1=day/10;
    temp1=_crol_(temp1,4);
    temp2=day%10;
    day_moon=temp1|temp2;                        //得到day_moon 的农历日
}



nongli.h
#ifndef _NONGLI_H_
#define _NONGLI_H_

#include "config.h"

//extern uchar year_sun,month_sun,day_sun;//输入公历年,月,日数据
extern idata  uchar year_moon,month_moon,day_moon;//输出 阴历 年,月,日数据

extern void   Conversion(bit sj,uchar year,uchar month,uchar day);
//uchar Conver_week(bit sj,uchar year,uchar month,uchar day);

#endif



display.h
/**************************************
**显示电路使用串行IC74HC595D  
**************************************/



#ifndef __DISPLAY_H__
#define __DISPLAY_H__
#include "config.h"

extern uchar    Ytemp;              //接收的年
extern uchar    Montemp;     //接收的月
extern uchar    Dtemp;       //接收的日
extern uchar    Htemp;       //接收的时 24小时制                  
extern uchar    Mintemp;     //接收的分
extern uchar    weektemp;    //接收的星期
extern uchar    tempertemp;  //接收的温度

extern uchar Ftemper;
extern uchar yearshi;
extern uchar monthshi;
extern uchar dateshi;
extern uchar hourshi;
extern uchar minshi;
extern uchar nonglimonthshi;
extern uchar nonglidateshi;
extern uchar tempershi;
extern uchar yearge;
extern uchar monthge;
extern uchar datege;
extern uchar hourge;
extern uchar minge;
extern uchar nonglimonthge;
extern uchar nonglidatege;
extern uchar temperge;
extern uchar week_code;
extern uchar con_nonglidate;
extern uchar con_nonglimonth;

extern uchar code dis_code[10];     // 0,1,2,3,4,5,6,7,8,9
extern uchar code dis_week[8];             //星期:   日 一 二 三 四 五 六 日
extern uchar code disp_code[10];    // 0,1,2,3,4,5,6,7,8,9

extern void yeardisplay_code (void);                                                //年显示码
extern void monthdisplay_code (void);                                                //月显示码
extern void datedisplay_code (void);                                                //日显示码
extern void hourdisplay_code (void);                                                //小时显示码
extern void minutedisplay_code (void);                                                //分钟显示码
extern void weekdisplay_code (void);                                                //星期显示码
extern void temperdisplay_code (void);                                                //温度显示码
extern void nonglidisplay_code (void);                                                //农历月日显示码

extern void DisplayInit(void);
extern void Display (void);
extern void nongli_Display(void);
extern void ge_shidisplay_code(void);
extern void nianshi_set_dis (uchar cut);                //年十位显示闪烁
extern void niange_set_dis (uchar cut);                        //年个位显示闪烁
extern void month_set_dis (uchar cut);                        //月显示闪烁
extern void dateshi_set_dis (uchar cut);                //日十位显示闪烁
extern void datege_set_dis (uchar cut);                        //日个位显示闪烁
extern void hour_set_dis (uchar cut);                        //时显示闪烁
extern void minshi_set_dis (uchar cut);                        //分十位显示闪烁
extern void minge_set_dis (uchar cut);                        //分个位显示闪烁
extern void week_set_dis (uchar cut);                        //星期显示闪烁


#endif





display.c
/**************************************
**显示电路使用串行IC74HC595D  
**************************************/

#include <STC89C5xRC.H>
#include "display.h"
#include "ds3231.h"
#include "keymark.h"
#include "nongli.h"
#include "time.h"
#include "Port.h"
#include "config.h"


uchar    Ytemp;           //接收的年
uchar    Montemp;     //接收的月
uchar    Dtemp;       //接收的日
uchar    Htemp;       //接收的时 24小时制                  
uchar    Mintemp;     //接收的分
uchar    weektemp;     //接收的星期
uchar    tempertemp;   //接收的温度

uchar Ftemper;
uchar yearshi;
uchar monthshi;
uchar dateshi;
uchar hourshi;
uchar minshi;
uchar nonglimonthshi;
uchar nonglidateshi;
uchar tempershi;
uchar yearge;
uchar monthge;
uchar datege;
uchar hourge;
uchar minge;
uchar nonglimonthge;
uchar nonglidatege;
uchar temperge;
uchar week_code;
uchar con_nonglidate;
uchar con_nonglimonth;



uchar code dis_code[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};   // 0,1,2,3,4,5,6,7,8,9
uchar code dis_week[8]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x80};         //星期:   0 一 二 三 四 五 六 日
uchar code disp_code[10]={0xff,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};   // 0,1,2,3,4,5,6,7,8,9


void DisplayInit(void);                        //74HC595  串口线初始化
void HC595nianSend (uchar Sendval);           //年月日数据发送
void HC595timeSend (uchar Sendval);                //时间数据发送
void HC595temperSend (uchar Sendval);          // 星期温度数据发送
void HC595nongliSend (uchar Sendval);        // 农历月日数据发送
void HC595nianshow (void);                                // 年数据显示
void HC595timeshow (void);                          // 时间显示
void HC595tempershow (void);                         //        星期温度显示
void HC595nonglishow (void)        ;                 //        农历月日显示
void Display (void)        ;                //年、月、日、时间、星期、温度动态扫描显示函数
void nongli_Display(void);                          //农历月、日静态显示函数
void ge_shidisplay_code(void);                 //个位十位显示码
void offnianshi_dis (void);                        //年十位显示关
void offniange_dis (void);                  //年个位显示关
void offmonth_dis (void);                        //月显示关
void offdateshi_dis (void);                   //日十位显示关
void offdatege_dis (void);                         //日个位显示关
void offhour_dis (void)        ;                 //时显示关
void offminshi_dis (void);                        //分钟十位显示关
void offminge_dis (void);          //分钟个位显示关
void offweek_dis (void);                   //星期显示关
void nianshi_set_dis (uchar cut);                        //年十位显示闪烁
void niange_set_dis (uchar cut);                        //年个位显示闪烁
void month_set_dis (uchar cut);                        //月显示闪烁
void dateshi_set_dis (uchar cut);                        //日十位显示闪烁
void datege_set_dis (uchar cut)        ;                //日个位显示闪烁
void hour_set_dis (uchar cut)        ;                //时显示闪烁
void minshi_set_dis (uchar cut)        ;                //分十位显示闪烁
void minge_set_dis (uchar cut)        ;                //分个位显示闪烁
void week_set_dis (uchar cut)        ;                //星期显示闪烁

void yeardisplay_code (void);                                                //年显示码
void monthdisplay_code (void);                                                //月显示码
void datedisplay_code (void);                                                //日显示码
void hourdisplay_code (void);                                                //小时显示码
void minutedisplay_code (void);                                                //分钟显示码
void weekdisplay_code (void);                                                //星期显示码
void temperdisplay_code (void);                                                //温度显示码
void nonglidisplay_code (void);                                                //农历月日显示码


/***************************************************************************************************************/


void DisplayInit(void)                        //74HC595  串口线初始化
{
         SCK_nian_HC595   = 0;
         RCK_nian_HC595   = 0;
         SCK_time_HC595   = 0;
         RCK_time_HC595    =0;
         SCK_temper_HC595 = 0;
         RCK_temper_HC595 = 0;
         SCK_nongli_HC595 = 0;
         RCK_nongli_HC595 = 0;
}



void HC595nianSend (uchar Sendval)           //年月日数据发送
{
        uchar i,j=Sendval;
        for(i=0;i<8;i++)
        {
                SCK_nian_HC595=0;
                SI_nian_HC595=(j&0x80)?1:0;
                SCK_nian_HC595=1;
                j<<=1;
        }
        SCK_nian_HC595=0;
}


void HC595timeSend (uchar Sendval)                //时间数据发送
{
        uchar i,j=Sendval;
        for(i=0;i<8;i++)
        {
                SCK_time_HC595=0;
                SI_time_HC595=(j&0x80)?1:0;
                SCK_time_HC595=1;
                j<<=1;
        }
        SCK_time_HC595=0;
}

  void HC595temperSend (uchar Sendval)          // 星期温度数据发送
{
        uchar i,j=Sendval;
        for(i=0;i<8;i++)
        {
                SCK_temper_HC595=0;
                SI_temper_HC595=(j&0x80)?1:0;
                SCK_temper_HC595=1;
                j<<=1;
        }
        SCK_temper_HC595=0;
}


void HC595nongliSend (uchar Sendval)        // 农历月日数据发送
{
        uchar i,j=Sendval;
        for(i=0;i<8;i++)
        {
                SCK_nongli_HC595=0;
                SI_nongli_HC595=(j&0x80)?1:0;
                SCK_nongli_HC595=1;
                j<<=1;
        }
        SCK_nongli_HC595=0;
}




void HC595nianshow (void)                                // 年数据显示
{
        RCK_nian_HC595=0;
        delayus(1);
        RCK_nian_HC595=1;
    delayus(1);
        RCK_nian_HC595=0;
}


void HC595timeshow (void)                          // 时间显示
{
        RCK_time_HC595=0;
        delayus(1);
        RCK_time_HC595=1;
    delayus(1);
        RCK_time_HC595=0;
}



void HC595tempershow (void)                         //        星期温度显示
{
        RCK_temper_HC595=0;
        delayus(1);
        RCK_temper_HC595=1;
    delayus(1);
        RCK_temper_HC595=0;
}


void HC595nonglishow (void)                         //        农历月日显示
{
        RCK_nongli_HC595=0;
        delayus(1);
        RCK_nongli_HC595=1;
    delayus(1);
        RCK_nongli_HC595=0;
}


/*******************************************************************/


   void Display (void)                        //年、月、日、时间、星期、温度动态扫描显示函数
{
     HC595nianSend (0x88);
         HC595nianSend (monthshi);
         HC595nianSend (0xa4);
         HC595timeSend (0x80);
         HC595timeSend (hourshi);
         HC595temperSend (0x80);
         HC595temperSend (week_code);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x44);
         HC595nianSend (monthge);
         HC595nianSend (0xc0);
         HC595timeSend (0x40);
         HC595timeSend (hourge);
         HC595temperSend (0x40);
         HC595temperSend (Ftemper);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x22);
         HC595nianSend (dateshi);
         HC595nianSend (yearshi);
         HC595timeSend (0x20);
         HC595timeSend (minshi);
         HC595temperSend (0x20);
         HC595temperSend (tempershi);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);



         
         HC595nianSend (0x11);
         HC595nianSend (datege);
         HC595nianSend (yearge);
         HC595timeSend (0x10);
         HC595timeSend (minge);
         HC595temperSend (0x10);
         HC595temperSend (temperge);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(5);

}



void nongli_Display(void)                          //农历月、日静态显示函数
{        
//        ge_shidisplay_code ();
        HC595nongliSend  (nonglidatege);        
    HC595nongliSend  (nonglidateshi);        
    HC595nongliSend  (nonglimonthge);        
    HC595nongliSend  (nonglimonthshi);
        HC595nonglishow();
         _nop_();
         _nop_();      
}


/***********************************************************************************************************/


void ge_shidisplay_code (void)                                                //个位十位显示码
{
        yeardisplay_code ();                                                //年显示码
        monthdisplay_code ();                                                //月显示码
        datedisplay_code ();                                                //日显示码
        hourdisplay_code ();                                                //小时显示码
        minutedisplay_code ();                                                //分钟显示码
        weekdisplay_code ();                                                //星期显示码
        temperdisplay_code ();                                                //温度显示码
        nonglidisplay_code ();                                                //农历月日显示码
}



/************************************************************************************************************/

void yeardisplay_code (void)                                                //年显示码
{
        Ytemp=read_random(DS3231_YEAR);                 //接收的年
    yearge=dis_code[Ytemp&(0x0f)];                                      //年个
    yearshi=dis_code[Ytemp>>4];                                                   //年十
}

/************************************************************************************************************/

void monthdisplay_code (void)                                                //月显示码
{
        Montemp=(read_random(DS3231_MONTH))&(0x1f);         //接收的月
        monthge=dis_code[Montemp&(0x0f)];                                    //月个
        monthshi=disp_code[Montemp>>4];                                            //月十                                       
}


/************************************************************************************************************/

void datedisplay_code (void)                                                //日显示码
{
        Dtemp=(read_random(DS3231_DAY))&(0x3f);             //接收的日
        datege=dis_code[Dtemp&(0x0f)];                                            //日个
        dateshi=disp_code[Dtemp>>4];                                            //日十
}

/************************************************************************************************************/

void hourdisplay_code (void)                                                //小时显示码
{
        Htemp=(read_random(DS3231_HOUR))&(0x3f);            //接收的时 24小时制                  
        hourge=dis_code[Htemp&(0x0f)];                                            //小时个
    hourshi=disp_code[Htemp>>4];                                                //小时十
}



/************************************************************************************************************/


void minutedisplay_code (void)                                                //分钟显示码
{
            Mintemp=(read_random(DS3231_MINUTE))&(0x7f);        //接收的分
        minge=dis_code[Mintemp&(0x0f)];                                            //分钟个
                minshi=dis_code[Mintemp>>4];                                                //分钟十
}



/************************************************************************************************************/


void weekdisplay_code (void)                                                //星期显示码
{
        weektemp=(read_random(DS3231_WEEK))&(0x0f);             //接收的星期
        week_code=dis_week[weektemp];                                            //星期
}



/************************************************************************************************************/


void temperdisplay_code (void)                                                //温度显示码
{
        tempertemp = read_random(DS3231_TEMPERATUREH);           //接收的温度    高字节,不显示小数部分               
    if (((tempertemp>>4)&(0x8))==0) temperge=dis_code[(tempertemp&(0x7f))%10];                 //温度个
        else temperge=dis_code[((~(tempertemp-1))&(0x7f))%10];
    if (((tempertemp>>4)&(0x8))==0) tempershi=disp_code[((tempertemp&(0x7f))/10)];         //温度十
        else tempershi=disp_code[((~(tempertemp-1))&(0x7f))/10];               
        if (((tempertemp>>4)&(0x8))==1)  Ftemper=0xbf;                                                 //温度符号
        else    Ftemper=0xff;
}



/************************************************************************************************************/



void nonglidisplay_code (void)                                                //农历月日显示码
{
        Conversion(0,Ytemp,Montemp,Dtemp);               //公历与农历转换子函数
        nonglimonthge=dis_code[month_moon&(0x0f)];                 //农历月份个
        nonglidatege=dis_code[day_moon&(0x0f)];                     //农历日个
    nonglimonthshi=disp_code[month_moon>>4];         //农历月十                              
    nonglidateshi=disp_code[day_moon>>4];                         //农历日十
}



/************************************************************************************************************/


void offnianshi_dis (void)                        //年十位显示关
{
//          ge_shidisplay_code ();
     HC595nianSend (0x88);
         HC595nianSend (monthshi);
         HC595nianSend (0xa4);
         HC595timeSend (0x80);
         HC595timeSend (hourshi);
         HC595temperSend (0x80);
         HC595temperSend (week_code);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x44);
         HC595nianSend (monthge);
         HC595nianSend (0xc0);
         HC595timeSend (0x40);
         HC595timeSend (hourge);
         HC595temperSend (0x40);
         HC595temperSend (Ftemper);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x02);
         HC595nianSend (dateshi);
         HC595nianSend (yearshi);
         HC595timeSend (0x20);
         HC595timeSend (minshi);
         HC595temperSend (0x20);
         HC595temperSend (tempershi);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);



         
         HC595nianSend (0x11);
         HC595nianSend (datege);
         HC595nianSend (yearge);
         HC595timeSend (0x10);
         HC595timeSend (minge);
         HC595temperSend (0x10);
         HC595temperSend (temperge);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(5);

}



/*****************************************************/
void offniange_dis (void)                  //年个位显示关
{
//           ge_shidisplay_code ();
     HC595nianSend (0x88);
         HC595nianSend (monthshi);
         HC595nianSend (0xa4);
         HC595timeSend (0x80);
         HC595timeSend (hourshi);
         HC595temperSend (0x80);
         HC595temperSend (week_code);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x44);
         HC595nianSend (monthge);
         HC595nianSend (0xc0);
         HC595timeSend (0x40);
         HC595timeSend (hourge);
         HC595temperSend (0x40);
         HC595temperSend (Ftemper);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x22);
         HC595nianSend (dateshi);
         HC595nianSend (yearshi);
         HC595timeSend (0x20);
         HC595timeSend (minshi);
         HC595temperSend (0x20);
         HC595temperSend (tempershi);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);



         
         HC595nianSend (0x01);
         HC595nianSend (datege);
         HC595nianSend (yearge);
         HC595timeSend (0x10);
         HC595timeSend (minge);
         HC595temperSend (0x10);
         HC595temperSend (temperge);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(5);

}

/*****************************************************/
void offmonth_dis (void)                        //月显示关
{
//          ge_shidisplay_code ();
     HC595nianSend (0x80);
         HC595nianSend (monthshi);
         HC595nianSend (0xa4);
         HC595timeSend (0x80);
         HC595timeSend (hourshi);
         HC595temperSend (0x80);
         HC595temperSend (week_code);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x40);
         HC595nianSend (monthge);
         HC595nianSend (0xc0);
         HC595timeSend (0x40);
         HC595timeSend (hourge);
         HC595temperSend (0x40);
         HC595temperSend (Ftemper);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x22);
         HC595nianSend (dateshi);
         HC595nianSend (yearshi);
         HC595timeSend (0x20);
         HC595timeSend (minshi);
         HC595temperSend (0x20);
         HC595temperSend (tempershi);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);



         
         HC595nianSend (0x11);
         HC595nianSend (datege);
         HC595nianSend (yearge);
         HC595timeSend (0x10);
         HC595timeSend (minge);
         HC595temperSend (0x10);
         HC595temperSend (temperge);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(5);

}


/*****************************************************/
void offdateshi_dis (void)                   //日十位显示关
{
//          ge_shidisplay_code ();
     HC595nianSend (0x88);
         HC595nianSend (monthshi);
         HC595nianSend (0xa4);
         HC595timeSend (0x80);
         HC595timeSend (hourshi);
         HC595temperSend (0x80);
         HC595temperSend (week_code);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x44);
         HC595nianSend (monthge);
         HC595nianSend (0xc0);
         HC595timeSend (0x40);
         HC595timeSend (hourge);
         HC595temperSend (0x40);
         HC595temperSend (Ftemper);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x20);
         HC595nianSend (dateshi);
         HC595nianSend (yearshi);
         HC595timeSend (0x20);
         HC595timeSend (minshi);
         HC595temperSend (0x20);
         HC595temperSend (tempershi);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);



         
         HC595nianSend (0x11);
         HC595nianSend (datege);
         HC595nianSend (yearge);
         HC595timeSend (0x10);
         HC595timeSend (minge);
         HC595temperSend (0x10);
         HC595temperSend (temperge);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(5);

}


/*****************************************************/
void offdatege_dis (void)                         //日个位显示关
{
//          ge_shidisplay_code ();
     HC595nianSend (0x88);
         HC595nianSend (monthshi);
         HC595nianSend (0xa4);
         HC595timeSend (0x80);
         HC595timeSend (hourshi);
         HC595temperSend (0x80);
         HC595temperSend (week_code);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x44);
         HC595nianSend (monthge);
         HC595nianSend (0xc0);
         HC595timeSend (0x40);
         HC595timeSend (hourge);
         HC595temperSend (0x40);
         HC595temperSend (Ftemper);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x22);
         HC595nianSend (dateshi);
         HC595nianSend (yearshi);
         HC595timeSend (0x20);
         HC595timeSend (minshi);
         HC595temperSend (0x20);
         HC595temperSend (tempershi);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);



         
         HC595nianSend (0x10);
         HC595nianSend (datege);
         HC595nianSend (yearge);
         HC595timeSend (0x10);
         HC595timeSend (minge);
         HC595temperSend (0x10);
         HC595temperSend (temperge);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(5);

}


/*****************************************************/
void offhour_dis (void)                         //时显示关
{
//          ge_shidisplay_code ();
     HC595nianSend (0x88);
         HC595nianSend (monthshi);
         HC595nianSend (0xa4);
         HC595timeSend (0x00);
         HC595timeSend (hourshi);
         HC595temperSend (0x80);
         HC595temperSend (week_code);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x44);
         HC595nianSend (monthge);
         HC595nianSend (0xc0);
         HC595timeSend (0x00);
         HC595timeSend (hourge);
         HC595temperSend (0x40);
         HC595temperSend (Ftemper);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x22);
         HC595nianSend (dateshi);
         HC595nianSend (yearshi);
         HC595timeSend (0x20);
         HC595timeSend (minshi);
         HC595temperSend (0x20);
         HC595temperSend (tempershi);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);



         
         HC595nianSend (0x11);
         HC595nianSend (datege);
         HC595nianSend (yearge);
         HC595timeSend (0x10);
         HC595timeSend (minge);
         HC595temperSend (0x10);
         HC595temperSend (temperge);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(5);

}


/*****************************************************/
void offminshi_dis (void)                        //分钟十位显示关
{
//           ge_shidisplay_code ();
     HC595nianSend (0x88);
         HC595nianSend (monthshi);
         HC595nianSend (0xa4);
         HC595timeSend (0x80);
         HC595timeSend (hourshi);
         HC595temperSend (0x80);
         HC595temperSend (week_code);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x44);
         HC595nianSend (monthge);
         HC595nianSend (0xc0);
         HC595timeSend (0x40);
         HC595timeSend (hourge);
         HC595temperSend (0x40);
         HC595temperSend (Ftemper);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x22);
         HC595nianSend (dateshi);
         HC595nianSend (yearshi);
         HC595timeSend (0x00);
         HC595timeSend (minshi);
         HC595temperSend (0x20);
         HC595temperSend (tempershi);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);



         
         HC595nianSend (0x11);
         HC595nianSend (datege);
         HC595nianSend (yearge);
         HC595timeSend (0x10);
         HC595timeSend (minge);
         HC595temperSend (0x10);
         HC595temperSend (temperge);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(5);

}


/*****************************************************/
void offminge_dis (void)          //分钟个位显示关
{
//     ge_shidisplay_code ();
         HC595nianSend (0x88);
         HC595nianSend (monthshi);
         HC595nianSend (0xa4);
         HC595timeSend (0x80);
         HC595timeSend (hourshi);
         HC595temperSend (0x80);
         HC595temperSend (week_code);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x44);
         HC595nianSend (monthge);
         HC595nianSend (0xc0);
         HC595timeSend (0x40);
         HC595timeSend (hourge);
         HC595temperSend (0x40);
         HC595temperSend (Ftemper);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x22);
         HC595nianSend (dateshi);
         HC595nianSend (yearshi);
         HC595timeSend (0x20);
         HC595timeSend (minshi);
         HC595temperSend (0x20);
         HC595temperSend (tempershi);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);



         
         HC595nianSend (0x11);
         HC595nianSend (datege);
         HC595nianSend (yearge);
         HC595timeSend (0x00);
         HC595timeSend (minge);
         HC595temperSend (0x10);
         HC595temperSend (temperge);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(5);

}


/*****************************************************/
void offweek_dis (void)                   //星期显示关
{
//            ge_shidisplay_code ();
     HC595nianSend (0x88);
         HC595nianSend (monthshi);
         HC595nianSend (0xa4);
         HC595timeSend (0x80);
         HC595timeSend (hourshi);
         HC595temperSend (0x00);
         HC595temperSend (week_code);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x44);
         HC595nianSend (monthge);
         HC595nianSend (0xc0);
         HC595timeSend (0x40);
         HC595timeSend (hourge);
         HC595temperSend (0x40);
         HC595temperSend (Ftemper);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);

         HC595nianSend (0x22);
         HC595nianSend (dateshi);
         HC595nianSend (yearshi);
         HC595timeSend (0x20);
         HC595timeSend (minshi);
         HC595temperSend (0x20);
         HC595temperSend (tempershi);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(6);



         
         HC595nianSend (0x11);
         HC595nianSend (datege);
         HC595nianSend (yearge);
         HC595timeSend (0x10);
         HC595timeSend (minge);
         HC595temperSend (0x10);
         HC595temperSend (temperge);
         HC595nianshow();
         HC595timeshow();
         HC595tempershow();
         delayms(5);

}


/*****************************************************/

void nianshi_set_dis (uchar cut)                        //年十位显示闪烁
{
        uchar i;
        for (i=0;i<cut;i++)          offnianshi_dis ( ) ;
        for (i=0;i<(cut-30);i++)          Display ( ) ;        
}

/*****************************************************/

void niange_set_dis (uchar cut)                        //年个位显示闪烁
{
        uchar i;
        for (i=0;i<cut;i++)          offniange_dis ( ) ;
        for (i=0;i<(cut-30);i++)          Display ( ) ;        
}

/*****************************************************/

void month_set_dis (uchar cut)                        //月显示闪烁
{
        uchar i;
        for (i=0;i<cut;i++)          offmonth_dis ( ) ;
        for (i=0;i<(cut-30);i++)          Display ( ) ;        
}

/*****************************************************/

void dateshi_set_dis (uchar cut)                        //日十位显示闪烁
{
        uchar i;
        for (i=0;i<cut;i++)          offdateshi_dis ( ) ;
        for (i=0;i<(cut-30);i++)          Display ( ) ;        
}

/*****************************************************/

void datege_set_dis (uchar cut)                        //日个位显示闪烁
{
        uchar i;
        for (i=0;i<cut;i++)          offdatege_dis ( ) ;
        for (i=0;i<(cut-30);i++)          Display ( ) ;        
}

/*****************************************************/

void hour_set_dis (uchar cut)                        //时显示闪烁
{
        uchar i;
        for (i=0;i<cut;i++)          offhour_dis ( ) ;
        for (i=0;i<(cut-30);i++)          Display ( ) ;        
}

/*****************************************************/

void minshi_set_dis (uchar cut)                        //分十位显示闪烁
{
        uchar i;
        for (i=0;i<cut;i++)          offminshi_dis ( ) ;
        for (i=0;i<(cut-30);i++)          Display ( ) ;        
}

/*****************************************************/

void minge_set_dis (uchar cut)                        //分个位显示闪烁
{
        uchar i;
        for (i=0;i<cut;i++)          offminge_dis ( ) ;
        for (i=0;i<(cut-30);i++)          Display ( ) ;        
}

/*****************************************************/

void week_set_dis (uchar cut)                        //星期显示闪烁
{
        uchar i;
        for (i=0;i<cut;i++)          offweek_dis ( ) ;
        for (i=0;i<(cut-30);i++)          Display ( ) ;        
}

/*****************************************************/


keymark.h
/***按键 管脚定义
**
*********************************************************/


#ifndef  __KEYMARK_H__
#define __KEYMARK_H__
#include "config.h"



extern uchar yeardis;
extern uchar monthdis;
extern uchar datedis;
extern uchar weekdis;
extern uchar hourdis;
extern uchar mindis;
extern uchar BCD2Hex(uchar val);
extern void  keyscan();

#endif




keymark.c
#include <STC89C5xRC.H>
#include "keymark.h"
#include "config.h"
#include "time.h"
#include "display.h"
#include "ds3231.h"
#include "Port.h"

uchar flag_set=0;
uchar yeardis;
uchar monthdis;
uchar datedis;
uchar weekdis;
uchar hourdis;
uchar mindis;


uchar BCD2Hex(uchar val)    //BCD码转换为十六进制(Hex)数
{
    uchar i,j,k;
        i=val/16;
        j=val%16;
        k=i*10+j;
    return k;
}

void  keyscan()
{                 
  sw1=1;sw2=1;
  Display ();
  Display ();
  Display ();
  Display ();
  Display ();
  Display ();
  Display ();
  Display ();

  if(sw1==0)
        {
         Display ();          //用显示函数替代延时函数                                               
         if(sw1==0)
                {
                flag_set++;
                yeardis=BCD2Hex(read_random(DS3231_YEAR));                             //有键按下时重赋值,以更新数据
                monthdis=BCD2Hex(read_random(DS3231_MONTH)&(0x1f));
                datedis=BCD2Hex(read_random(DS3231_DAY)&(0x3f));
                hourdis=BCD2Hex(read_random(DS3231_HOUR)&(0x3f));
                mindis=BCD2Hex(read_random(DS3231_MINUTE)&(0x7f));
                weekdis=BCD2Hex(read_random(DS3231_WEEK)&(0x0f));
                }
        }
  while (flag_set)
    {
        switch (flag_set)
          {
          case 1: //nianshi_set_dis (50);
          if(sw2==0)
            {
                Display ();
            if(sw2==0)  yeardis+=10;
            }
          if (yeardis>99)  yeardis=0;
          write_byte(DS3231_YEAR,Decimal2BCD(yeardis));
          Ytemp=read_random(DS3231_YEAR);                  //接收的年
          yearshi=dis_code[Ytemp>>4];                                              //年十
          nianshi_set_dis (50);
          break;

          case 2:// niange_set_dis (50);
          if(sw2==0)
            {
                Display ();
            if(sw2==0)  yeardis+=1;
                }
          if (yeardis>99) yeardis=0;
          write_byte(DS3231_YEAR,Decimal2BCD(yeardis));
          yeardisplay_code ();                                                //年显示码
          niange_set_dis (50);
          break;

          case 3: //month_set_dis (50);
          if(sw2==0)
            {
                 Display ();
                 if(sw2==0)  monthdis+=1;
                }
          if (monthdis>12) monthdis=1;
          write_byte(DS3231_MONTH,Decimal2BCD(monthdis));
          monthdisplay_code ();                                                //月显示码
          month_set_dis (50);
          break;

          case 4: //dateshi_set_dis (50);
          if(sw2==0)
            {
                 Display ();
                 if(sw2==0)  datedis+=10;
                  }
          if (datedis>31) datedis=1;
          write_byte(DS3231_DAY,Decimal2BCD(datedis));
          Dtemp=(read_random(DS3231_DAY))&(0x3f);             //接收的日
          dateshi=disp_code[Dtemp>>4];                                            //日十
          dateshi_set_dis (50);                  
          break;

          case 5:// datege_set_dis (50);
          if(sw2==0)
            {
                Display ();
                if(sw2==0)  datedis+=1;
                }        
          if (datedis>31) datedis=1;
          write_byte(DS3231_DAY,Decimal2BCD(datedis));
          datedisplay_code ();                                                //日显示码
          datege_set_dis (50);                  
          break;

          case 6: //hour_set_dis (50);
          if(sw2==0)
            {
             Display ();
                 if(sw2==0)  hourdis+=1;
                }
          if (hourdis>23) hourdis=0;
          write_byte(DS3231_HOUR,Decimal2BCD(hourdis));
          hourdisplay_code ();                                                //小时显示码
          hour_set_dis (50);
          break;

          case 7:// minshi_set_dis (50);
          if(sw2==0)
            {
                Display ();
                if(sw2==0)  mindis+=10;
                }
          if (mindis>59) mindis=0;
          write_byte(DS3231_MINUTE,Decimal2BCD(mindis));
          Mintemp=(read_random(DS3231_MINUTE))&(0x7f);        //接收的分
          minshi=dis_code[Mintemp>>4];                                                  //分钟十
          minshi_set_dis (50);
          break;

          case 8: //minge_set_dis (50);
          if(sw2==0)
            {
                Display ();
                if(sw2==0)  mindis+=1;
                }
          if (mindis>59) mindis=0;
          write_byte(DS3231_MINUTE,Decimal2BCD(mindis));
          write_byte(DS3231_SECOND,0x0);
          minutedisplay_code ();                          //分钟显示码
          minge_set_dis (50);
          break;

          case 9:// week_set_dis (50);
          if(sw2==0)
                  {
             Display ();
                 if(sw2==0)  weekdis+=1;
                }
      if (weekdis>7) weekdis=1;
          write_byte(DS3231_WEEK,Decimal2BCD(weekdis));                           
          weekdisplay_code ();                                                //星期显示码
          week_set_dis (50);
          break;

          default :  break;
          }
         
        if(sw1==0)
          {
          Display ();          //用显示函数替代延时函数                                               
          if(sw1==0)  flag_set++;
      }
        if(flag_set>9)
          {
          flag_set=0;
          ModifyTime(yeardis,monthdis,datedis,hourdis,mindis,0,weekdis);
          ge_shidisplay_code ();
          }
        Display ();
    }
  Display ();
  Display ();
  
  }






/*************************************************************************************************************/

回复

使用道具 举报

ID:58628 发表于 2015-7-8 23:14 | 显示全部楼层
程序还是用附件上传更清楚点,本人单片机自学,还没入门,还望各位指点!谢谢

ds3231_rili.zip

17.47 KB, 下载次数: 61, 下载积分: 黑币 -5

附上原程序

评分

参与人数 1威望 +50 黑币 +50 收起 理由
admin + 50 + 50 共享资料的积分奖励!

查看全部评分

回复

使用道具 举报

ID:58628 发表于 2015-7-9 20:01 | 显示全部楼层
admin 发表于 2015-7-7 23:36
楼主飞线好厉害啊!太牛了,能分享一下源程序吗?

拆的旧板、元件,只能飞线了,我也不想的
回复

使用道具 举报

ID:99130 发表于 2016-4-15 19:36 | 显示全部楼层
楼主有原理图吗

回复

使用道具 举报

ID:112242 发表于 2016-4-20 20:02 | 显示全部楼层
你这个飞线真够乱的
回复

使用道具 举报

ID:69536 发表于 2016-10-25 11:17 | 显示全部楼层
有耐心,够细心
回复

使用道具 举报

ID:88023 发表于 2016-10-30 14:25 | 显示全部楼层
好有耐心
回复

使用道具 举报

ID:72088 发表于 2016-11-21 07:39 | 显示全部楼层
好厉害的飞仙,晕倒了我
回复

使用道具 举报

ID:344278 发表于 2018-6-4 07:22 来自手机 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:112631 发表于 2018-6-6 23:15 | 显示全部楼层
这线能再乱一点吗?
回复

使用道具 举报

ID:70490 发表于 2018-6-7 21:35 | 显示全部楼层
楼主飞线好厉害啊!
回复

使用道具 举报

ID:282850 发表于 2019-5-14 17:47 | 显示全部楼层
这飞线超强,换成我,我是不愿、不想这样做,会心情不好。这飞线是否可以申请吉尼斯记录。
回复

使用道具 举报

ID:522698 发表于 2019-5-14 18:41 | 显示全部楼层
飞线超强精神可佳!
回复

使用道具 举报

ID:532564 发表于 2019-5-17 16:49 | 显示全部楼层
楼主的线接的让人眼花2333
回复

使用道具 举报

ID:484435 发表于 2019-5-20 12:30 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:887954 发表于 2022-3-10 21:11 来自手机 | 显示全部楼层
很好很好值得学习
回复

使用道具 举报

ID:619071 发表于 2022-3-10 22:48 | 显示全部楼层
收藏一波 慢慢看
回复

使用道具 举报

ID:577622 发表于 2022-3-11 15:20 | 显示全部楼层
这是天外飞仙的感觉啊,太强了,有强迫症的不能看。
回复

使用道具 举报

ID:97023 发表于 2022-3-11 15:58 | 显示全部楼层
我见过最乱的飞线
回复

使用道具 举报

ID:489843 发表于 2022-3-16 09:06 | 显示全部楼层
焊第一次还可忍受的话,再检查一次就该暴跳如雷了
回复

使用道具 举报

ID:397054 发表于 2022-3-20 18:23 | 显示全部楼层
藕地嗝天,都是裸铜丝,这么飞那看得懂啊,你就不怕短路,前两年我也焊了个52的电子钟,用的是洞洞板,横平竖直,一目了然。
回复

使用道具 举报

ID:468878 发表于 2022-4-21 17:13 | 显示全部楼层
鹈鹕 发表于 2022-3-20 18:23
藕地嗝天,都是裸铜丝,这么飞那看得懂啊,你就不怕短路,前两年我也焊了个52的电子钟,用的是洞洞板,横平 ...

肯定是漆包线,他敢这么用裸铜丝,我佩服他50年!这也够乱的……
回复

使用道具 举报

ID:1017814 发表于 2022-4-22 10:05 | 显示全部楼层
我说楼主的头发到哪里去了,我去____
回复

使用道具 举报

ID:996773 发表于 2022-4-24 16:08 | 显示全部楼层
这是个狠人,为啥一个时钟用c语言也这么长代码,我用汇编做个带闹钟的接近两千行代码,太长了太烦,主要是bcd码读取转成十进制,调时间又得转成bcd码,转换过程太烦了。比做数控收音机都烦
回复

使用道具 举报

ID:1021338 发表于 2022-4-24 19:37 | 显示全部楼层
楼主很厉害,必须点赞
回复

使用道具 举报

ID:1011444 发表于 2022-7-7 20:20 | 显示全部楼层
12.jpg 程序通过了编译,条理比较清晰。但无电路图,不好做详细分析。
回复

使用道具 举报

ID:74784 发表于 2022-7-8 16:18 | 显示全部楼层
太复杂了。

4代调试.JPG 3代床头表.jpg 2代数字钟.jpg 我的万年历.jpg

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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