⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 naozong.c

📁 可以对日期
💻 C
字号:
#include <reg52.h>
#include <intrins.h>
void naozhong();
unsigned int num,sec,min,hour,date,month,year,naohour,naomin;
unsigned char n=0;
void int1()  interrupt 3   //采用中断3 控制节拍//10ms
{  TH1=0xd8;
   TL1=0xef;
   n--;
}
Timer() interrupt 1
{ unsigned int mon;
TH0=0x3c;
TL0=0xb0;
num++;
if (num==20)
{sec++;
num=0;}
if (sec==60)
{min++;
sec=0;
if(hour==naohour)
if(min==naomin)
{naozhong();}
}
if(min==60)
{hour++;
min=0;
}if(hour==24)
{hour=0;
date++;
if((month==1)||(month==3)||(month==5)||(month==7)||
(month==8)||(month==10)||(month==12))
 mon=32;
 else if ((month==2)&&(year%4==0 && (year%400==0 || year%
100!=0)))
 {
mon=30;
}else if ((month==2)&&(!(year%4==0 && (year%400==0 || year%
100!=0)))){
mon=29; }

else
{mon=31;  }
if(date==mon)
{date=1;
month++;
if(month==13)
{month=0;
year++;
}}}
}
void dlmsl(void)
{
unsigned int i;
for(i=25000;i>0;i--)
{}
}
void dlms(void)
{
unsigned int j;
for(j=500;j>0;j--)
{}
}
unsigned char kbscan(void)
{unsigned char sccode,recode;
P1=0xf0;
if((P1&0xf0)!=0xf0)
{ dlms();
if((P1&0xf0)!=0xf0)
{sccode=0xfe;
while((sccode&0x10)!=0)
{
P1=sccode;
if((P1&0xf0)!=0xf0)
 {recode=P1&0xf0;
 sccode=sccode&0x0f;
 return(sccode+recode);
}
else
sccode=(sccode<<1)|0x01;
}
}

}
 return(0) ;

}
void dispshijian()
{unsigned int a,b;
unsigned char code tab[10]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
if(sec%2==0)
{P0=0x0;
 P2=0x81;
 dlms();}
else{
 P0=0x80;
 P2=0x81;
 dlms();
}
a=min/10;
P0=tab[a];
P2=0x82;
dlms();
b=min%10;
P0=tab[b];
P2=0x83;
dlms();
a=hour/10;
P0=tab[a];
P2=0x80;
dlms();
b=hour%10;
P0=tab[b];
P2=0x81;
dlms();
}
void dispyueri()
{ unsigned int a,b;
unsigned char code tab[10]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
a=date/10;
P0=tab[a];
P2=0x82;
dlms();
b=date%10;
P0=tab[b];
P2=0x83;
dlms();
a=month/10;
P0=tab[a];
P2=0x80;
dlms();
b=month%10;
P0=tab[b];
P2=0x81;
dlms();
}
void dispnian()
{ unsigned int a,b,year1,year2;
unsigned char code tab[10]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
year1=year/100;
year2=year%100;
a=year1/10;
P0=tab[a];
P2=0x80;
dlms();
b=year1%10;
P0=tab[b];
P2=0x81;
dlms();
a=year2/10;
P0=tab[a];
P2=0x82;
dlms();
b=year2%10;
P0=tab[b];
P2=0x83;
dlms();
}
dispnao()
{unsigned int a,b;
unsigned char code tab[10]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
a=naomin/10;
P0=tab[a];
P2=0x82;
dlms();
b=naomin%10;
P0=tab[b];
P2=0x83;
dlms();
a=naohour/10;
P0=tab[a];
P2=0x80;
dlms();
b=naohour%10;
P0=tab[b];
P2=0x81;
dlms();
}
disp()
{unsigned int i,key;
for(i=0;i<200;i++)
{dispnian();
key=kbscan();
if(key!=0)
return;
}
for(i=0;i<200;i++)
{dispyueri();
key=kbscan();
if(key!=0)
return;
}
for(i=0;i<200;i++)
{dispshijian();
key=kbscan();
if(key!=0)
return;
}
}
void delay (unsigned char m)   //控制频率延时,基本延时为1ms
{
 unsigned i=m;
 while(--i);
}

