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

📄 memory clockί

📁 基于51单片机的万年历
💻
字号:
#include<reg52.h>//包含52单片机头文件
#include "24c02.h"
#include "MacroAndConst.h"
#include "Key.h"
#include "Lcd.h"
#include "Beep.h"
#include "main.h"
#include "Assistance.h"
#include "TimersInit.h"

char shi1,ge1;

void monthjudge()
{
	if( (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month == 12) && day==32 )
					{
						day=1;
					}
	if( (month==4 || month==6 || month==9 || month==11) && day==31 )
					{
						day=1;
					}
	if( month==2 && ((year%4 == 0 && year%100 != 0) || (year%400 == 0)) && day==30 )
					{
						day=1;
					}
	if( month==2 && ((year%4 == 0 && year%100 != 0) || (year%400 == 0)) == 0 && day==29)
					{
						 day=1;
					}
}

void monthjudge1()
{
	if( (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month == 12) && day==0 )
					{
						day=31;
					}
	if( (month==4 || month==6 || month==9 || month==11) && day==0 )
					{
						day=30;
					}
	if( month==2 && ((year%4 == 0 && year%100 != 0) || (year%400 == 0)) && day==0 )
					{
						day=29;
					}
	if( month==2 && ((year%4 == 0 && year%100 != 0) || (year%400 == 0)) == 0 && day==0)
					{
						 day=28;
					}
}

void keyscan()//按键扫描函数
{
	shi1=miao/10;//分解一个2位数的十位和个位
	ge1=miao%10;
	if(s1==0)	
	{
		delay(5);
		if(s1==0)//确认功能键被按下
		{	s1num++;//功能键按下次数记录
			while(!s1);//释放确认
			di();//每当有按键释放蜂鸣器发出滴声
			if(s1num==1)//第一次被按下时
			{
				TR0=0;  //关闭定时器
				write_com(0x80+0x40+11);//光标定位到秒位置
				write_com(0x0f); //光标开始闪烁
			}
			if(s1num==2)//第一次被按下时
			{
				write_com(0x80+0x40+10);//光标定位到秒位置
				write_com(0x0f); //光标开始闪烁
			}
			if(s1num==3)//第二次按下光标闪烁定位到分钟位置
			{
				write_com(0x80+0x40+7);
			}
			if(s1num==4)//第三次按下光标闪烁定位到小时位置
			{
				write_com(0x80+0x40+4);
			}
			if(s1num==5)//第三次按下光标闪烁定位到星期位置
			{
				write_com(0x80+13);
			}
			if(s1num==6)//第三次按下光标闪烁定位到日期位置
			{
				write_com(0x80+10);
			}
			if(s1num==7)//第三次按下光标闪烁定位到月份位置
			{
				write_com(0x80+7);
			}
			if(s1num==8)//第三次按下光标闪烁定位到年位置
			{
				write_com(0x80+4);
			}
			if(s1num==9)
			{
				write_com(0x80+2);
			}
			if(s1num==10)//第四次按下
			{
				s1num=0;//记录按键数清零
				write_com(0x0c);//取消光标闪烁
				TR0=1;	//启动定时器使时钟开始走
			}		
		}
	}
	if(s1num!=0)//只有功能键被按下后,增加和减小键才有效
	{
		if(s2==0)
		{
			delay(5);
			if(s2==0)//增加键确认被按下
			{
				while(!s2);//按键释放
				di();//每当有按键释放蜂鸣器发出滴声
				if(s1num==1)//若功能键第一次按下
				{	
					
					ge1++; //则调整秒加1
					if(ge1==10)
					{
						ge1=0;
					}
					miao=shi1*10+ge1;
					if(miao==60)//若满60后将清零
						miao=0;
					write_sfm1(11,ge1);//每调节一次送液晶显示一下
					write_com(0x80+0x40+11);//显示位置重新回到调节处
					write_addbyte(1,miao);	//数据改变立即存入24C02
				}
				if(s1num==2)//若功能键第一次按下
				{
					shi1++; //则调整秒加10
					if(shi1==6)
					{
						shi1=0;
					}
					miao=shi1*10+ge1;
					if(miao==60)//若满60后将清零
						miao=0;
					write_sfm2(10,shi1);//每调节一次送液晶显示一下
					write_com(0x80+0x40+10);//显示位置重新回到调节处
					write_addbyte(1,miao);	//数据改变立即存入24C02
				}
				if(s1num==3)//若功能键第二次按下
				{
					fen++;//则调整分钟加1
					if(fen==60)//若满60后将清零
						fen=0;
					write_sfm(7,fen);//每调节一次送液晶显示一下
					write_com(0x80+0x40+7);//显示位置重新回到调节处
					write_addbyte(2,fen);//数据改变立即存入24C02
				}
				if(s1num==4)//若功能键第三次按下
				{
					shi++;//则调整小时加1
					if(shi==24)//若满24后将清零
						shi=0;
					write_sfm(4,shi);;//每调节一次送液晶显示一下
					write_com(0x80+0x40+4);//显示位置重新回到调节处
					write_addbyte(3,shi);//数据改变立即存入24C02
				}
				if(s1num==5)//若功能键第4次按下
				{
					weekDay++;//则调整星期加1
					if(weekDay==7)//若满6后将清零
						weekDay=0;
			    	write_weekDay(13,weekDay);
					write_com(0x80+13);//显示位置重新回到调节处
					write_addbyte(4,weekDay);
				}
				if(s1num==6)//若功能键第5次按下
				{
					day++;//则调整日期加1
					monthjudge();
			    	write_day(10,day);
					write_com(0x80+10);//显示位置重新回到调节处
					write_addbyte(5,day);
				}
				if(s1num==7)//若功能键第6次按下
				{
					month++;//则调整月份加1
					if(month==13)//若满12后将清零
						month=1;
			    	write_month(7,month);
					write_com(0x80+7);//显示位置重新回到调节处
					write_addbyte(6,month);
				}

				if(s1num==8)//若功能键第7次按下
				{
					year1++;//则调整年份加1
					if(year1 == 100)
					{
						year2++;
						year1=0;
					}					
			    	write_year(4,year1);
					write_com(0x80+4);//显示位置重新回到调节处
					write_addbyte(7,year1);

					write_year(2,year2);
					write_addbyte(8,year2);
				}
				if(s1num==9)//若功能键第7次按下
				{
					year2++;//则调整年份加1				
					if(year2 == 100)
					{
						year2=0;
					}
			    	write_year(2,year2);
					write_com(0x80+2);//显示位置重新回到调节处
					write_addbyte(8,year2);
				}
			}
		}
		if(s3==0)
		{
			delay(5);
			if(s3==0)//确认减小键被按下
			{
				while(!s3);//按键释放
				di();//每当有按键释放蜂鸣器发出滴声
				if(s1num==1)//若功能键第一次按下
				{
					
					ge1--; //则调整秒加1
					if(ge1==-1)
					{
						ge1=9;
					}
					miao=shi1*10+ge1;
					if(miao==-1)//若减到负数则将其重新设置为59
						miao=59;
					write_sfm1(11,ge1);//每调节一次送液晶显示一下
					write_com(0x80+0x40+11);//显示位置重新回到调节处
					write_addbyte(1,miao);//数据改变立即存入24C02
				}
				if(s1num==2)//若功能键第一次按下
				{
					
					shi1--; //则调整秒加1
					if(shi1==-1)
					{
						shi1=5;
					}
					miao=shi1*10+ge1;
					if(miao==-1)//若减到负数则将其重新设置为59
						miao=59;
					write_sfm2(10,shi1);//每调节一次送液晶显示一下
					write_com(0x80+0x40+10);//显示位置重新回到调节处
					write_addbyte(1,miao);//数据改变立即存入24C02
				}
				if(s1num==3)//若功能键第二次按下
				{
					fen--;//则调整分钟减1
					if(fen==-1)//若减到负数则将其重新设置为59
						fen=59;
					write_sfm(7,fen);//每调节一次送液晶显示一下
					write_com(0x80+0x40+7);//显示位置重新回到调节处
					write_addbyte(2,fen);//数据改变立即存入24C02
				}
				if(s1num==4)//若功能键第二次按下
				{
					shi--;//则调整小时减1
					if(shi==-1)//若减到负数则将其重新设置为23
						shi=23;
					write_sfm(4,shi);//每调节一次送液晶显示一下
					write_com(0x80+0x40+4);//显示位置重新回到调节处
					write_addbyte(3,shi);//数据改变立即存入24C02
				}
					if(s1num==5)//若功能键第4次按下
				{
					weekDay--;//则调整星期减1
					if(weekDay==-1)
						weekDay=6;
			    	write_weekDay(13,weekDay);
					write_com(0x80+13);//显示位置重新回到调节处
					write_addbyte(4,weekDay);
				}
				if(s1num==6)//若功能键第5次按下
				{
					day--;//则调整日期减1
					monthjudge1();
			    	write_day(10,day);
					write_com(0x80+10);//显示位置重新回到调节处
					write_addbyte(5,day);
				}
				if(s1num==7)//若功能键第6次按下
				{
					month--;//则调整月份减1
					if(month==0)
						month=12;
			    	write_month(7,month);
					write_com(0x80+7);//显示位置重新回到调节处
					write_addbyte(6,month);
				}
					if(s1num==8)//若功能键第7次按下
				{
					year1--;//则调整年份减1
					if(year1 == -1)
					{
						year1 = 99;
						year2--;
					}
					if(year2 == -1)
					{
						year2 = 99;
					}
			    	write_year(4,year1);
					write_com(0x80+4);//显示位置重新回到调节处
					write_addbyte(7,year1); //因为write_byte(uchar),所以只可以记忆小于256的数

					write_year(2,year2);
					write_addbyte(8,year2);
				}
				if(s1num==9)//若功能键第7次按下
				{
					year2--;//则调整年份减1
					if(year2 == -1)
					{
						year2 = 99;
					}
			    	write_year(2,year2);
					write_com(0x80+2);//显示位置重新回到调节处
					write_addbyte(8,year2); //因为write_byte(uchar),所以只可以记忆小于256的数
				}
			}
		}
	}
	year=year1+year2*10;
}

⌨️ 快捷键说明

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