📄 memory clockί
字号:
#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 + -