📄 mian614.c
字号:
#include <reg51.h>
#include <intrins.h>
#include <absacc.h>
#include <math.h>
#include "lcm1602.h"
#include "12c887.h"
#include "key.h"
#include "ds18b20.h"
#define isd_data1 XBYTE[0xdfff]
#define isd_data2 XBYTE[0xefff]
#define uchar unsigned char
#define uint unsigned int
unsigned char str2[]={'0','1','2','3','4','5','6','7','8','9','M','T',':','-','=','.'};
unsigned char str[6]={8,8,8,8,8,8}; //此数组是用来存储改变后的年月日时分秒,后面会把他写入1288
unsigned char wend=0;wend1=0;wend2=0;h=0;h1=0;
unsigned int wend3=0;
sbit lz=P3^0; //炉子
sbit dc=P3^1; //电磁阀
bit m=1;//模式标志位
bit n=0;//调节标志
/*********************调整时间时把调整前的时间读进数组保存****依次调整***************************/
write_adjust()
{
str[5]=second;
str[4]=min;
str[3]=hour;
str[2]=day;
str[1]=month;
str[0]=year; // 写完成
}
/******************************给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[12]);
DisplayOneChar(8,0,str2[month/10]);
DisplayOneChar(9,0,str2[month%10]);
DisplayOneChar(10,0,str2[12]);
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[12]);
DisplayOneChar(7,1,str2[min/10]);
DisplayOneChar(8,1,str2[min%10]);
DisplayOneChar(9,1,str2[12]);
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[12]);
DisplayOneChar(4,0,str2[day/10]);
DisplayOneChar(5,0,str2[day%10]);
DisplayOneChar(6,0,str2[13]);
DisplayOneChar(7,0,str2[13]);
DisplayOneChar(8,0,str2[hour/10]);
DisplayOneChar(9,0,str2[hour%10]);
DisplayOneChar(10,0,str2[12]);
DisplayOneChar(11,0,str2[min/10]);
DisplayOneChar(12,0,str2[min%10]);
DisplayOneChar(13,0,str2[12]);
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); //清屏
write_command(0x0e,1); //设置1602显示光标
get_time_DS12887(); //读日历
display_time(); //显示调整界面
write_adjust();
write_command(0x85,1); //把光标指向年的十位
/*******************************************************************************/
while(a!=15) //15,14键值各为推出和确定,完成对时
{ a=kbscan1();
if(a==13)
{b++;
e++;
c=1;
if(e>8)
{b=str;
e=3;}
switch (e)
{case 3: write_command(0x85,1); break;
case 4: write_command(0x88,1); break;
case 5: write_command(0x8b,1); break;
case 6: write_command(0xc4,1); break;
case 7: write_command(0xc7,1); break;
case 8: write_command(0xca,1); break;
}
}
else if(a==12) //13左移,12右移按键
{b--;
e--;
c=1;
if(e<3)
{b=&str[5];
e=8;}
switch (e)
{case 3: write_command(0x85,1); break;
case 4: write_command(0x88,1); break;
case 5: write_command(0x8b,1); break;
case 6: write_command(0xc4,1); break;
case 7: write_command(0xc7,1); break;
case 8: write_command(0xca,1); break;
}
}
else if(a<10)
{if(c==1)
{*b=((*b)%10)+a*10;
c=0;
switch (e)
{case 3: Adr_year=*b; DisplayOneChar(5,0,str2[*b/10]);write_command(0x86,1); break;
case 4: Adr_month=*b; DisplayOneChar(8,0,str2[*b/10]);write_command(0x89,1); break;
case 5: Adr_day=*b; DisplayOneChar(11,0,str2[*b/10]);write_command(0x8c,1); break;
case 6: Adr_hour=*b; DisplayOneChar(4,1,str2[*b/10]);write_command(0xc5,1); break;
case 7: Adr_min=*b; DisplayOneChar(7,1,str2[*b/10]);write_command(0xc8,1); break;
case 8: Adr_second=*b;DisplayOneChar(10,1,str2[*b/10]);write_command(0xcb,1); break;
}
}
else if(c==0)
{*b=((*b)/10)*10+a;
c=1;
switch (e)
{case 3: Adr_year=*b; DisplayOneChar(6,0,str2[*b%10]);write_command(0x85,1); break;
case 4: Adr_month=*b; DisplayOneChar(9,0,str2[*b%10]);write_command(0x88,1); break;
case 5: Adr_day=*b; DisplayOneChar(12,0,str2[*b%10]);write_command(0x8b,1); break;
case 6: Adr_hour=*b; DisplayOneChar(5,1,str2[*b%10]);write_command(0xc4,1); break;
case 7: Adr_min=*b; DisplayOneChar(8,1,str2[*b%10]);write_command(0xc7,1); break;
case 8: Adr_second=*b;DisplayOneChar(11,1,str2[*b%10]);write_command(0xca,1); break;
}
}
}
}
/*******************************************************************************/
write_command(0x0c,1); //设置1602不显示光标
Adr_B=0x06;
Adr_A=0x20;//设置12887内部时钟不再计时.
write_command(0x01,1); //清屏
//显示模式图标**********************************************
DisplayOneChar(0,1,str2[10]);//MMMMMMMMM
DisplayOneChar(1,1,str2[12]);
DisplayOneChar(2,1,str2[m]);
////显示模式图标**********************************************
DisplayOneChar(4,1,str2[11]);//TTTTTTTTT
DisplayOneChar(5,1,str2[14]);
//显示模式图标**********************************************/
}
/********************************************************************************/
/*************************设置温度和显示温度***********************************************/
/********************************************************************************/
shezwd()
{ uchar a=16;
uchar e=0; //用于对移动位数进行计数,左右移不会移出范围
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -