📄 mian4-21.c
字号:
#include <reg51.h>
#include <intrins.h>
#include <absacc.h>
#include "lcm1602.h"
#include "12c887.h"
#include "key.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char str2[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',':','-'};
unsigned char str[6]={8,8,8,8,8,8}; //此数组是用来存储改变后的年月日时分秒,后面会把他写入1288
bit m=0;//模式标志位
/******************************给12887写调整后的数据*******************************/
write_adjust()
{
Adr_second=str[5];
Adr_min=str[4];
Adr_hour=str[3];
Adr_day=str[2];
Adr_month=str[1];
Adr_year=str[0]; // 写完成
}
/******************************给12887写调整后的数据*******************************/
/*************************显示时间***********************************************/
display_time()//调整时间时的显示界面,程序
{ DisplayOneChar(3,0,str2[2]);
DisplayOneChar(4,0,str2[0]);
DisplayOneChar(5,0,str2[year/10]);
DisplayOneChar(6,0,str2[year%10]);
DisplayOneChar(7,0,str2[16]);
DisplayOneChar(8,0,str2[month/10]);
DisplayOneChar(9,0,str2[month%10]);
DisplayOneChar(10,0,str2[16]);
DisplayOneChar(11,0,str2[day/10]);
DisplayOneChar(12,0,str2[day%10]);
DisplayOneChar(4,1,str2[hour/10]);
DisplayOneChar(5,1,str2[hour%10]);
DisplayOneChar(6,1,str2[16]);
DisplayOneChar(7,1,str2[min/10]);
DisplayOneChar(8,1,str2[min%10]);
DisplayOneChar(9,1,str2[16]);
DisplayOneChar(10,1,str2[second/10]);
DisplayOneChar(11,1,str2[second%10]);
}
display_time1()//正常工作时的显示界面,只显示月日时分秒。
{ DisplayOneChar(1,0,str2[month/10]);
DisplayOneChar(2,0,str2[month%10]);
DisplayOneChar(3,0,str2[16]);
DisplayOneChar(4,0,str2[day/10]);
DisplayOneChar(5,0,str2[day%10]);
DisplayOneChar(6,0,str2[17]);
DisplayOneChar(7,0,str2[17]);
DisplayOneChar(8,0,str2[hour/10]);
DisplayOneChar(9,0,str2[hour%10]);
DisplayOneChar(10,0,str2[16]);
DisplayOneChar(11,0,str2[min/10]);
DisplayOneChar(12,0,str2[min%10]);
DisplayOneChar(13,0,str2[16]);
DisplayOneChar(14,0,str2[second/10]);
DisplayOneChar(15,0,str2[second%10]);
}
/*************************调整时间***********************************************/
adjust_time()
{ uchar a=16;
bit c=1; //C用于标志十位和个位1为十位0为个位。
uchar *b=str; //数组存放的是设定的时间
uchar e=3; //用于对移动位数进行计数,左右移不会移出范围
write_command(0x01,1); //清屏
while(a!=15&&a!=14) //15,14键值各为推出和确定,完成对时
{ a=kbscan1();
/*******************************************************************************/
if(a==13)
{b++;
e++;
if(e>8)
{b=str;
e=3;
c=1;}
}
else if(a==12) //13左移,12右移按键
{b--;
e--;
if(e<3)
{b=&str[5];
e=8;
c=1;}
}
else if(a<10)
{if(c==1)
{*b=((*b)%10)+a*10;
c=0;
write_adjust();
}
else if(c==0)
{*b=((*b)/10)*10+a;
c=1;
write_adjust();
}
}
/*******************************************************************************/
/*******************************************************************************/
get_time_DS12887();//读12887数据
display_time();
}
Adr_B=0x06;
Adr_A=0x20;//设置12887内部时钟不再计时.
write_command(0x01,1); //清屏
}
main()
{ uchar d;
initialization_Lcd();
start_DS12887();
while(1)
{
get_time_DS12887();//读12887数据
display_time1();//正常工作时的时钟显示。
d=kbscan1(); //扫描键盘
/*******************************校时程序***********************************************/
if(d==10) //10是校时键值
{Adr_B=0x86;//设置时间停止,读出的值不再变,但12887内部的时钟还在走着。
Adr_A=0x00;//设置12887内部时钟不再计时.
adjust_time();
}
/*******************************校时程序***********************************************/
/*******************************设置模式程序***********************************************/
else if(d==11)//11是模式切换键值
{if(m==0)//改变标志位M,在两种模式之间切换
m=1;
else m=0;
}
/*******************************设置模式程序***********************************************/
/*******************************设定时间段,温度程序***********************************************/
/*******************************设定时间段,温度程序***********************************************/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -