久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6388|回復: 1
打印 上一主題 下一主題
收起左側

大家給我看看這個電子鐘 的閏年部分怎么樣 有什么問題沒

[復制鏈接]
跳轉到指定樓層
樓主
ID:15854 發表于 2009-8-18 21:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

麻煩大家給我看看 處理閏年問題的時候哪里出錯了

/*時鐘12、24小時轉換--日期--星期*/
/*調整時間 ,日期 --------------------------閏年還有些問題*/
/*只用定時器*/


#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int 

sbit key=P3^2;     //外部中斷位定義  切換時間日期
sbit key1=P3^3;  //外部中斷  12/24小時切換

uint t;   

//dy年份 考慮閏年
uchar ts=55,tm=59,th=11,dd=31,dmi=12,dy=6,week=7;   //時間日期定義 初始化

uchar shu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //不帶小數點  - 0x40
uchar shu1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xf3}; //帶小數點 最后兩個顯示a p 上午下午
uchar dm[]={0,31,28,31,30,31,30,31,31,30,31,30,31};   //一到十二月每個月的天數
uchar wei[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7};

uchar flag=0,flag1=0;   //顯示日期 時間的標志


void time(void) interrupt 1    //50ms
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 t++;
}


void delay(uchar x)
{         //x 1ms
 uchar y;
 for(x;x>0;x--)
  for(y=250;y>0;y--);
}


void display(uchar m,uchar n)  //顯示一位 秒、分...
{
 uchar m_ge,m_shi;
 m_ge=m%10;
 m_shi=m/10;

 P1=wei[n];
 P2=shu[m_shi];
 delay(1);

 P1=wei[n+1];
 P2=shu1[m_ge];
 delay(1);
}


void display_time0(void)    //顯示時間 24
{
 display(th,0);
 display(tm,2);
 display(ts,4);
 display(week,6);
}


void display_time1(void)    //顯示時間 12
{
 display(th%12,0);
 display(tm,2);
 display(ts,4);

 P1=wei[7];
 P2=shu1[10+th/12];
 delay(1);
}


void display_day(void)
{
 display(dy,0);
 display(dmi,2);
 display(dd,4);
}


void display_dt(void)    //顯示時間 日期
{
 
  //one day
  if(t==20)
  {
   t=0;
   ts++;
   if(ts==60)
   {
    ts=0;
    tm++;
    if(tm==60)
    {
     tm=0;
     th++;
     if(th==24)
     {
      th=0;
      dd++;
      week++;
      if(week==8)
       week=1;   //星期week
     }
    }
   }
  }
 
  //閏年二月
//  if(dy/400==0||(dy/100!=0&&dy/4==0))
  if(dy/4==0)        //考慮到實際應用中 年份變化范圍不大所以取年份的后面兩位
   dm[2]=29;
  else
   dm[2]=20;


 
 
  //年月日
  if(dd==dm[dmi]+1)
  {
   dd=1;
   dmi++;
   if(dmi==13)
   {
    dmi=1;
    dy++;
   }
  }

      
  if(key==0)   //時間日期切換
  {
   delay(15);
   if(key==0)
   {
    flag=~flag;
    while(!key);
   }
  }

  if(key1==0)    //12、24切換
  {
   delay(12);
   if(key1==0)
   {
    flag1=~flag1;
    while(!key1);
   }
  }     
  if(flag==0)
   {
    if(flag1==0)  
    display_time0();
    else
    display_time1();
   }
  else
  display_day();
}

uchar add(uchar i,j,n)        //add 1
{
 if(key1==0)
   delay(12);
   if(key1==0)
   while(!key1)   //按著不放 快速加1
   { 
    delay(80);
    while(!key1)
    {
     display(i,n);
     delay(500);
     i++;
     if(i>=j)
      i=0;
    }
   }
 return i;
}


uchar keyscan()      //鍵盤掃描
{
 unsigned char a;
 P0=0xf0;
 if(P0!=0xf0)
  delay(12);
  if(P0!=0xf0)
  {
   a=P0;
   TR0=0;
   delay(1);
  }
  P0=0x0f;
  a=a|P0;
 switch(a)
 {
  case 0xee:      //00
    ts=add(ts,60,4);
    break;
  case 0xde:     //01
    tm=add(tm,60,2);
    break;
  case 0xbe:     //02
    th=add(th,24,0);
    break;
  case 0x7e:     //03
    week=add(week,7,6);
    break;

  case 0xed:    //10
    dd=add(dd,dm[dmi],4);
    break;
  case 0xdd:     //11
    dmi=add(dmi,12,2);
    break;
  case 0xbd:    //12
    dy=add(dy,99,0);
    break;
  case 0x7d:       //13
    TR0=1;
    break;

  default :break;
 }
 return a;
}

 

void main(void)
{
 //初始化
 TMOD=0x01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1;
 ET0=1;
 TR0=1;  //調整時間的時候 用TR0=0使時間暫停


 while(1)
 { 
    keyscan();
 
    display_dt();
 }
}
   

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:15854 發表于 2009-8-19 14:19 | 只看該作者

沒人指點下嗎

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲激情在线视频 | 久久国产精品亚洲 | 久久久久国产一区二区三区不卡 | 久久久久久久亚洲精品 | 91视频正在播放 | 欧美午夜精品 | 蜜桃毛片 | 琪琪午夜伦伦电影福利片 | 在线播放中文 | 中文字幕 亚洲一区 | 天天操天天干天天爽 | 欧美精品久久久久久久久久 | 国产乱码精品一区二区三区忘忧草 | 看片国产 | 国产在线观 | 欧美日韩一 | 91视频在线观看 | 天天操 天天操 | 99免费在线视频 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 成人午夜在线 | 亚洲成人精品在线观看 | 婷婷五月色综合香五月 | 涩涩鲁亚洲精品一区二区 | 天天影视网天天综合色在线播放 | 久久激情网 | 日韩国产在线观看 | 亚洲精品乱码久久久久久按摩 | www九色| 国产精品久久精品 | 成人 在线| 亚洲性视频网站 | 久久精品免费 | 成年女人免费v片 | 福利国产 | 国产精品成人一区二区三区夜夜夜 | 日韩精品免费播放 | 一区二区三区久久久 | av一区二区三区四区 | 69福利影院 | 久久69精品久久久久久国产越南 |