void delayms(unsigned char a)  //毫秒延时子程序
{
  while(--a);      //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!
}
void naozhong()
{  //n为节拍常数变量
unsigned char code music_code[]={
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00
};
unsigned char p,m,key;   //m为频率常数变量
  unsigned char i=0;
   ET1=1;
   ET0=1;
  TH1=0xd8;TL1=0xef;
play:
   while(1)
    {
    a: p=music_code[i];
       if(p==0x00)
      { i=0;
     delayms(1000);
      goto play;
   }     //如果碰到结束符,延时1秒,回到开始再来一遍
       else if(p==0xff)
     { i=i+1;
    delayms(100);
    TR1=0;
    goto a;
  }  //若碰到休止符,延时100ms,继续取下一音符
           else
     {
        m=music_code[i++];
     n=music_code[i++];
   }  //取频率常数 和 节拍常数
           TR1=1;                                             //开定时器1
           while(n!=0)
     {
    P3=~P3;
    delay(m);
    key=kbscan();
    if(key!=0)
    {ET1=0;
    return; }
   }                         //等待节拍完成, 通过P2口输出音频(p2口任何一个口均可接蜂鸣器的输入端)
       TR1=0;                                             //关定时器1
    }
    }

void main()
{unsigned char key,shikey,rikey,niankey,naokey,mon;
P3=0;
year=2008;
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
IP=0x08;
TH1=0xd8;TL1=0xef;
EA=1;
ET0=1;
ET1=0;
TR0=1;
while(1)
{
key=kbscan();
if(key==0xd7)
{while(1)
{shikey=kbscan();
if((shikey==0xe7)||(shikey==0xeb)||(shikey==0xdb)||(shikey==0xed))
break;
if(shikey==0xb7)
{hour++;
if(hour==24)
hour=0;}
else if(shikey==0x77)
{min++;
if(min==60)
{min=0;
}}
dispshijian();
dispshijian();
dispshijian();
dispshijian();
dispshijian();
}
}
if(key==0xe7)
{while(1)
{rikey=kbscan();
if((rikey==0xd7)||(rikey==0xeb)||(rikey==0xdb)||(rikey==0xed))
break;
if(rikey==0xbb)
{month++;
if(month==13)
month=1;}
else if(rikey==0x7b)
{date++;
if((month==1)||(month==3)||(month==5)||(month==7)||
(month==8)||(month==10)||(month==12))
 mon=32;
 else if ((month==2)&&(year%4==0 && (year%400==0 || year%
100!=0)))
 {
mon=30;
}else if ((month==2)&&(!(year%4==0 && (year%400==0 || year%
100!=0)))){
mon=29; }

else
{mon=31;  }
if(date==mon)
{date=1;
}}
dispyueri();
dispyueri();
dispyueri();
dispyueri();
dispyueri();
}
}
if(key==0xeb)
{while(1)
{niankey=kbscan();
if((niankey==0xe7)||(niankey==0xd7)||(niankey==0xdb)||(niankey==0xed))
break;
if(niankey==0xbd)
{year++; }
else if(niankey==0x7d)
{year--;  }
dispnian();
dispnian();
dispnian();
dispnian();
dispnian();
}
}
if(key==0xed)
{while(1)
{naokey=kbscan();
if((naokey==0xe7)||(naokey==0xd7)||(naokey==0xdb)||(naokey==0xeb))
break;
if(naokey==0xee)
{naohour++;
if(naohour==24)
naohour=0; }
else if(naokey==0xde)
{naomin++;
if(naomin==60)
naomin=0;
}
dispnao();
dispnao();
dispnao();
dispnao();
dispnao();
}
}
disp();
}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -