精华内容
下载资源
问答
  • 福星万年历以农历为显示主导的绿色电脑万年历。从前4800年到公元10000年共14800年的公历、农历、干支、九星、28宿、管局、三元九运、年号等;每农历月可查初一、十一、廿
  • 万年历实现了用户多样化查询的功能,同时还提供了界面颜色更改,音乐播放等多样性功能,另外密码认证和进度条都是次创新的尝试 项目下载 项目下载地址(含源代码):链接:...

    郑重声明

    本人为C语言浅学者,只了解一些皮毛,欢迎大神指导,拒绝杠精。

    代码简介

    基本功能

    该万年历实现了用户多样化查询的功能,同时还提供了界面颜色更改,音乐播放等多样性功能,另外密码认证和进度条都是一次创新的尝试

    项目下载

    项目下载地址(含源代码):链接:https://share.weiyun.com/5aB3ylP 密码:4g08pl

    编译环境

    Devc++

    源代码

    #include <stdio.h>
    #include <windows.h>
    #include <mmsystem.h>
    #pragma comment(lib, "WINMM.LIB")
    #include <stdlib.h> 
    #include <string.h>
    #include <iostream>
    //Welcome to this project,this is a common project,it has many menu,like:callender,plusmachine and many ohther meuns.
    
    //*******************************************************************************************************************************************  
    //now this is the first menu:callender
    //*******************************************************************************************************************************************  
    
    int musichope(){
       PlaySound (TEXT("hope.wav"), NULL,SND_FILENAME|SND_ASYNC);
    } 
    
    int musictime(){
       PlaySound (TEXT("time.wav"), NULL,SND_FILENAME|SND_ASYNC);
    } 
    
    int musicstory(){
       PlaySound (TEXT("story.wav"), NULL,SND_FILENAME|SND_ASYNC);
    } 
    
    int musicnext(){
       PlaySound (TEXT("thenext.wav"), NULL,SND_FILENAME|SND_ASYNC);
    }  
    
    int musicseve(){
       PlaySound (TEXT("seve.wav"), NULL,SND_FILENAME|SND_ASYNC);
    }  
    //闰年的判断 
    int isOrNotLeapYear(int year){
        return (year%4==0&&year%100!=0||year%400==0)?1:0;
    }
    //月份对应的天数 
    int dayOfMonth(int year,int month){
        int day;
        if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
            day=31;
        }else if(month==4||month==6||month==9||month==11){
            day=30;
        }else if(month==2&&isOrNotLeapYear(year)){
            day=29;
        }else if(month==2){
            day=28;
        }else{
            printf("。。。。。。。。。!\n");
            day=0;
        }
        return day;
    }
    //从一年一月一日至输入的日期过了多少天 
    int sumOfDay(int year,int month){
        int dayOfMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
        int sum=0;
        //从一年一月一日到当前年月日的日子和
        sum += (year-1)*365;
        //满四百的闰年数
        sum += ((year-1)/400)*97;
        //不满四百的闰年
        sum += ((year-1)%400)/100*24;
        //不足一百的闰年
        sum += ((year-1)%100)/4;
        //这年的天数  
        for(int i=0;i<month-1;i++){
            sum += dayOfMonth[i];
        }
        if(month==2&&isOrNotLeapYear(year)){
                sum++;
        }
        return sum;
    }
    //主要打印函数(打印月历中的每一天) 
    void displayMonth(int year,int month){
        int i;
        int day;
        int sumday;
        int temp;
        sumday = sumOfDay(year,month);
        temp = sumday%7;
        day = dayOfMonth(year,month);
        if(day==0){
            printf("有没有这个月份你心里没点*数吗?\n");
            return;
        }else{
            printf("\n");
            printf("\n");
            printf("\n--------------------------------------------------\n");
            printf("日\t一\t二\t三\t四\t五\t六\n");
            printf("--------------------------------------------------\n");
        }
        for(i=0;i<temp+1;i++){
            printf("\t");
        }
        if(temp+1==7){
            printf("\r");
        }   
        for(i=1;i<=day;i++){
            printf("%d\t",i);
            if((i+temp+1)%7==0){
                printf("\n");
            }
        }
        printf("\n");
        printf("\n");
    }
    //打印整年 
    void displayYear(int year){
        int month;
        for(month = 1;month<=12;month++){
            displayMonth(year,month);
        }
    }
    //打印季度 
    void displayJdu(int year,int ji){
        int month;
        system("cls");
        if(ji==1){
            for(month = 1;month<=3;month++){
                displayMonth(year,month);
            }
        }else if(ji==2){
            for(month = 4;month<=6;month++){
                displayMonth(year,month);
            }
        }else if(ji==3){
            for(month = 7;month<=9;month++){
                displayMonth(year,month);
            }
        }else if(ji==4){
            for(month = 10;month<=12;month++){
                displayMonth(year,month);
            }
        }else{
            printf("请输入正确的季度 好吗?\n\n");
        }       
    }
    //打印从某年某月到某年某月 
    void mounian(int year,int month,int cha){
        int count;
        for(count = 1;count<=cha;count++){
            displayMonth(year,month);
            month++;
            if(month==13){
                year++;
                month=1;
            }   
        }   
    }
    //动画函数
    void cartoon(){                           
        printf ("             ▇");
        Sleep(100); 
        printf ("▇");
        Sleep(100); 
        printf ("▇");
        Sleep(100); 
        printf ("▇");
        Sleep(500); 
        printf ("▇");
        Sleep(100); 
        printf ("▇");
        Sleep(100); 
        printf ("▇");
        Sleep(100); 
        printf ("▇");
        Sleep(300); 
        printf ("▇");
        Sleep(100); 
        printf ("▇");
        Sleep(100); 
        printf ("▇");
        Sleep(100); 
        printf ("▇");
        Sleep(100); 
        printf ("▇");
        Sleep(100); 
        printf ("▇");
        Sleep(100);
        printf ("▇");
        Sleep(500); 
        printf ("▇");
        Sleep(100); 
        printf ("▇");
        Sleep(100); 
        printf ("▇\n"); 
    }
    //快速动画函数
    void fastcartoon(){                            
        printf ("             ▇");
        Sleep(50); 
        printf ("▇");
        Sleep(50); 
        printf ("▇");
        Sleep(50); 
        printf ("▇");
        Sleep(50); 
        printf ("▇");
        Sleep(50); 
        printf ("▇");
        Sleep(100); 
        printf ("▇");
        Sleep(50); 
        printf ("▇");
        Sleep(50); 
        printf ("▇");
        Sleep(50); 
        printf ("▇");
        Sleep(50); 
        printf ("▇");
        Sleep(50); 
        printf ("▇");
        Sleep(50); 
        printf ("▇");
        Sleep(50); 
        printf ("▇");
        Sleep(50);
        printf ("▇");
        Sleep(50); 
        printf ("▇");
        Sleep(50); 
        printf ("▇");
        Sleep(50); 
        printf ("▇\n"); 
    }
    //过渡函数 
    void list(){
        system("color B9");
        system ("cls");
        printf ("\n\n          超天堂2017精品软件合集       超天堂出品\n\n\n");
        printf ("\n\n\n\n                     系统初始化中......  \n\n");
        cartoon();
        printf ("\n\n\n                     数据文件读取中......\n\n\n");
        fastcartoon();
        printf ("\n\n\n                       程序已就绪\n\n\n\n");
        system ("pause");  
    }
    //密码认证函数 
    int key(){
        int h;
        int e;
        int m=23333;
        while(1){ 
        printf ("\n\n\n\n                          ACE & 超天堂\n");
        printf ("\n                      身份认证系统 Ver 1.4.3\n"); 
        printf ("\n                       如忘记密码请输入88888\n\n"); 
            printf("\n\n               请输入由ACE/超天堂 提供的KEY以启动程序\n\n                              ");
            scanf ("%d",&e);
            getchar();
          if (e==m){
            printf ("\n\n                           认证成功 \n");
            printf ("\n                        欢迎回来 ACE admin \n");
            Sleep (2000); 
            system ("cls");
            break;  
        }else if (e==88888){
            system ("cls");
            printf ("\n\n      欢迎进入“忘记密码”功能模块 为了您的安全 请回答下列问题方可修改密码\n\n\n");
            printf ("\n\n1.超天堂的全名是什么?\n\n");
            char username[50]="超天堂移动互联工作室" ;
            char weixin[20]="cttxiaotian";
            char username1[20];
            char weixin1[20];
            scanf ("%s",username1); 
            printf ("\n\n2.超天堂的微信公众号账号是多少?\n\n");
            scanf ("%s",weixin1);
            if (strcmp(username1,username)==0||strcmp(weixin1,weixin)==0){
                printf ("\n\n\n\n身份验证已通过,您的密码为:\n\n");
                printf ("      23333   \n\n"); 
                printf ("  3秒种后自动返回登录界面\n");
                Sleep(3000); 
                system ("cls");
            }else {
                printf ("\n\n         回答错误!\n\n");
                Sleep(3000);
                system ("cls");
            }
        }else 
          if (e!=m||e!=88888){
          printf ("             身份认证失败,请联系ACE小组负责人获取认证码\n");
          Sleep(2000);
          system ("cls");
          } 
        }
    list(); 
    }
    //菜单 
    int caidan(){
        system("color F3");
        int flag;
        while(1){
            system("cls");
        printf ("\n\n          超天堂2017精品软件合集       超天堂出品\n\n\n");
            printf("\n\n       1.万年历                                7.背景音乐选择\n\n");
            printf("       2.查询年                                8.\n\n");
            printf("       3.查询季\n\n");
            printf("       4.某年某月-某年某月\n\n");
            printf("       5.设置\n\n");
            printf("       6.退出\n\n");
            printf("");
            scanf("%d",&flag);
            getchar();
            if(flag==1||flag==2||flag==3||flag==4||flag==5||flag==6||flag==7){
                break;
            }else{
                system("cls");
                printf("     请输入正确的选项\n\n");
                system("pause");
            }
        }
        system("cls");
        return flag;
    }
    //公共定义 
    int systemcolor();
    int systemcolorconfig();
    int setting();
    //系统颜色自定义函数
    int systemcolor(){                            
        system("cls");
        printf ("\n\n\n请选择您喜欢的颜色:\n\n");
        printf ("(1)黑色背景 白色字体\n(2)淡红色背景 蓝色字体\n(3)淡绿色背景 湖蓝色字体\n(4)浅绿色背景 红色字体\n(5)淡黄色背景 红色字体\n");
        printf ("(6)灰色背景 淡紫色字体\n(7)黑色背景 淡蓝色字体\n(8)恢复系统默认\n\n\n"); 
        int a;
        scanf ("%d",&a);
        getchar();
        if (a==1){
            system ("color 07");
        }else
          if (a==2){
            system ("color C1");
          }else
            if (a==3){
                    system ("color B3");
            }else
              if (a==4){
                    system ("color A4");
              }else
                if (a==5){
                        system ("color E4");
                }else
                  if (a==6){
                        system ("color 8D");
                  }else
                    if (a==7){
                            system ("color 09");
                    }else
                            system ("color B9");
        systemcolorconfig();
    }
    //系统颜色变更提醒
    int systemcolorconfig(){                            
        system ("cls");
        printf ("\n\n\n           您的背景颜色已更改:\n           是否立即启用?\n\n           (1)确认   (2)重新选择\n\n\n");
        int a;
        scanf ("%d",&a);
        getchar();
        if (a==1){
            setting();
        }else
            systemcolor();
    }
    //技术支持
    int support(){                            
        system ("cls");
        printf ("\n\n          超天堂2017精品软件合集       超天堂出品\n\n\n");
        printf ("版本介绍:\n(1)该程序为2017年超天堂移动互联工作室的所有的小程序的合集版\n(2)本软件供超天堂移动互联工作室内部人员总结使用\n");
        printf ("(3)本软件所有代码均有工作室负责与编写,编译器统一使用MinGW GCC 4.7.2,对于软件显示不正常与运行非正常的请联系客服进行适配或获得其余帮助\n");
        printf ("(4)本软件部分代码将进行开源处理,对于闲置代码有相似的疑惑我工作室一律不予回应\n");
        printf ("(5)超天堂移动互联工作室向来以创新为目标,我工作室可承诺本软件及其附属软件所有的核心代码由工作室自行编写而成,如有类似,纯属巧合\n\n\n");
        printf ("作者:刘统帅\n所属工作组:超天堂移动互联工作室\n联系方式:\n    QQ 1271261360\n    邮箱:1271261360@qq.com\n\n\n非常感谢使用超天堂系列软件\n");
        printf ("输入 8 立即回到上一界面\n\n\n"); 
        int a;0
        scanf ("%d",&a);
        getchar();
        if (a==8){
          caidan();
        }else;
    }
    //系统设置函数 
    int setting(){
        system ("cls");
        printf ("\n\n          超天堂2017精品软件合集               超天堂出品\n\n\n");
        printf ("\n\n*************************************************************\n\n");
        printf ("\n                       系统设置\n"); 
        printf ("\n\n*************************************************************\n\n");
        printf (" (1)界面颜色设置\n(2)技术支持\n(3)返回主菜单\n\n");
        int p;
        printf ("请输入您想进行的操作:\n");
        scanf ("%d",&p);
        getchar();
        if (p==1){
            systemcolor();
        }else
            if (p==2){
              support();
            }else
              if (p==3){
              caidan();
              }else;
    } 
    
    int searching(){
        int ji,month,year,flag,yeartwo,monthtwo,cha;
        while(1){
            flag=caidan();
            if(flag==1){
                printf("请输入年月,用.隔开\n\n");
                scanf("%d.%d",&year,&month);
                getchar();
                displayMonth(year,month); 
            }else if(flag==2){
                printf("请输入要查询的年份\n\n");
                scanf("%d",&year);
                getchar();
                displayYear(year);      
            }else if(flag==3){
                printf("1为春季\n");
                printf("2为夏季\n");
                printf("3为秋季\n");
                printf("4为冬季\n");
                printf("请输入要查询的年份和季度,用.隔开,\n\n");
                scanf("%d.%d",&year,&ji);
                getchar();
                displayJdu(year,ji);
            }else if(flag==4){
                printf("请输入要查询的年月,例如2011.1-2012.1\n\n");
                scanf("%d.%d-%d.%d",&year,&month,&yeartwo,&monthtwo);
                getchar();
                cha=(yeartwo-year)*12+monthtwo-month+1;
                mounian(year,month,cha);
            }else if(flag==5){
                setting(); 
            }else if(flag==7){
                printf ("\n      请选择您想要设置的背景音乐:\n\n");
                printf ("  1.Hope\n  2.Story Of US\n  3.The Next Episode\n  4.SEVE\n  5.Time\n\n");
                int l;
                scanf ("%d",&l);
                if (l==1){
                    musichope();
                }else if (l==2){
                    musicstory();
                }else if (l==3){
                    musicnext();
                }else if (l==4){
                    musicseve();
                }else if (l==5){
                    musictime();
                }else printf ("  输入有误!  \n");
            } else if(flag==6){
                break;
            }
            system("pause");
        }   
    }
    
    int callender(){
        musichope();
        key();
        searching();    
    }
    
    //*******************************************************************************************************************************************  
    //in front of this text is the callender.cpp file
    //*******************************************************************************************************************************************  
    
    
    //******************************************************************************************************************************************* 
    //in front of this text is the plus.cpp file
    //******************************************************************************************************************************************* 
    
    
    int mainselect()
    
    
    
    int mainselect(){
    
        printf ("\n\n\n                                      请选择一个子项目并按Enter进入\n\n");
        printf ("                            1.多功能万年历        2.多功能计算器\n\n");
        int a;
        scanf ("%d",&a);
        if (a==1){
            callender();
        }else
            plus();
    
    }
    
    //*******************************************************************************************************************************************
    //in front of this text is the mainselect.cpp file 
    //******************************************************************************************************************************************* 
    int main(){  
        mainselect();
    }
    
    

    小小项目,欢迎诸位大神指导

    关注小学员,每天都有新不同

    展开全文
  • 基于html的万年历

    2021-01-28 09:47:05
    一个纯前端的万年历,代码清晰,格式标准,算法逻辑严谨,欢迎大家下载
  • 万年历使用总结

    千次阅读 2015-01-14 17:15:29
    最近从网上下载一个万年历的小js脚本,学习了,有点小收获。 1、月份是从0开始的 2、initial中利用今天的年和月开始调用drawCld(tY,tM);(这里有1900,如果需要更改选项需要改这里) 3、drawCld这个函数比较复杂,...

        最近从网上下载了一个万年历的小js脚本,学习了,有点小收获。

    1、月份是从0开始的
    2、initial中利用今天的年和月开始调用drawCld(tY,tM);(这里有1900,如果需要更改选项需要改这里)
    3、drawCld这个函数比较复杂,需要好好研究研究。
    1)cld = new calendar(SY,SM);产生日历对象。国历当月天数是需要的。


    //农历数据信息 第一个数闰月的天数标志位(0表示29天,1表示30天),2,3,4表示对应的月份的天数(0,29天,1,30天),最后一位闰月的月份数(0,没有,其余则是对应的月份)
    var lunarInfo = new Array(
    0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,
    0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,
    0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,
    0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,
    0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,
    0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,
    0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,
    0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,
    0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,
    0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,
    0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,
    0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,
    0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,
    0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,
    0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0)


    //按周计算 月周日(日用0表示)
    var wFtv = new Array(
    "0520 国际母亲节",
    "0530 全国助残日",
    "0630 国际父亲节",
    "0932 国际和平日",
    "0940 国际聋人节",
    "1013 国际减轻自然灾害日",
    "1011 国际住房日"
    );


    需要改1900的三处,改了这三处,选择项也可以改,农历1900年1月的表示有问题,所以可以去掉,只能到2049年

    第一处:function changeCld() {
    var y,m;
    y = document.getElementById("sy").selectedIndex + 1901;
    m = document.getElementById("sm").selectedIndex;
          drawCld(y,m);
    }

    第二处:default :
    document.getElementById("sy").selectedIndex = tY - 1901;
    document.getElementById("sm").selectedIndex = tM;

    第三处://界面初始化
    function initial() {
    //select

    dStyle = document.getElementById("detail").style;
    //fillSelect();
    //fillCalendar();


    document.getElementById("sy").selectedIndex=tY-1901;
    document.getElementById("sm").selectedIndex=tM;
    log(1,  "initial call drawCld() now");
    drawCld(tY,tM);
         
    //document.getElementById("tz").selectedIndex=getCookie("TZ");
    //if(document.getElementById("tz").selectedIndex<1)
    // document.getElementById("tz").selectedIndex=39;
    //changeTZ();
    //tick();

    }


    其实网上有大量源码,在这里我就粘过来了

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    
    
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>兼容火狐、谷歌等主流浏览器的万年历</title>
    <meta name="keywords" content="兼容火狐、谷歌,万年历,农历,阳历,月历,节日,时区,节气,八字,干支,实用查询,兼容IE/Firefox/Safari等浏览器">
    <meta name="description" content="能够兼容火狐、谷歌等主流浏览器的万年历。">
    <style>
    .aorange {
    font-size: 20px;
    color: #ff5f07;
    font-family: "黑体",serif;
    font-weight: bold;
    }
    .agreen {
    font-size: 20px;
    color: #55e8df;
    font-weight: bold;
    }
    
    
    .one {
    font-family: "黑体",serif;
    font-size: 20px;
    color: #000;
    font-weight: normal;
    }
    
    
    .spc {
    color:#ff5f07;
    }
    
    
    div,select,p {
    font-size: 12px;
    color:#000;
     
    }
    
    
    div#festival {
    color: #d8f6f8; 
    width: 130px; 
    padding: 2px; 
    margin: 0; 
    background-color: #0978a6; 
    }
    div#datedetail {
    width: 130px; 
    border: 0; 
    padding: 2px; 
    margin: 0; 
    background-color:#e8f5f9; 
    text-align:right; 
    }
    div#datedetail span {
    color: #23460f;
    }
    div#detail {
    position: absolute;
    visibility: hidden;
    margin: 0;
    border:1px solid #a6a8ab;
    }
    
    
    div#date {
    width:98%;
    font-size:16px;
    padding:5px;
    border: 1px solid #a6a8ab; 
    background-color: #e6f0fa;
    }
    div#calendar {
    float:left;
    text-align:center;
    width:500px;
    border: 1px solid #a6a8ab; 
    border-top:0;
    height:auto;
    }
    #calendarhead {
    color: #fafbfb;
    border:0;
    padding:0;
    margin:0;
    background-color: #0978a6;
    }
    
    
    #calendarhead tr td {
    width:70px;
    font-weight:bold;
    font-family:"黑体",serif;
    font-size:20px;
    padding:1px;
    }
    
    
    div#panel {
    margin:0;
    padding:10px;
    }
    div#panel div {
    padding:2px;
    margin-top:20px;
    background:#e8f5f9;
    border:1px solid #a6a8ab;
    font-size:9pt;
    cursor:pointer;
    }
    
    
    #week {
    background-color: #fcfcfc;
    border:0;
    padding:0;
    margin:0;
    }
    #week tr td {
    padding:1px;
    margin:0;
    width:70px;
    border-bottom: 1px solid #efefef;
    border-left: 1px solid #efefef;
    }
    
    
    .tr2 td {
    background-color: #e8f5f9;
    }
    
    
    #valid {
    float:left;
    margin:0;
    padding: 30px;
    }
    #valid div {
    padding:2px;
    margin-top:20px;
    }
    #valid a img {
    border:0;
    }
    </style>
    
    
    <script type="text/javascript">
    var debug = 2; // -1: disable; 0: all; N: show level N debug msg.
    
    
    //农历数据信息 第一个数闰月的天数标志位(0表示29天,1表示30天),2,3,4表示对应的月份的天数(0,29天,1,30天),最后一位闰月的月份数(0,没有,其余则是对应的月份)
    var lunarInfo = new Array(
    0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,
    0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,
    0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,
    0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,
    0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,
    0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,
    0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,
    0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,
    0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,
    0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,
    0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,
    0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,
    0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,
    0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,
    0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0)
    
    
    //太阳历每月天数
    var solarMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    //天干
    var Gan = new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
    //地支
    var Zhi = new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");
    //属相
    var Animals=new Array("鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪");
    //节气
    var solarTerm = new Array("小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至");
    //?????
    var sTermInfo = new Array(0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758);
    //
    var nStr1 = new Array('日','一','二','三','四','五','六','七','八','九','十');
    //
    var nStr2 = new Array('初','十','廿','卅',' ');
    //英语月份简写
    var monthName = new Array("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC");
    
    
    //国历节日 *表示节假日
    var sFtv = new Array(
    "0101*元旦",
    "0214 情人节",
    "0308 妇女节",
    "0312 植树节",
    "0315 消费者权益日",
    "0321 世界森林日、世界儿歌日",
    "0322 世界水日",
    "0323 世界气象日",
    "0324 世界防治结核病日",
    
    "0401 愚人节",
    "0407 世界卫生日",
    "0422 世界地球日",
    
    "0501*劳动节",
    "0504 青年节",
    "0505 碘缺乏病防治日",
    "0508 世界红十字日",
    "0512 国际护士节",
    "0515 国际家庭日",
    "0517 世界电信日",
    "0518 国际博物馆日",
    "0520 全国学生营养日",
    "0523 国际牛奶日",
    "0531 世界无烟日",
    
    "0601 儿童节",
    "0605 世界环境日",
    "0606 全国爱眼日",
    "0616 防治荒漠化和干旱日",
    "0623 国际奥林匹克日",
    "0625 全国土地日",
    "0626 国际反毒品日",
    
    "0701 建党节 香港回归纪念 国际建筑日",
    "0707 中国人民抗日战争纪念日",
    "0711 世界人口日",
    
    "0801 建军节",
    "0808 父亲节",
    
    "0908 国际扫盲日",
    "0909 毛泽东逝世纪念",
    "0910 教师节",
    "0912 嘻嘻日",
    "0916 国际臭氧层保护日",
    "0920 国际爱牙日",
    "0927 世界旅游日",
    "0928 孔子诞辰",
    
    "1001*国庆节 国际音乐日",
    "1004 世界动物日",
    "1006 老人节",
    "1008 全国高血压日 世界视觉日",
    "1009 世界邮政日",
    "1015 国际盲人节",
    "1016 世界粮食日",
    "1017 世界消除贫困日",
    "1024 联合国日",
    
    "1108 中国记者日",
    "1109 消防宣传日",
    "1112 孙中山诞辰纪念",
    "1114 世界糖尿病日",
    "1117 国际大学生节",
    
    
    "1201 世界艾滋病日",
    "1203 世界残疾人日",
    "1209 世界足球日",
    "1220 澳门回归纪念",
    "1225 圣诞节",
    "1226 毛泽东诞辰纪念",
    "1229 国际生物多样性日"
    );
    
    
    //农历节日 *表示节假日
    var lFtv = new Array(
    "0101*春节",
    "0115 元宵节",
    "0505 端午节",
    "0707 七夕情人节",
    "0715 中元节",
    "0815 中秋节",
    "0909 重阳节",
    "1208 腊八节",
    "1223 小年",
    "0100*除夕"
    );
    
    
    //按周计算 月周日(日用0表示)
    var wFtv = new Array(
    "0520 国际母亲节",
    "0530 全国助残日",
    "0630 国际父亲节",
    "0932 国际和平日",
    "0940 国际聋人节",
    "1013 国际减轻自然灾害日",
    "1011 国际住房日"
    );
    
    
    function log(level,  msg) {
            if (debug == 0 || debug == level)
            if(window.console) {
                    window.console.log("[DEBUG]" + msg);
            }
    }
    
    
    /*****************************************************************************
    日期计算
    *****************************************************************************/
    
    
    var Today = new Date();
    var tY = Today.getFullYear();
    var tM = Today.getMonth();
    var tD = Today.getDate();
    
    
    var width = "130"; //detail层宽度
    var offsetx = 2;
    var offsety = 16;
    
    
    var x = 0;
    var y = 0;
    var show = 0;
    var sw = 0;
    var cnt = 0;
    
    
    var dStyle;
    document.onmousemove = mEvn;
    
    
    //====================================== 传回农历 y年的总天数
    function lYearDays(y) {
       var i, sum = 348;
       for(i=0x8000; i>0x8; i>>=1) sum += (lunarInfo[y-1900] & i)? 1: 0;
       return(sum+leapDays(y));
    }
    
    
    //====================================== 传回农历 y年闰月的天数
    function leapDays(y) {
       if(leapMonth(y))  return((lunarInfo[y-1900] & 0x10000)? 30: 29);
       else return(0);
    }
    
    
    //====================================== 传回农历 y年闰哪个月 1-12 , 没闰传回 0
    function leapMonth(y) {
       return(lunarInfo[y-1900] & 0xf);
    }
    
    
    //====================================== 传回农历 y年m月的总天数
    function monthDays(y,m) {
       return( (lunarInfo[y-1900] & (0x10000>>m))? 30: 29 );
    }
    
    
    //====================================== 算出农历, 传入日期物件, 传回农历日期物件
    //                                       该物件属性有 .year .month .day .isLeap .yearCyl .dayCyl .monCyl
    function Lunar(objDate) {
       var m = ""; // msg for log
       var i, leap=0, temp=0;
       var baseDate = new Date(1900,0,31);
    // changed by hmisty 2005/07/23
    //   var offset   = (objDate - baseDate)/86400000;
       var offset   = Math.floor((objDate.getTime() + 2206425600000)/86400000);
       //var offset   = Math.floor((objDate.getTime() + 2209017600000)/86400000);
       m += "objDate="+objDate.getTime()+", new Date(1900,0,31)="+baseDate.getTime();
       m += "offset="+offset;   
       this.dayCyl = offset + 40;
       this.monCyl = 14;
    
    
       for(i=1900; i<2050 && offset>0; i++) {
          temp = lYearDays(i);//传回农历年的总天数
          offset -= temp;
          this.monCyl += 12;
       }
      
       if(offset<0) {
          offset += temp;
          i--;
          this.monCyl -= 12;
       }
    
    
       this.year = i;
       this.yearCyl = i-1864;
    
    
       leap = leapMonth(i);//闰哪个月
       this.isLeap = false;
    
    
       for(i=1; i<13 && offset>0; i++) {//闰月
          if(leap>0 && i==(leap+1) && this.isLeap==false)
             { --i; this.isLeap = true; temp = leapDays(this.year); }
          else
             { temp = monthDays(this.year, i); }
    //解除闰月
          if(this.isLeap==true && i==(leap+1)) this.isLeap = false;
    
    
          offset -= temp;
          if(this.isLeap == false) this.monCyl ++;
       }
    
    
       if(offset==0 && leap>0 && i==leap+1)
          if(this.isLeap)
             { this.isLeap = false; }
          else
             { this.isLeap = true; --i; --this.monCyl;}
    
    
       if(offset<0){ offset += temp; --i; --this.monCyl; }
    
    
       this.month = i;
       this.day = offset + 1;  
       m += "\noffset="+offset+", year="+this.year+", yearCyl="+this.yearCyl+", month="+this.month+",\n monthCyl="+this.monCyl+", day="+this.day+", dayCyl="+this.dayCyl+", leap="+leap;
       log(2, m);
    }
    
    
    //==============================传回国历 y年某m+1月的天数
    function solarDays(y,m) {
       if(m==1)
          return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28);
       else
          return(solarMonth[m]);
    }
    //============================== 传入 offset 传回干支, 0=甲子
    function cyclical(num) {
       return(Gan[num%10]+Zhi[num%12]);
    }
    //============================== 月历属性
    function calElement(sYear,sMonth,sDay,week,lYear,lMonth,lDay,isLeap,cYear,cMonth,cDay) {
    
    
          this.isToday    = false;
          this.sYear      = sYear;
          this.sMonth     = sMonth;
          this.sDay       = sDay;
          this.week       = week;
          this.lYear      = lYear;
          this.lMonth     = lMonth;
          this.lDay       = lDay;
          this.isLeap     = isLeap;
          this.cYear      = cYear;
          this.cMonth     = cMonth;
          this.cDay       = cDay;
    
    
          this.color      = '';
    
    
          this.lunarFestival = ''; //农历节日
          this.solarFestival = ''; //国历节日
          this.solarTerms    = ''; //节气
    
    
    }
    
    
    //===== 某年的第n个节气为几日(从0小寒起算)
    function sTerm(y,n) {
       log(1,  "y="+y+" n="+n+" sTermInfo[n]="+sTermInfo[n]+" Date.UTC(1900,0,6,2,5)="+Date.UTC(1900,0,6,2,5)+" Date.UTC(1970,0,1,0,0)="+Date.UTC(1970,0,1,0,0) );
    // changed by hmisty 2005/07/23
    //   var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000  ) + Date.UTC(1900,0,6,2,5) );
       var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000  ) -2208549300000 );
       // Negative epoch (time_t) values are not officially supported by the
       // POSIX standards.  On some systems, they are known not to work.
       // -- perldoc Time::Local
    
    
       return(offDate.getUTCDate());
    }
    
    
    //============================== 传回月历物件 (y年,m+1月)
    function calendar(y,m) {
            log(1,  "i am in calendar() now");
    var sDObj, lDObj, lY, lM, lD=1, lL, lX=0, tmp1, tmp2;
    var lDPOS = new Array(3);
    var n = 0;
    var firstLM = 0;
         
    sDObj = new Date(y,m,1);            //当月一日日期
        
    this.length = solarDays(y,m);    //国历当月天数
      this.firstWeek = sDObj.getDay();    //国历当月1日星期几
    
    
            log(1,  "this.length: "+this.length);
            log(1,  "begin loop for(var i=0;i<this.length;i++)");
    for(var i=0;i<this.length;i++) {
     
    if(lD>lX) {
    sDObj = new Date(y,m,i+1);           //当月一日日期
    lDObj = new Lunar(sDObj);           //农历
    lY    = lDObj.year;           //农历年
    lM    = lDObj.month;          //农历月
    lD    = lDObj.day;            //农历日
    lL    = lDObj.isLeap;         //农历是否闰月
    lX    = lL? leapDays(lY): monthDays(lY,lM); //农历当月最後一天
          
    if(n==0) firstLM = lM;
    lDPOS[n++] = i-lD+1;
      }
     
          //log(1,  "lDObj.dayCyl: "+lDObj.dayCyl);
    this[i] = new calElement(y, m+1, i+1, nStr1[(i+this.firstWeek)%7],
                                   lY, lM, lD++, lL,
                                   cyclical(lDObj.yearCyl) ,cyclical(lDObj.monCyl), cyclical(lDObj.dayCyl++) );
    
    
     
    if((i+this.firstWeek)%7==0)   this[i].color = '#ff5f07';//周日颜色
    if((i+this.firstWeek)%14==13) this[i].color = '#ff5f07';//周休二日颜色
          }
            log(1,  "end loop for(var i=0;i<this.length;i++)");
    //节气
    tmp1=sTerm(y,m*2  )-1;
    tmp2=sTerm(y,m*2+1)-1;
    log(1,  "m: "+m+" tmp1: "+tmp1+" "+solarTerm[m*2]+" tmp2: "+tmp2+" "+solarTerm[m*2+1]);
    this[tmp1].solarTerms = solarTerm[m*2];
          this[tmp2].solarTerms = solarTerm[m*2+1];
    if(m==3) this[tmp1].color = '#ff5f07';
            
            log(1,  "begin loop for(i in sFtv)");
    //国历节日
    for(i in sFtv)
    if(sFtv[i].match(/^(\d{2})(\d{2})([\s\*])(.+)$/))
    if(Number(RegExp.$1)==(m+1)) {
    this[Number(RegExp.$2)-1].solarFestival += RegExp.$4 + ' ';
    if(RegExp.$3=='*') this[Number(RegExp.$2)-1].color = '#ff5f07';
          }
         
            log(1,  "begin loop for(i in wFtv)");
    //月周节日
    for(i in wFtv)
    if(wFtv[i].match(/^(\d{2})(\d)(\d)([\s\*])(.+)$/))
    if(Number(RegExp.$1)==(m+1)) {
    tmp1=Number(RegExp.$2);
    tmp2=Number(RegExp.$3);
    this[((this.firstWeek>tmp2)?7:0) + 7*(tmp1-1) + tmp2 - this.firstWeek].solarFestival += RegExp.$5 + ' ';
          }
         
            log(1,  "begin loop for(i in lFtv)");
    //农历节日
    for(i in lFtv)  
    if(lFtv[i].match(/^(\d{2})(.{2})([\s\*])(.+)$/)) {
                            log(1,  lFtv[i]);
    tmp1=Number(RegExp.$1)-firstLM;
    if(tmp1==-11) tmp1=1;
    if(tmp1 >=0 && tmp1<n) {
    tmp2 = lDPOS[tmp1] + Number(RegExp.$2) -1;
    if( tmp2 >= 0 && tmp2<this.length) {
                                            log(1,  "tmp2 >= 0 && tmp2("+tmp2+")<this.length("+this.length+")");
                                            log(1,  RegExp.$4);
                                            log(1,  this[tmp2].lunarFestival);
    this[tmp2].lunarFestival += RegExp.$4 + ' ';
                                            log(1,  RegExp.$3);
    if(RegExp.$3=='*') this[tmp2].color = '#ff5f07';
    }
    }
      }
         
            log(1,  "begin 黑色星期五");
    //黑色星期五
    if((this.firstWeek+12)%7==5)
    this[12].solarFestival += '黑色星期五 ';
     
    //今日    
    if(y==tY && m==tM) {
    this[tD-1].isToday = true;
    }
    }
    
    
    //====================== 中文日期
    function cDay(d){
    var s;
    switch (d) {
    case 10:
    s = '初十'; 
    break;
    case 20:
    s = '二十'; 
    break;
    case 30:
    s = '三十';
    break;
    default :
    s = nStr2[Math.floor(d/10)];
    s += nStr1[d%10];
    }
    return(s);
    }
    
    
    var cld;
    
    
    function drawCld(SY,SM) {
            log(1,  "i am in drawCld() now");
            
    var i,sD,s,size;
    log(1,  "begin to create calendar cld");
    cld = new calendar(SY,SM);
            log(1,  "calendar cld creation finished");
    /*
      if(SY>1874 && SY<1909) yDisplay = '光绪' + (((SY-1874)==1)?'元':SY-1874)
      if(SY>1908 && SY<1912) yDisplay = '宣统' + (((SY-1908)==1)?'元':SY-1908)
      if(SY>1911 && SY<1950) yDisplay = '民国' + (((SY-1911)==1)?'元':SY-1911)
      if(SY>1949) yDisplay = '共和国' + (((SY-1949)==1)?'元':SY-1949)
    */
         
    document.getElementById("gz").innerHTML = '  农历' 
    + cyclical(SY-1900+36) + '年   【'+Animals[(SY-4)%12]+'】';
            log(1,  "innerHTML of gz is "+document.getElementById("gz").innerHTML);
       //YMBG.innerHTML = " " + SY + "<BR> " + monthName[SM];
            
    for(i=0;i<42;i++) {
     
    sObj = document.getElementById('sd'+ i);
    lObj = document.getElementById('ld'+ i);
     
    sObj.style.background = '';
      lObj.style.background = '';
     
    sD = i - cld.firstWeek;
     
    if(sD>-1 && sD<cld.length) { //日期内      
    sObj.innerHTML = sD+1;
    if(cld[sD].isToday){
    //设置今天的背景色
    sObj.style.background = 'red';
    //lObj.style.background = 'red';
    }
          
    sObj.style.color = cld[sD].color;//国定假日颜色
          
    if(cld[sD].lDay==1) //显示农历月
    lObj.innerHTML = '<b>'+(cld[sD].isLeap?'闰':'') 
    + cld[sD].lMonth + '月' 
    + (monthDays(cld[sD].lYear,cld[sD].lMonth)==29?'小':'大')+'</b>';
    else
        lObj.innerHTML = cDay(cld[sD].lDay);
          
    s=cld[sD].lunarFestival;
    if(s.length>0) {
    //农历节日名称大于5个字截去
    //if(s.length>5) s = s.substr(0, 3)+'…';
    if(s.length>7) s = s.substr(0, 5)+'…';
    s = s.fontcolor('#ff5f07');
    }
    else {//国历节日
    s=cld[sD].solarFestival;
    if(s.length>0) {
    //阳历节日名称截去
    //size = (s.charCodeAt(0)>0 && s.charCodeAt(0)<128)?8:4;
    size = (s.charCodeAt(0)>0 && s.charCodeAt(0)<128)?9:5;
    if(s.length>size+1) s = s.substr(0, size-1)+'…';
    s = s.fontcolor('#0168ea');
    }
    else { //廿四节气
    s=cld[sD].solarTerms;
    if(s.length>0) s = s.fontcolor('#44d7cf');
    }
    }
    if(s.length>0) lObj.innerHTML = s;
     
    }
    else {//非日期
    sObj.innerHTML = ' ';
    lObj.innerHTML = ' ';
    }
          }
    }
    
    
    
    
    function changeCld() {
    var y,m;
    y = document.getElementById("sy").selectedIndex + 1901;
    m = document.getElementById("sm").selectedIndex;
          drawCld(y,m);
    }
    
    
    function pushBtm(K) {
    switch (K){
    case 'YU' :
    if(document.getElementById("sy").selectedIndex > 0)
          document.getElementById("sy").selectedIndex--;
    break;
    case 'YD' :
    if(document.getElementById("sy").selectedIndex < 149) 
    document.getElementById("sy").selectedIndex++;
          break;
    case 'MU' :
    if(document.getElementById("sm").selectedIndex > 0) {      
    document.getElementById("sm").selectedIndex--;
    }
    else {
    document.getElementById("sm").selectedIndex = 11;
    if(document.getElementById("sy").selectedIndex > 0) 
    document.getElementById("sy").selectedIndex--;
    }
    break;
    case 'MD' :
    if(document.getElementById("sm").selectedIndex < 11) {
    document.getElementById("sm").selectedIndex++;
    }
    else {
    document.getElementById("sm").selectedIndex = 0;
    if(document.getElementById("sy").selectedIndex < 149) 
    document.getElementById("sy").selectedIndex++;
    }
    break;
    default :
    document.getElementById("sy").selectedIndex = tY - 1901;
    document.getElementById("sm").selectedIndex = tM;
    }
    changeCld();
    }
    
    
    //用detail层显示详细信息日期资料
    function mOvr(v) {
    
    
    var festival = document.getElementById("festival");
    var datedetail = document.getElementById("datedetail");
    
    
    var sObj = document.getElementById('sd'+ v);
    //alert(v);
    var d = sObj.innerHTML - 1;
         
    if( sObj.innerHTML != '' ) {
    sObj.style.cursor = 'move';
    if(cld[d].solarTerms == '' 
    && cld[d].solarFestival == '' 
    && cld[d].lunarFestival == '')
    {
    festival.innerHTML = "";
    festival.style.display = "none";
    }
    else
    {
    
    festival.innerHTML = cld[d].solarTerms + ' ' + cld[d].solarFestival + ' ' + cld[d].lunarFestival;
    festival.style.display = "block";
    }
    datedetail.innerHTML = cld[d].sYear +' 年 '+ cld[d].sMonth
    + ' 月 '+cld[d].sDay +' 日<br />星期' + cld[d].week + '<br />'
    + '<span>农历' + (cld[d].isLeap?'闰 ':' ')
    + cld[d].lMonth + ' 月 ' + cld[d].lDay + ' 日<br />'
    + cld[d].cYear + '年 ' + cld[d].cMonth
    + '月 ' + cld[d].cDay + '日</span>';
    
    
    if (show == 0) {
    dStyle.left = (x + offsetx - (width/2)) + "px";
    dStyle.top = (y + offsety) + "px";
        dStyle.visibility = "visible";
        show = 1;
    }
    }
    }
    
    
    //清除详细日期资料
    function mOut() {
    if ( cnt >= 1 ) { sw = 0 }
    if ( sw == 0 ) { show = 0; dStyle.visibility = "hidden";}
    else cnt++;
    }
    
    
    //获取鼠标坐标
    function mEvn(e) {
    if (!show) return;
    if(window.event){
    x = event.x ;
    y = event.y ;
    if (document.body.scrollLeft){
    x += document.body.scrollLeft; 
    y += document.body.scrollTop;
    } 
    // changed by hmisty 2005/07/23
          dStyle.left = (x + offsetx-(width/2)) + "px";
          dStyle.top = (y + offsety) + "px";
    }
    else {
          dStyle.left = (e.pageX + offsetx-(width/2)) + "px";
          dStyle.top = (e.pageY + offsety) + "px";
    }
    }
    
    
    function changeTZ() {
       document.getElementById("city").innerHTML = document.getElementById("tz").value.substr(6);
       setCookie("TZ",document.getElementById("tz").selectedIndex);
    }
    
    
    function tick() {
    var today;
    today = new Date();
    document.getElementById("clock").innerHTML = today.getFullYear() + "年"
    + today.getMonth() + "月" + today.getDay() + "日" + today.getTime();
    /*
      document.getElementById("clock").innerHTML = today.toLocaleString().replace(/(年|月)/g, "/").replace(/日/, ""); 
      document.getElementById("clock").innerHTML = TimeAdd(today.toGMTString(), document.getElementById("tz").value);
    */
    //alert(document.getElementById("clock").innerHTML);
          window.setTimeout("tick()", 1000);
    }
    
    
    function setCookie(name, value) {
    var today = new Date()
    var expires = new Date()
    expires.setTime(today.getTime() + 1000*60*60*24*365)
    document.cookie = name + "=" + escape(value)+ "; expires=" + expires.toGMTString()
    }
    
    
    function getCookie(Name) {
       var search = Name + "=";
       if(document.cookie.length > 0) {
          offset = document.cookie.indexOf(search);
          if(offset != -1) {
             offset += search.length;
             end = document.cookie.indexOf(";", offset);
             if(end == -1) end = document.cookie.length;
             return unescape(document.cookie.substring(offset, end));
          }
          else return "";
       }
    }
    //新增
    function fillSelect() {
    syd = document.getElementById("sy");
    syd.innerHTML = "";
    for(i=1900;i<2050;i++)
    {
    ins = document.createElement("OPTION");
    ins.innerHTML = i;
    syd.appendChild(ins);
    }
    smd = document.getElementById("sm");
    smd.innerHTML = "";
    for(i=1;i<13;i++)
    {
    ins = document.createElement("OPTION");
    ins.innerHTML = i;
    smd.appendChild(ins);
    }
    }
    //新增
    function fillCalendar() {
    var gNum;
    var tablex = document.createElement("table");
    tablex.setAttribute("id","week");
    for(i=0;i<6;i++) {
    var trx1 = document.createElement("tr");
    var trx2 = document.createElement("tr");
    trx1.setAttribute("class","tr1");
    trx2.setAttribute("class","tr2");
    for(j=0;j<7;j++) {
    gNum = i*7+j;
    var tdx = document.createElement("td");
    tdx.setAttribute("id","sd"+gNum);
    tdx.setAttribute("onMouseOver",'mOvr('+gNum+')');
    tdx.setAttribute("onMouseOut","mOut()");
    if(j == 0){
    tdx.setAttribute("class","aorange");
    }
    else if(j == 6){
    if(i%2==1) tdx.setAttribute("class","aorange");
    else tdx.setAttribute("class","agreen");
    }
    else{
    tdx.setAttribute("class","one");
    }
    trx1.appendChild(tdx);
    
    tdx = document.createElement("td");
    tdx.setAttribute("id","ld"+gNum);
    tdx.setAttribute("onMouseOver",'mOvr('+gNum+')');
    tdx.setAttribute("onMouseOut","mOut()");
    trx2.appendChild(tdx);
    }
    tablex.appendChild(trx1);
    tablex.appendChild(trx2);
    }
    document.getElementById("calendar").appendChild(tablex);
    }
    //界面初始化
    function initial() {
    //select
    
    dStyle = document.getElementById("detail").style;
    //fillSelect();
    //fillCalendar();
    
    
    document.getElementById("sy").selectedIndex=tY-1901;
    document.getElementById("sm").selectedIndex=tM;
    log(1,  "initial call drawCld() now");
    drawCld(tY,tM);
         
    //document.getElementById("tz").selectedIndex=getCookie("TZ");
    //if(document.getElementById("tz").selectedIndex<1)
    // document.getElementById("tz").selectedIndex=39;
    //changeTZ();
    //tick();
    
    
    
    
    }
    
    
    function TimeAdd(UTC,T)
    {
    var PlusMinus, DST, y;
    //alert(T);
    alert(UTC);
    if (T.substr(0,1) == "-"){
    PlusMinus = -1;
    }
    else{
    PlusMinus = 1;
    }
    //UTC = UTC.substr(1
    }
    
    
    </script>
    </head>
    <body οnlοad="initial()">
    
    
    <table width="100%" border="0" cellspacing="0" cellpadding="0" style="background-color:#FFFFFF; margin:auto;">
      <tr>
        <td>
    <table width="600" cellpadding="0" cellspacing="0" style="border:1px solid #666;" align="center">
      <tr>
        <td colspan="2" valign="top">
    <div id="date" style="text-align:center;">
          <p>公历
            <select name="select" id="sy" οnchange="changeCld()">
                <option>1901</option>
                <option>1902</option>
                <option>1903</option>
                <option>1904</option>
                <option>1905</option>
                <option>1906</option>
                <option>1907</option>
                <option>1908</option>
                <option>1909</option>
                <option>1910</option>
                <option>1911</option>
                <option>1912</option>
                <option>1913</option>
                <option>1914</option>
                <option>1915</option>
                <option>1916</option>
                <option>1917</option>
                <option>1918</option>
                <option>1919</option>
                <option>1920</option>
                <option>1921</option>
                <option>1922</option>
                <option>1923</option>
                <option>1924</option>
                <option>1925</option>
                <option>1926</option>
                <option>1927</option>
                <option>1928</option>
                <option>1929</option>
                <option>1930</option>
                <option>1931</option>
                <option>1932</option>
                <option>1933</option>
                <option>1934</option>
                <option>1935</option>
                <option>1936</option>
                <option>1937</option>
                <option>1938</option>
                <option>1939</option>
                <option>1940</option>
                <option>1941</option>
                <option>1942</option>
                <option>1943</option>
                <option>1944</option>
                <option>1945</option>
                <option>1946</option>
                <option>1947</option>
                <option>1948</option>
                <option>1949</option>
                <option>1950</option>
                <option>1951</option>
                <option>1952</option>
                <option>1953</option>
                <option>1954</option>
                <option>1955</option>
                <option>1956</option>
                <option>1957</option>
                <option>1958</option>
                <option>1959</option>
                <option>1960</option>
                <option>1961</option>
                <option>1962</option>
                <option>1963</option>
                <option>1964</option>
                <option>1965</option>
                <option>1966</option>
                <option>1967</option>
                <option>1968</option>
                <option>1969</option>
                <option>1970</option>
                <option>1971</option>
                <option>1972</option>
                <option>1973</option>
                <option>1974</option>
                <option>1975</option>
                <option>1976</option>
                <option>1977</option>
                <option>1978</option>
                <option>1979</option>
                <option>1980</option>
                <option>1981</option>
                <option>1982</option>
                <option>1983</option>
                <option>1984</option>
                <option>1985</option>
                <option>1986</option>
                <option>1987</option>
                <option>1988</option>
                <option>1989</option>
                <option>1990</option>
                <option>1991</option>
                <option>1992</option>
                <option>1993</option>
                <option>1994</option>
                <option>1995</option>
                <option>1996</option>
                <option>1997</option>
                <option>1998</option>
                <option>1999</option>
                <option>2000</option>
                <option>2001</option>
                <option>2002</option>
                <option>2003</option>
                <option>2004</option>
                <option>2005</option>
                <option>2006</option>
                <option>2007</option>
                <option>2008</option>
                <option>2009</option>
                <option>2010</option>
                <option>2011</option>
                <option>2012</option>
                <option>2013</option>
                <option>2014</option>
                <option>2015</option>
                <option>2016</option>
                <option>2017</option>
                <option>2018</option>
                <option>2019</option>
                <option>2020</option>
                <option>2021</option>
                <option>2022</option>
                <option>2023</option>
                <option>2024</option>
                <option>2025</option>
                <option>2026</option>
                <option>2027</option>
                <option>2028</option>
                <option>2029</option>
                <option>2030</option>
                <option>2031</option>
                <option>2032</option>
                <option>2033</option>
                <option>2034</option>
                <option>2035</option>
                <option>2036</option>
                <option>2037</option>
                <option>2038</option>
                <option>2039</option>
                <option>2040</option>
                <option>2041</option>
                <option>2042</option>
                <option>2043</option>
                <option>2044</option>
                <option>2045</option>
                <option>2046</option>
                <option>2047</option>
                <option>2048</option>
                <option>2049</option>
            </select>
            年
            <select name="select2" id="sm" οnchange="changeCld()">
              <option>1</option>
              <option>2</option>
              <option>3</option>
              <option>4</option>
              <option>5</option>
              <option>6</option>
              <option>7</option>
              <option>8</option>
              <option>9</option>
              <option>10</option>
              <option>11</option>
              <option>12</option>
            </select>
            月
            <span id="gz"> </span> 
          </p>
      </div>
        </td>
      </tr>
      <tr>
        <td align="center" valign="top">
    <div id="calendar">
          <div id="detail">
            <div id="datedetail"></div>
            <div id="festival"></div>
          </div>
          <table id="calendarhead">
            <tr>
              <td>日</td>
              <td>一</td>
              <td>二</td>
              <td>三</td>
              <td>四</td>
              <td>五</td>
              <td>六</td>
            </tr>
          </table>
          <table id="week">
            <tr class="tr1">
              <td class="aorange" οnmοuseοut="mOut()" οnmοuseοver="mOvr(0)" id="sd0"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(1)" id="sd1"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(2)" id="sd2"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(3)" id="sd3"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(4)" id="sd4"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(5)" id="sd5"></td>
              <td class="agreen" οnmοuseοut="mOut()" οnmοuseοver="mOvr(6)" id="sd6"></td>
            </tr>
            <tr class="tr2">
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(0)" id="ld0"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(1)" id="ld1"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(2)" id="ld2"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(3)" id="ld3"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(4)" id="ld4"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(5)" id="ld5"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(6)" id="ld6"></td>
            </tr>
            <tr class="tr1">
              <td class="aorange" οnmοuseοut="mOut()" οnmοuseοver="mOvr(7)" id="sd7"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(8)" id="sd8"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(9)" id="sd9"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(10)" id="sd10"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(11)" id="sd11"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(12)" id="sd12"></td>
              <td class="aorange" οnmοuseοut="mOut()" οnmοuseοver="mOvr(13)" id="sd13"></td>
            </tr>
            <tr class="tr2">
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(7)" id="ld7"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(8)" id="ld8"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(9)" id="ld9"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(10)" id="ld10"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(11)" id="ld11"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(12)" id="ld12"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(13)" id="ld13"></td>
            </tr>
            <tr class="tr1">
              <td class="aorange" οnmοuseοut="mOut()" οnmοuseοver="mOvr(14)" id="sd14"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(15)" id="sd15"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(16)" id="sd16"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(17)" id="sd17"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(18)" id="sd18"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(19)" id="sd19"></td>
              <td class="agreen" οnmοuseοut="mOut()" οnmοuseοver="mOvr(20)" id="sd20"></td>
            </tr>
            <tr class="tr2">
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(14)" id="ld14"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(15)" id="ld15"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(16)" id="ld16"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(17)" id="ld17"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(18)" id="ld18"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(19)" id="ld19"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(20)" id="ld20"></td>
            </tr>
            <tr class="tr1">
              <td class="aorange" οnmοuseοut="mOut()" οnmοuseοver="mOvr(21)" id="sd21"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(22)" id="sd22"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(23)" id="sd23"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(24)" id="sd24"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(25)" id="sd25"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(26)" id="sd26"></td>
              <td class="aorange" οnmοuseοut="mOut()" οnmοuseοver="mOvr(27)" id="sd27"></td>
            </tr>
            <tr class="tr2">
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(21)" id="ld21"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(22)" id="ld22"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(23)" id="ld23"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(24)" id="ld24"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(25)" id="ld25"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(26)" id="ld26"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(27)" id="ld27"></td>
            </tr>
            <tr class="tr1">
              <td class="aorange" οnmοuseοut="mOut()" οnmοuseοver="mOvr(28)" id="sd28"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(29)" id="sd29"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(30)" id="sd30"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(31)" id="sd31"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(32)" id="sd32"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(33)" id="sd33"></td>
              <td class="agreen" οnmοuseοut="mOut()" οnmοuseοver="mOvr(34)" id="sd34"></td>
            </tr>
            <tr class="tr2">
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(28)" id="ld28"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(29)" id="ld29"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(30)" id="ld30"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(31)" id="ld31"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(32)" id="ld32"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(33)" id="ld33"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(34)" id="ld34"></td>
            </tr>
            <tr class="tr1">
              <td class="aorange" οnmοuseοut="mOut()" οnmοuseοver="mOvr(35)" id="sd35"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(36)" id="sd36"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(37)" id="sd37"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(38)" id="sd38"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(39)" id="sd39"></td>
              <td class="one" οnmοuseοut="mOut()" οnmοuseοver="mOvr(40)" id="sd40"></td>
              <td class="aorange" οnmοuseοut="mOut()" οnmοuseοver="mOvr(41)" id="sd41"></td>
            </tr>
            <tr class="tr2">
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(35)" id="ld35"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(36)" id="ld36"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(37)" id="ld37"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(38)" id="ld38"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(39)" id="ld39"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(40)" id="ld40"></td>
              <td οnmοuseοut="mOut()" οnmοuseοver="mOvr(41)" id="ld41"></td>
            </tr>
          </table>
      </div>
        </td>
        <td valign="top">
    <div id="panel" style="text-align:center">
          <div οnclick="pushBtm('YU')">上一年↑</div>
          <div οnclick="pushBtm('YD')">下一年↓</div>
          <div οnclick="pushBtm('MU')">上一月↑</div>
          <div οnclick="pushBtm('MD')">下一月↓</div>
          <div οnclick="pushBtm('')">当前月</div>
      </div>
        </td>
      </tr>
      </table>
     </td>
      </tr>
    </table>
    </body>
    </html>


    展开全文
  • 奶奶90多岁,喜欢看万年历,年纪大了,买的现成的万年历书字都太小,奶奶看不清,年份也不够了 很多都到2020年,因此自己写了程序,生成了本从1901年到2100年的万年历数据 ,希望有对万年历感兴趣的下载
  •    电子万年历是单片机系统的一个应用,由硬件和软件相配合使用。硬件由主控器、时钟电路、温度检测电路、显示电路、键盘接口5个模块组成。主控模块用AT89C52、时钟电路用时钟芯片DS1302、显示模块用LED数码管、...

    文末下载完整资料

                           基于51单片机的电子万年历的设计
                                       摘 要
       电子万年历是单片机系统的一个应用,由硬件和软件相配合使用。硬件由主控器、时钟电路、温度检测电路、显示电路、键盘接口5个模块组成。主控模块用AT89C52、时钟电路用时钟芯片DS1302、显示模块用LED数码管、温度检测采用DS18B20温度传感器、键盘接口电路用普通按键接上拉电阻完成;软件利用C语言编程实现单片机程序控制。单片机通过时钟芯片DS1302获取时间数据,DS18B20采集温度信号送该给单片机处理,单片机再把时间数据和温度数据送给74LS154译码,然后通过三极管C9015放大驱动LED数码管显示阳历年、月、日、时、秒、闹钟、星期、温度。
    关键词 电子万年历;单片机;温度传感器;时钟;数码显示

                                   1 引言
       随着微电子技术和超大规模集成电路技术的不断发展,家用电子产品不但种类日益丰富,而且变得更加经济实用,单片微型计算机体积小、性价比高、功能强、可靠性高等独有的特点,在各个领域得到了广泛的应用。电子万年历是一种应用非常广泛的日常计时工具,数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用。LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。功能也越来越齐全,除了公历年月日、时分秒、星期显示及闹铃。但通过我们对各种电子钟表、历的不断观察总结发现目前市场的钟、历都存在一些不足之处,比如:时钟不精确、产品成本太高、无环境温度显示等,这都给人们的使用带来了某些不便。为此设计了一种功能全面、计时准确、成本低廉的基于51单片机的万年历。
                                   2 功能要求
       1. 万年历能用数码管显示阳历年、月、日、星期、[小]时、分、秒并设置指定时间的闹铃。
       2. 数字式温度计要求测温范围-50~100°C, LED数码管直读显示。
       3 方案论证与设计
    3.1 控制部分的方案选择
       1. 用可编程逻辑器件设计。可采用ALTERA公司的FLEX10K系列PLD器件。设计起来结构清晰,各个模块,从硬件上设计起来相对简单,控制与显示的模块间的连接也会比较方便。但是考虑到本设计的特点,EDA在功能扩展上比较受局限,而且EDA占用的资源也相对多一些。从成本上来讲,用可编程逻辑器件来设计也没有什么优势。
       2. 用凌阳16位单片机设计。凌阳16位单片机有丰富的中断源和时基,方便本实验的设计。它的准确度相当高,并且C语言和汇编兼容的编程环境也很方便来实现一些递归调用。I/O口功能也比较强大,方便使用。用凌阳16位单片机做控制器最有特色的就是它的可编程音频处理,可完成语音的录制播放和识别。这些都方便对设计进行扩展,使设计更加完善。成本也相对低一些。但是,在控制与显示的结合上有些复杂,显示模组资源相对有限,而且单片机的稳定性不是很高。
       3. 主控芯片使用51系列AT89C52单片机,时钟芯片用美国DALLAS公司推出的一种高性能、低功耗、带RAM的时钟DS1302。采用DS1302作为主要计时芯片,可以做到计时准确。更重要的是,DS1302可以在很小电流的后备电源(2.5~5V电源,在2.5V时耗电小于300nA)下继续计时,停电后时钟无需重新调整,并可编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电,还可自设闹铃,阳历、星期与年月日自动对应。本系统采用了此方案。
    3.2 测温部分的方案选择
       1.在日常生活及工农业生产中经常要乃至温度的检测及控制,传统的测温元件有热电偶和热电阻。而热电偶和热电阻测一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,硬件电路复杂,软件调试复杂,制作成本高。
       2.与前面相比,采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55~125°C,最大分辨率可达0.0625°C。DS18B20可以直接读出被测温度值,而且采用3线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。
    3.3 显示部分的方案选择
       1. 液晶显示方式。液晶显示效果出众,可以运用菜单项来方便操作,但是在显示时,特别是使用秒表功能时扫描速度跟不上,屏幕会有明显的闪烁。而且由于61板的存储空间有限,液晶显示就不能与语音播抱程序同时实现。这些大大影响了电子万年历的性能。
       2. 相比液晶显示,8段数码管虽然操作比液晶显示略显繁琐,但可视范围十分宽,而且经济实惠,也不需要复杂的驱动程序。所以最后选择LED数码管显示方案。
    综上所述,按照系统设计功能的要求,确定硬件系统由主控制器、时钟模块、测温电路、显示模块、键盘接口共5个模块组成,总体系统构成框图如图3.1所示。

    在这里插入图片描述
    4 系统硬件电路设计
       电子万年历电路原理图见附件一,系统由主控制器AT89C52、时钟芯片DS1302、温度传感器DS18B20传感器、显示电路及键盘扫描电路组成。
    4.1 主控器 AT89C52
       ATMEL公司生产的AT89C52单片机采用高性能的静态80C51设计,由先进工艺制造,并带有非易失性Flsah程序存储器。它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。主要性能特点有:
       8KB Flash ROM,可以檫写1000次以上,数据保存10年。
       256字节内部RAM。
        电源控制模式
       时钟可停止和恢复;
       空闲模式;
       掉电模式。
       6个中断源。
       4个中断优先级。
       4个8位I/O口。
       全双工增强型UART。
       3个16位定时/计数器,T0、T1(标准80C51)和增加的T2(捕获和比较)。
       全静态工作方式:0~24MHz。
    4.2 时钟电路 DS1302
    4.2.1. DS1302的性能特性
       实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;
       用于高速数据暂存的31×8位RAM;
       最少引脚的串行I/O;
    2.5~5.5V电压工作范围;
    2.5V时耗电小于300nA;
       用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;
    简单的3线接口;
       可选的慢速充电(至Vcc1)的能力。
       DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动调整,还包括闰年校正的功能。时钟的运行可以采用24h或带AM(上午)/PM(下午)的12h格式。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302有主电源/后备电源双电源引脚:Vcc1在单电源与电池供电的系统中提供低电源,并提供低功率的电池备份;Vcc2在双电源系统中提供主电源,在这种运用方式中,Vcc1连接到备份电,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由Vcc1或Vcc2中较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电;当Vcc2小于Vcc时, DS13026由Vcc1供电。
    4.2.2 DS1302数据操作原理
       DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个将被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作是写入时写入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。
       如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc大于等于2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的引脚及内部结构图如图4.1所示,表4.1为各引脚的功能。
    DS1302的控制字如图4.2所示。控制字节的最高位(位7)必须是逻辑1;如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1表示存取RAM数据。位5~1(A4~A0)指示操作单元的地址。最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。
       为了提高对32个地址的寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能寄存数据。在多字节方式中,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有31字节。不管是否写了全部31字节,所写的每一字节都将传送至RAM。
    在这里插入图片描述
       DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字见表3.2,其中奇数为读操作,偶数为写操作。
    时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止震荡,进入低功耗的备份方式。通常在对DS1302进行写操作时(如进入时钟调整程序),停止震荡。当它为0时,时钟将开始启动。
       AM-PM/12-24[小]时方式:[小]时寄存器的位7定义为12或24[小]时方式选择位。它为高电平时,选择12[小]时方式。在此方式下,位5是AM/PM位,此位是高电平时表示PM低电平表示AM。在24[小]时方式下,位5为第二个10[小]时位(20~23h)。

    在这里插入图片描述
       DS1302的晶震选用32.768kHz,电容推荐值为33pF,因为震荡频率较低,也可以不接电容,对计时精度影响不大。
    4.3 测温电路的设计
       测温电路主要使用温度传感器DS18B20,由于精度要求不高所以采用2位共阳LED数码管以动态扫描法实现温度显示。其设计原理图如附件一所示。
    4.3.1 温度传感器工作原理
       DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要示通过简单的编程    实现9~12位的数字值读数方式。DS18B20的性能特点如下:
       独特的单线接口仅需要一个端口引脚进行通信;
       多个DS18B20可以并联在唯一的三线上,实现多点组网功能;
       无须外部器件;
       可通过数据线供电,电压范围为3.0~3.5V;
       零待机功耗;
       温度以9或12数字量读出;
       用户可定义的非易失性温度报警设置;
       报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
       负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
       DS18B20采用3脚PR—35封装或8脚SOIC封装,其内部结构框图如图4.3所示。
       64位ROM的位结构如图4.4所示。开始8位是产品类型的编号,接着是每个器件的唯一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。非易失性温度报警触发器TH和TL,可通过软件写入户报警上下限。
       DS18B20温度传感器的内部存储器还包括一个调整暂存RAM和一个易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节存储器,结构如图4.5所示。头2个字节包含测得的温度信息,第3和第4节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时按此寄存器中的分辨率将温度转换为相应
    5 系统程序的设计
    5.1 阳历程序设计
       因为使用了时钟芯片DS1302,阳历程序只需从DS1302各寄存器中读出年、周、月、日、[小]时、分、秒等数据,再处理即可。在首次对DS1302进行操作之前,必须对它进行初始化,然后从DS1302中读出数据,再经过处理后,送给显示缓冲单元。阳历程序流程图见图5.1所示。
    5.2 时间调整程序设计
       调整时间用5个调整按钮,1个作为移位、控制用,2个作为加和减用,还有2个作为闹钟调整使用,分别定义为控制按钮、加按钮、减按钮、闹钟加按纽、闹钟减按纽。在调整时间过程中,要调整的位与别的位应该有区别。所以增加了闪烁功能,即调整的位一直在闪烁,直到调整下一位。闪烁原理就是,让要调整的一位每隔一定时间熄灭一次,比如说50ms。利用定时器计时,当达到50ms溢出时,就送给该位熄灭符,在下一次溢出时,再送正常显示的值,不断交替,直到调整该位结束。此时送正常显示值给该位,再进入下一位调整闪烁程序。时间调整程序流程图如图5.2所示。
    5.3 温度程序设计
       系统程序主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序、显示数据刷新子程序等等。
    5.3.1 主程序
       主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值,温度测量每1s进行一次。其程序流程图见5.3。
    5.3.2 读出温度子程序
       主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图5.4所示。
    5.3.3 温度转换命令子程序
       温度转换子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如图5.5所示。


    全套资料免费下载:
    关注v-x-公-众-号:【嵌入式基地
    后-台-回-复:【毕业设计】 即可获资料
    回复【编程】即可获取
    包括有:C、C++、C#、JAVA、Python、JavaScript、PHP、数据库、微信小程序、人工智能、嵌入式、Linux、Unix、QT、物联网、算法导论、大数据等资料
    在这里插入图片描述

    展开全文
  • Java制作的音乐万年历,是一个Applet版的小程序,代码中Calendar是描述日历和时钟的类,AudioPlayer是描述底部音乐播放条的类.Film是描述滚动图片的类。保证绘图时间和睡眠时间相加为一秒, 若绘图超过一秒,则线程不...
  • php漂亮万年历(日历)源码,因工作中开发系统需要使用到日历程序,但网上下载的日历插件,往往无法方便地辨别日数,所以自己写了一个傻瓜式的日历程序,基本上是使用PHP中的循环语句和CSS样式控制来实现,比较简单...
  • 基于Java实现的万年历

    2019-07-24 20:01:45
    本图像生成器含一个主体框架和三个面板:查看面板、日期面板、时钟面板,框架包含一个“查看”按钮和两个下拉式菜单:年份和月份下拉式菜单。 关键词:Java;GUI;Runnable 点击此处下载文档和源码 ...

    摘 要

    本课程设计的目的及意义是:通过代码实现将理论知识和具体实践相结合,巩固提高了对java的相关方法与概念的理解,使学生的发散思维及动手能力进一步加强,和对计算机的进一步理解。

    本图像生成器含一个主体框架和三个面板:查看面板、日期面板、时钟面板,框架包含一个“查看”按钮和两个下拉式菜单:年份和月份下拉式菜单。

    关键词:Java;GUI;Runnable

    点击此处下载文档和源码

     

     

     

    展开全文
  • [小制作]古董万年历升级WiFi授时 STM32+ESP8266故事,还得从只蝙蝠说起…先来看一下前后对比硬件方面升级之前升级之后功能方面调用序列图-这里只放大概 详细的还得结合程序说程序流程图STM32流程图ESP8266流程图...
  • 在Excel模板中,可以下载到很多日历模板。...其实,万年历公式真的不用这么复杂,只需要简单的公式即可,下面就跟小编一起做一个实用的万年历。先看效果:1、设置开始日期公式在第一个单元格中输入公式:=DATE(C2,C3...
  • 在Excel模板中,可以下载到很多日历模板...其实,万年历公式真的不用这么复杂,只需要简单的公式即可,下面就一起做一个实用的万年历。先看效果:1、设置开始日期公式在第一个单元格中输入公式:=DATE(C2,C3,1)-(WEE...
  • 强烈推荐您下载一份寿星万年历的源码进行对照参考。 真正的“万年”历,提供公元 -4712 年到公元 9999年 的日期查询功能,可让您告别查表算法。 事先声明一下,对于 C# 和 Javascript,我只是一个初学者,因此如果...
  • 元旦了,发布一个2009年的年历模板

    千次阅读 2008-12-28 20:03:00
    元旦了,发布一个2009年的年历模板。(下载地址在这里:http://johnsuna.download.csdn.net/找到“2009年万年历模板”之后点击下载下载之后的文件名为:ChineseCalendar4c_3r.png)你可以使用Photoshop或其他图像...
  • 都是一些仿真和程序,为大家的学习提供便利,也为大家提供一个学习单片机的学习论坛叫闯客网技术论坛,这个也是他们的单片机技术交流群:787059199,真的能够学习到很多东西下载链接:...
  • C语言实现一个走迷宫小游戏(深度优先算法)

    千次阅读 多人点赞 2020-06-02 17:52:01
    这次是使用C语言做一个小游戏程序,三选一(2048、8皇后和迷宫游戏),我选择的是迷宫(文章末尾有源码下载链接以及演示视频链接)。个人认为这个程序的难点在于迷宫地图的绘制,也就是怎么建立一个迷宫。如果迷宫...
  • 中华老黄历旧版本是款非常好用的日历app,无论你想查今年...中华老黄历万年历原版特色细节① 运程:全新运程界面,换姿势看黄历;专业命理测算,帮你开运转运旺运!② 万年历/农历:农历黄历随便看,假日节气道...
  • 之前写过一个关于teacan的中国天气网天气爬取方法,采取的是单独的py文件定时执行天气爬取,然后面程序内调用数据。好像这种模块化的方法更好一些,但我觉得有两点忧虑,1、如果天气网把数据格式改了,则这个爬虫就...
  • 8超炫酷仿HTML5动画源码

    千次阅读 2017-05-02 09:17:33
    这是一款基于jQuery的日历插件,这款日历插件和之前分享的日历控件有很大差异,它是一本万年历,包含了农历已经老皇历的功能,是一个挑好日子的工具。同时日历还可以查看本年度的放假安排,功能非常强大。有兴趣的...
  • 能自定义、个性化的网站导航,把自己常用的网站链接放到桌面上,一点即达。分为“个人网址”“常用”“生活”“工具”四类。  万年历:  带有农历、日期、星期、...这是本人收藏的一个小程序,现在拿出来跟大家分享。
  • Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB...
  • Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB...
  • Java开发技术大全(500源代码).

    热门讨论 2012-12-02 19:55:48
    HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...
  • 当初本袁为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载!...Calendar万年历1目标文件EJB 模拟银行ATM流程及操作源代码6目标文件,EJB来模拟银...
  • Apktool重打包Apk详细介绍

    万次阅读 2017-10-10 23:11:01
    1、下载软件 首先下载apktool.bat和apktool.jar,这两个工具我已上传到了github上,可以直接下载。 ... 我将这两个软件放入到D:\apktool目录下 ...从华为应用市场下载一个没有加固的apk(万年历日历黄历),
  • 吴省平简单打铃系统是一个简单又方便的打铃系统,使用范围广,系统设置有万年历,钟表,快来下载体验吧!
  • SAP HCM需要一个根据农历春节所在的公历日期月份来决定是否计算13薪。 搜索之后发现农历日期没有固定的数学计算规则,是根据地球公转来的。具体过程比较复杂。现在大部分的万年历其实都只能查到农历1900-2100年,...

空空如也

空空如也

1 2 3 4 5
收藏数 84
精华内容 33
关键字:

下载一个万年历