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

📄 memory clockί

📁 基于51单片机的万年历
💻
字号:
#include<reg52.h>
#include"24c02.h"
#include "MacroAndConst.h"
#include "Key.h"
#include "Lcd.h"
#include "Assistance.h"

char flag=0;
uint year;
uchar time;
uchar count,s1num;
char a,b,c,d,year1,year2;

void yearConvert(uint Year)
{
    a=Year/1000;
	b=Year/100%10;
	c=Year/10%10;
	d=Year%10;
	year1=c*10+d;
	year2=a*10+b;
	if(year1==100)
	{
		year1=0;
		year2++;
	}

}

void timer0Init()
{
	TMOD = 0x11;//设置定时器0和定时器1为工作方式1
	TH0 = (65536 - 45872) / 256;
	TL0 = (65536 - 45872) % 256;  //20ms延时
	EA = 1;//开总中断
	ET0 = 1;//开定时器0中断
	TR0 = 1;
}

void timer1Init()
{
	TH1 = (65536 - 32110) / 256;
	TL1 = (65536 - 32110) % 256;  //20ms延时
	ET1 = 1;//开定时器0中断
	TR1 = 1;
}

void timer0() interrupt 1//定时器0中断服务程序
{
	TH0=(65536-45872)/256;//再次装定时器初值
	TL0=(65536-45872)%256;
	count++;		//中断次数累加
	if(count==20) //20次50毫秒为1秒
	{
		count=0;
		miao++;
		if(miao==60)//秒加到60则进位分钟
		{
			miao=0;//同时秒数清零
			fen++;
			if(fen==60)//分钟加到60则进位小时
			{
				fen=0;//同时分钟数清零
				shi++;
				if(shi==24)//小时加到24则小时清零
				{
					shi=0;
					day++;
					weekDay++;
					if(weekDay==7)
					{
						weekDay=0;
					}
				    if( (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month == 12) && day==32 )
					{
						month++;
						day=1;
						flag=1;
					}
					if( (month==4 || month==6 || month==9 || month==11) && day==31 )
					{
						month++;
						day=1;
						flag=1;
					}
					if( month==2 && ((year%4 == 0 && year%100 != 0) || (year%400 == 0)) && day==30 )
					{
						month++;
						day=1;
						flag=1;
					}
					if( month==2 && ((year%4 == 0 && year%100 != 0) || (year%400 == 0)) == 0 && day==29)
					{																		
						 month++;
						 day=1;
						 flag=1;
					}
					if(month==13)
					{
						year++;
						month=1;
						yearConvert(year);
						write_year(4,year1);
						write_addbyte(7,year1);
						write_year(2,year2);
						write_addbyte(8,year2);										
             		}
					if(flag==1)
					{
						write_month(7,month);
						write_addbyte(6,month);
						flag=0;
					}
					write_day(10,day);
					write_addbyte(5,day);
					write_weekDay(13,weekDay);
					write_addbyte(4,weekDay);
			  }
            	write_sfm(4,shi);//小时若变化则重新写入
				write_addbyte(3,shi);//数据改变立即存入24C02
		 	}
			write_sfm(7,fen);//分钟若变化则重新写入
			write_addbyte(2,fen);//数据改变立即存入24C02
		}
		write_sfm(10,miao);//秒若变化则重新写入	
		write_addbyte(1,miao);//数据改变立即存入24C02
	}
}

void timer1() interrupt 3
{
	time=1;
}			 

⌨️ 快捷键说明

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