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

📄 clockdate.c

📁 STC89C52单片机制作时钟和万年历含闰年
💻 C
字号:
#include<reg51.h>        //头文件//
#define uchar unsigned char
#define uint unsigned int
#define ulint unsigned long int 
#define tn0h  0x70
#define tn0l  0x00
#define tn1h  0x70
#define tn1l  0x01
uchar signtime[8]={0x00,0x06,0x0f,0x03,0x00,0x0f,0x00,0x00};
uchar signdate[8]={0x00,0x08,0x0f,0x00,0x04,0x0f,0x02,0x03};
uchar tcount,tflag=0;
uchar flag=1;
//***********10ms延时*************//
void delay10ms(void)
{uchar i=255;
uchar j=255;
while(i>0)
{j=255;
while(j>0)
j--;
i--;
}
}
//***********延时*************//
void delay(uchar s)
{uchar l;
for(l=0;l<=s;l++);
}
//***********键盘扫描 时间修改*************//
void keyscan()  
{uchar key=0;
if(P1!=0xff)
{delay10ms();
if(P1==0x7f)flag++;
if(flag>1)flag=0;
if(flag==1)
{if(P1==0xfe)signtime[0]++;
if(P1==0xfd)signtime[1]++;
if(P1==0xfb)signtime[3]++;
if(P1==0xf7)signtime[4]++;
if(P1==0xef)signtime[6]++;
if(P1==0xdf)signtime[7]++;
if(signtime[0]>2)
signtime[0]=0;
if(signtime[1]>9)
signtime[1]=0;
if(signtime[3]>5)
signtime[3]=0;
if(signtime[4]>9)
signtime[4]=0;
if(signtime[6]>5)
signtime[6]=0;
if(signtime[7]>9)
signtime[7]=0;
if(signtime[0]==2&&signtime[1]==4)
{signtime[0]=0;
signtime[1]=0;}	 }

if(flag==0)
{if(P1==0xfe)signdate[0]++;
if(P1==0xfd)signdate[1]++;
if(P1==0xfb)signdate[3]++;
if(P1==0xf7)signdate[4]++;
if(P1==0xef)signdate[6]++;
if(P1==0xdf)signdate[7]++;
if(signdate[0]>9)
signdate[0]=0;
if(signdate[1]>9)
signdate[1]=0;
if(signdate[3]>1)
signdate[3]=0;
if(signdate[4]>9)
signdate[4]=0;
if(signdate[6]>3)
signdate[6]=0;
if(signdate[7]>9)
signdate[7]=0;
if(signdate[3]==1&&signdate[4]==3)
{signdate[3]=0;
signdate[4]=1;}	
if(signdate[6]==3&&signdate[7]==2)
{signdate[6]=0;
signdate[7]=1;}	 }
}
}
//***********时间刷新*************//
void timechange()
{signtime[7]+=1;
if(signtime[7]==10)//秒
{signtime[7]=0;
signtime[6]+=1;}
if(signtime[6]==6)//秒
{signtime[6]=0;
signtime[4]+=1;}
if(signtime[4]==10)//分
{signtime[4]=0;
signtime[3]+=1;}
if(signtime[3]==6)//分
{signtime[3]=0;
signtime[1]+=1;}
if(signtime[1]==10)//时
{signtime[1]=0;
signtime[0]+=1;}
if(signtime[0]==2&&signtime[1]==4)//时
{signtime[0]=0;
signtime[1]=0;
signdate[7]++;}
//大月31天
if((signdate[3]==0&&signdate[4]==1)||(signdate[3]==0&&signdate[4]==3)||(signdate[3]==0&&signdate[4]==5)||(signdate[3]==0&&signdate[4]==7)||(signdate[3]==0&&signdate[4]==8)||(signdate[3]==1&&signdate[4]==0)||(signdate[3]==1||signdate[4]==2))
{if(signdate[7]==10)//日
{signdate[7]=0;
signdate[6]+=1;}
if(signdate[6]==3&&signdate[7]==2)//日
{signdate[6]=0;signdate[7]=1;
signdate[4]+=1;}
if(signdate[4]==10)//月
{signdate[4]=0;
signdate[3]+=1;}
if(signdate[3]==1&&signdate[4]==2)//月
{signdate[3]=0;signdate[4]=1;
signdate[1]+=1;}
if(signdate[1]==10)//年
{signdate[1]=0;
signdate[0]+=1;} }
//小月30天
if((signdate[3]==0&&signdate[4]==4)||(signdate[3]==0&&signdate[4]==6)||(signdate[3]==0&&signdate[4]==9)||(signdate[3]==1&&signdate[4]==1))
{if(signdate[7]==10)//日
{signdate[7]=0;
signdate[6]+=1;}
if(signdate[6]==3&&signdate[7]==1)//日
{signdate[6]=0;signdate[7]=1;signdate[4]+=1;}
if(signdate[4]==10)//月
{signdate[4]=0;
signdate[3]+=1;}
if(signdate[3]==1&&signdate[4]==3)//月
{signdate[3]=0;signdate[4]=1;signdate[1]++;}
if(signdate[1]==10)//年
{signdate[1]=0;
signdate[0]+=1;} }

//2月28天
if(signdate[3]==0&&signdate[4]==2)
if(signdate[6]==2&&signdate[7]==9)
{signdate[7]=1;signdate[6]=0;signdate[4]+=1; }	}
//***********一秒定时 50ms扫描键盘*************//
void t1(void) interrupt 3 using 2 
{TR1=0;
TH1=tn1h;
TL1=tn1l;
TR1=1;
tcount++;
if(tcount==50)		//一秒定时
{tflag=1;
tcount=0;
timechange();
}
keyscan();
}
//************显示程序************//
void display(void)	 
{uchar i=0;
uchar a=0;
for(i=0;i<8;i++)
{if(flag==1)
  P2=signtime[i]+a;
else 
  P2=signdate[i]+a;	a+=32;
delay(50); 
} 	   	  
} 	   
//*************主程序*************//
void main()	
{TMOD=0x11;	 //定时器工作模式 方式一
TH0=tn0h;	 //
TL0=tn0l;	 //
TH1=tn1h;	 //
TL1=tn1l;	 //
TR1=1;		 //启动定时器一
ET0=0;		 //允许定时器0中断
ET1=1;       //允许定时器1中断
EA=1;	 
while(1)
{display();  
}	  
}

⌨️ 快捷键说明

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