用定时器写时钟

在页面中可以看到用定时器来写的那些小时钟,今天我们就来简单的实现一下这样的小功能:

实现时钟需要注意到的 是:

1.在获取月份的时候要注意到,getMonth方法是从0开始的,使用的时候要注意的是要加一。

2.用getDay的时候,注意星期日是0,使用的时候要注意。

3.使用定时器的时候要注意要清掉定时器再用。

下面是完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>定时器</title>
</head>
<body>
    <script>
        onload = function (){
            var timer = null;
            var a = new Date();//获取当前时间

            var year = a.getFullYear();
            var mou = getZero(a.getMonth()+1);//月需要注意,是从0开始
            var day = getZero(a.getDate());
            var week = a.getDay();//星期也要注意,星期日是0;

            var hour = getZero(a.getHours());
            var min = getZero(a.getMinutes());
            var sec = getZero(a.getSeconds());

            function getZero(num){
               if(num<10 && num>=0){
                   return '0'+num;
               }else{
                   return num;
                   
               }
            }//用于写前面的0;
            
            function getDat(week){
                switch(week){
                    case 1:
                    week ='一';
                    break;
                    case 2:
                    week ='二';
                    break;
                    case 3:
                    week = '三';
                    break;
                    case 4:
                    week = '四';
                    break;
                    case 5:
                    week = '五';
                    case 6:
                    week = '六';
                    break;
                    case 0:
                    week = '七';
                    break;
                }
                return day;
            }//这是处理星期日的问题的,星期日会出现0;
            
            clearInterval(timer);
            timer = setInterval(function (){
            var a = new Date();//获取当前时间

            var year = a.getFullYear();
            var mou = getZero(a.getMonth()+1);//月需要注意,是从0开始
            var day = getZero(a.getDate());
            var week = a.getDay();//星期也要注意,星期日是0;

            var hour = getZero(a.getHours());
            var min = getZero(a.getMinutes());
            var sec = getZero(a.getSeconds());

             seo.innerHTML='现在的时间是:'+year+'年'+mou+'月'+day+'号'+','+'星期'+week+
            ','+hour+'时'+min+'分'+sec+'秒';
            },1000);
           
        }
    </script>
    <div id="seo"></div>
    <input type="button" value="开始">
    <input type="button" name="" id="" value="暂停">
</body>
</html>

正在学习阶段,有很多值得学习的地方,如有不足,请指出。

/*********************************************************** 实验名称:可调电子钟(数码管显示)示例程序 程序说明:按键S1切换时分,按下S6加一,按下S3减一 ***********************************************************/ #include unsigned char code SEG7[11]={0xC0,/*0*/ 0xF9,/*1*/ 0xA4,/*2*/ 0xB0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xF8,/*7*/ 0x80,/*8*/ 0x90,/*9*/ 0xbf,/*-*/ }; unsigned short int tcount; struct time { unsigned char second; unsigned char minute; unsigned char hour; }time1; /***************************************/ /* 延时子程序 */ /***************************************/ void delay(k) unsigned int k; { unsigned char j; while((k--)!=0) for(j=0;j<125;j++); } /***************************************/ /* 时钟调整子程序 */ /***************************************/ TimeUpDown(n,x,y) unsigned char n,x,y; { if(P3_2==0) { delay(50); if(P3_2==0) { n++; if(n==x) n=0; while(P3_2==0); } } if(P3_3==0) { delay(50); if(P3_3==0) { if(n==0) n=y; else n--; while(P3_3==0); } } return n; } /***************************************/ /* 显示子程序 */ /***************************************/ void display(DisSecondH,DisSecondL,DisMinutH,DisMinutL,DisHourH,DisHourL) unsigned char DisSecondH,DisSecondL,DisMinutH,DisMinutL,DisHourH,DisHourL; { P0=SEG7[DisSecondH]; //显示钟的十位 P2=0xfe; delay(2); P0=SEG7[DisSecondL]; //显示分钟的个位 P2=0xfd; delay(2); P0=0xbf; //显示- P2=0xfb; delay(2); P0=SEG7[DisMinutH]; //显示钟的十位 P2=0xf7; delay(2); P0=SEG7[DisMinutL]; //显示分钟的个位 P2=0xef; delay(2); P0=0xbf; //显示- P2=0xdf; delay(2); P0=SEG7[DisHourH]; //显示小时的个位 P2=0xbf; delay(2); P0=SEG7[Dis
准确延时,数码管显示!用于电子时钟 #include <reg51.h> //*** 函数定义 *** void long_delay(void); // 长延时 void short_delay(void); // 短延时 void delay10ms(unsigned char); // 延时10MS void write7279(unsigned char, unsigned char);// 入到HD7279 unsigned char read7279(unsigned char);//从HD7279读入 void send_byte(unsigned char); // 发送一个字节 unsigned char receive_byte(void); //接收一个字节 void init_timer(); /*定时器T0初始化*/ void conv(); /*时、分、单元及走时单元转换*/ void dirve(); /*时间显示程序*/ void time_adj(); /*时间调整设置*/ unsigned char digit[6]; unsigned char j; unsigned int tmr; unsigned long wait_cnter; unsigned char hour=0,min=0,sec=0; /*时、分、单元清零*/ unsigned char deda=0; /*5mS计数单元清零*/ bit sign; //设置标志位 sbit cs=P1^5; // cs at P1.5 sbit clk=P1^4; // clk 连接于 P1.4 sbit dat=P1^3; // dat 连接于 P1.3 sbit set=P3^7; // key 连接于 P3.7 //****** HD7279A 指令 ****** #define CMD_RESET 0xa4 #define CMD_TEST 0xbf #define DECODE0 0x80 #define DECODE1 0xc8 #define CMD_READ 0x15 #define UNDECODE 0x90 #define RTL_CYCLE 0xa3 #define RTR_CYCLE 0xa2 #define RTL_UNCYL 0xa1 #define RTR_UNCYL 0xa0 #define ACTCTL 0x98 #define SEGON 0xe0 #define SEGOFF 0xc0 #define BLINKCTL 0x88 //*** 主函数 *** main() { for (tmr=0;tmr<0x2000;tmr++); // 上电延时 send_byte(CMD_RESET); // 复位HD7279A //****************************************** // 测试指令演示 //****************************************** send_byte(CMD_TEST); // 指令测试 for (j=0;j<3;j++) // 延时哟3? { delay10ms(100); } send_byte(CMD_RESET); // 清除显示 //********************************************** //时间显示 //********************************************** init_timer();/*定时器T0初始化*/ while(1) { if(set==0) time_adj(); conv(); /*时、分、单元及走时单元转换*/ dirve(); /*时、分、单元显示*/ } } /*定时器T0 5mS初始化*/ void init_timer() { TMOD=0x01; TH0=-(4800/256); TL0=-(4800%256); IE=0x82; TR0=1; } /*5mS定时中断服务子函数*/ void zd(void) interrupt 1 { TH0=-(4800/256); TL0=-(4800%256); deda++; } /*时、分、单元及走时单元转换*/ void conv() { if(deda>=200){sec++;deda=0;} if(sec==60){min++;sec=0;} if(min==60){hour++;min=0;} if(hour==24){hour=0;} } void dirve() { digit[0]=sec%10; //计数个位 write7279(DECODE0,digit[0]); //显示个位 digit[1]=0x80|(sec/10); //计数十位 write7279(DECODE0+1,digit[1]); //显示十位 digit[2]=0x80|(min%10); //计数百位 write7279(DECODE0+2,digit[2]); //显示百位 digit[3]=0x80|(min/10); //计数千位 write7279(DECODE0+3,digit[3]); //显示千位 digit[4]=0x80|(hour%10); //计数万位 write7279(DECODE0+4,digit[4]); //显示万位 digit[5]=hour/10; //计数十万位 write7279(DECODE0+5,digit[5]); } void write7279(unsigned char cmd, unsigned char dta) { send_byte (cmd); send_byte (dta); } unsigned char read7279(unsigned char command) { send_byte(command); return(receive_byte()); } void send_byte( unsigned char out_byte) { unsigned char i; cs=0; long_delay(); for (i=0;i<8;i++) { if (out_byte&0x80) { dat=1; } else { dat=0; } clk=1; short_delay(); clk=0; short_delay(); out_byte=out_byte*2; } dat=0; } unsigned char receive_byte(void) { unsigned char i, in_byte; dat=1; // 设置为输入状态 long_delay(); for (i=0;i<8;i++) { clk=1; short_delay(); in_byte=in_byte*2; if (dat) { in_byte=in_byte|0x01; } clk=0; short_delay(); } dat=0; return (in_byte); } void long_delay(void) { unsigned char i; for (i=0;i<0x30;i++); } void short_delay(void) { unsigned char i; for (i=0;i<8;i++); } // ********************* 延时 n*10ms ********************** void delay10ms(unsigned char time) { unsigned char i; unsigned int j; for (i=0;i<time;i++) { for(j=0;j<0x390;j++) { } } } /*时间调整程序*/ void time_adj() { if(set==0) //有键按下,判断按键时间 { delay10ms(200); //1s延时程序 if(set==0) //大于1s,进入时间设置 { ET0=0; TR0=0; //关定时器0 while(set==0) dirve(); //等键释放 // ET1=1;TR1=1; con=0xF3; //开定时器1,让调整位闪烁 write7279(BLINKCTL,0xF3); do { while(set!=0) dirve(); //等待按键 delay10ms(100); if(set!=0) //小于0.5s,进入分钟设置 { while(set==0) dirve(); //等待按键释放 sign=1; min++; if(min==60)min=0; //分钟1 dirve(); } else sign=0; //大于0.5s,进入小时设置 }while(sign); while(set==0)dirve(); //等待按键释放 // con=0xCF; write7279(BLINKCTL,0xCF); do { while(set!=0) dirve(); //等待按键 delay10ms(100); if(set!=0) //小于0.5s,进入小时设置 { while(set==0) dirve(); //等待按键释放 sign=1; hour++; //小时1 if(hour==24)hour=0; dirve(); } else sign=0; //大于0.5s,结束时间设置 }while(sign); // ET1=0;TR1=0; //关定时器1 ET0=1;TR0=1; //开定时器0 write7279(BLINKCTL,0xFF); } else //小于1s,进入省电模式 { ET0=1; TR0=1; //开定时器0 while(set!=0); //等待按键 do { dirve(); //有键按下,调显示程序消抖 }while(set!=0); //是干扰则继续循环 } while(set==0) dirve(); //等待按键释放 } else ; //无键按下,跳出按键扫描程序 }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值