电子时钟 修正时间误差

/*-----------------------------------------------
  名称:可修改时间的电子时钟
  内容:通过定时器计时
  时间:完成于2011年03月15日
------------------------------------------------*/
#include<reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
code unsigned char tab[]=    {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管 0-9
unsigned char second_shiwei;//秒的个位与十位
unsigned char second_gewei;
unsigned char minute_shiwei;//分的个位与十位
unsigned char minute_gewei;
unsigned char hour_shiwei;  //时的个位与十位 
连锁系统
unsigned char hour_gewei;
unsigned char i=0; 
unsigned char j=0;        //轮换输入时分秒
unsigned char setflag=1;    //转换标志
unsigned char setflag1=1;  //输入完成标志位
static unsigned char second=0,minute=0,hour=0,count;//定义时分秒以及100次计数器
sbit key1=P3^1;  //每按一次加一
sbit key0=P3^0;  //每按一次加十
/******************************************************************/
/*                    延时函数                                    */
/******************************************************************/
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/*                    主函数                                      */
/******************************************************************/
main()
{
TMOD |=0x01;//定时器设置 10ms in 12M crystal,工作在模式1,16位定时
TH0=0xd8;
TL0=0xf0;
IE=0x87;    //开外中断和定时器0中断
IP=0X01;    //设置外中断0优先级
IT0=1;      //外中断设置为边沿触发方式
IT1=1;
TR0=1;    //打开定时开关
while(1)
  {
    P0=second_gewei;//显示秒
    P2=7;
    delay(300); 
    P0=second_shiwei;
    P2=6;
    delay(300);
细胞分离培养
    P0=minute_gewei;//显示分
    P2=4;
    delay(300);
    P0=minute_shiwei;
    P2=3;
    delay(300);
    P0=hour_gewei;  //显示小时
    P2=1;
    delay(300);
    P0=hour_shiwei;
    P2=0;
    delay(300);
 
 
  }
}
/******************************************************************/
/*                    定时器中断函数                              */
/******************************************************************/
void tim(void) interrupt 1 using 1
{
 
  TH0=0xd8;            //重新赋值
真空马桶  TL0=0xf0;
  count++;           
  if (count==100)      //100x10ms=1S,大致延时时间
电子定时器      {
        count=0;
        second++;
        P0=0x40;//显示-
        P2=5;
        delay(300);  //短暂延时
        P0=0x40;
        P2=2;
        delay(300); 
        P0=0X00;
        if(second==60)//判断是否到一分钟
          {
            second=0;       
            minute++;
           
          }
        if(minute==60) //判断是否到一小时
          {
            minute=0;
            hour++;
            second+=7;
          }
        if(hour==24)  //判断是否到一天
          {
            hour=0;
          }
   
      }
    second_gewei=tab[second%10];//分别取时分秒的十位与个位
    second_shiwei=tab[second/10];
    minute_gewei=tab[minute%10];
    minute_shiwei=tab[minute/10];
    hour_gewei=tab[hour%10];
    hour_shiwei=tab[hour/10];
}
void int1(void) interrupt 2    //在外中断1中实现时分秒的修改
{
  setflag1=1;
  while(setflag1)
    { setflag=1;
      if(i==0)                //i的作用是改变修改的对象,时,分,秒
        {
溶液聚合          while(setflag)
            {
              P0=tab[second%10];//只显示秒
              P2=7;
              delay(300); 
              P0=tab[second/10];
              P2=6;
              delay(300);
              if(!key0)          //修改秒,每按一次加1
                { delay(15000);
                  second++;
                  if(second>=60)//判断是不是超过60
                  {
                    second=0;
                  }
                }
                             
              if(!key1)          //修改秒,每按一下加10         
                { delay(15000);
                  second+=10;
                  if(second>=60)玻璃磨边
                  {
                    second=0;
                  }
                }
              }
          }
    setflag=1;                    //重新赋值 以备下次使用
     
      if(i==1)
        {
          while(setflag)
            {
              P0=tab[minute%10];
              P2=4;
              delay(300);
              P0=tab[minute/10];
              P2=3;
              delay(300);
              if(!key0)
                { delay(15000);
                  minute++;
                  if(minute>=60)
                  {
                    minute=0;
                  }
                }
              if(!key1)
                { delay(15000);
                  minute+=10;
                  if(minute>=60)

本文发布于:2024-09-22 10:35:39,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/337459.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:中断   修改   时分秒
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议