📄 shizhong.c
字号:
//design by Mr zhen
//date:2009-05-10
//采用4-4矩阵键盘中的三个作为按键
#include <reg52.h>
#include <stdio.h>
#include"ds1302.h"
#include"lcd1602.h"
#define uchar unsigned char
#define uint unsigned int
uchar temp,num=0,s=0;
sbit key_set=P0^4; //功能设计键
sbit key_up=P0^5;//上调
sbit key_down=P0^6;//下调
uchar flag,flag_up,flag_down,id,flag_set,f1,f2,id1[1];//转换标志
uchar ucCurtime[7],times[10],date[12];
uchar inittime[7]={0x00,0x15,0x17,0x10,0x05,0x01,0x09};//初始化时间09年5月9日下午17点31分00秒
void change();
void disp_time(void);
void disp_set(void);
void set(void);
void main()
{
LCD_init();
v_setd1302(inittime);
delay(100);
while(1)
{
set();
disp_time();
}
}
void set (void) //功能设置程序
{
P0=0xf7;
//test(key_set); //检测按键1是否按下
if (key_set==0)
{
flag_set=1;
f1=1;
delay(10);
disp_set();
if(key_set==0)
{
flag_set=1; //真正按下则置标志1
while(key_set==0);
}
}
if(flag_set==1) //如果设置键1按下
{while(flag_set==1)//等待设置键1再次按下之前测试键2、3的功能选择
{//test(key_up);
if (key_up==0)
{
delay(10);
if(key_up==0)
{flag=1; //真正按下则置标志1
while(key_up==0);
}
}
flag_up=flag;
flag=0;
if(flag_up==1) //键2功能选择键的功能加1,转向下一功能设置
{id++;
delay(10);
flag_up=0;
if (id==5) //功能循环选择
{id=0;}
}
//test(key_down);
if (key_down==0)
{delay(10);
if(key_down==0)
{flag=1; //真正按下则置标志1
while(key_down==0);
}
}
flag_down=flag;
flag=0;
if(flag_down==1) //键3功能选择键的功能减1,转向上一功能设置
{id--;
delay(10);
flag_down=0;
if (id==0xff) //功能循环选择
{id=4;}
}
//test(key_set);
if (key_set==0)
{delay(10);
if(key_set==0)
{flag=1; //真正按下则置标志1
while(key_set==0);
}
}
flag_set=!flag; //键1再次按下则flag_set=!flag=0,退出该while循环
flag=0;
disp_set();
}
while(flag_set==0) //等待设置键1第三次按下之前测试键2、3进行各项数据的加减调整
{
switch(id)
{
case 0: //test(key_up); //调年加
if (key_up==0)
{delay(20);
if(key_up==0)
{flag=1; //真正按下则置标志1
while(key_up==0);
}
}
flag_up=flag;
flag=0;
if(flag_up==1)
{inittime[6]++;
if(inittime[6]==0x0a)
{inittime[6]=0x10;}
if(inittime[6]==0x1a)
{inittime[6]=0x20;}
if(inittime[6]==0x2a)
{inittime[6]=0x30;}
if(inittime[6]==0x3a)
{inittime[6]=0x40;}
if(inittime[6]==0x4a)
{inittime[6]=0x50;}
if(inittime[6]==0x5a)
{inittime[6]=0;}
}
// test(key_down); //调年减
if (key_down==0)
{delay(10);
if(key_down==0)
{flag=1; //真正按下则置标志1
while(key_down==0);
}
}
flag_down=flag;
flag=0;
if(flag_down==1)
{inittime[6]--;
if(inittime[6]==0x0f)
{inittime[6]=0x09;}
if(inittime[6]==0x1f)
{inittime[6]=0x19;}
if(inittime[6]==0x2f)
{inittime[6]=0x29;}
if(inittime[6]==0x3f)
{inittime[6]=0x39;}
if(inittime[6]==0x4f)
{inittime[6]=0x49;}
if(inittime[6]==0xff)
{inittime[6]=0x59;}
}
v_setd1302(inittime);
break;
case 1: //test(key_up); //调月份加
if (key_up==0)
{delay(10);
if(key_up==0)
{flag=1; //真正按下则置标志1
while(key_up==0);
}
}
flag_up=flag;
flag=0;
if(flag_up==1)
{ inittime[4]++;
if(inittime[4]==0x0a) //完成进制的转换
{inittime[4]=0x10;}
if(inittime[4]==0x13)
{inittime[4]=0x00;}
}
//test(key_down); //调月份减
if (key_down==0)
{delay(10);
if(key_down==0)
{flag=1; //真正按下则置标志1
while(key_down==0);
}
}
flag_down=flag;
flag=0;
if(flag_down==1)
{ inittime[4]--;
if(inittime[4]==0x0f) //完成进制的转换
{inittime[4]=0x09;}
if(inittime[4]==0xff)
{inittime[4]=0x12;}
}
v_setd1302(inittime);
break;
case 2: //test(key_up); //调日期加
if (key_up==0)
{delay(10);
if(key_up==0)
{flag=1; //真正按下则置标志1
while(key_up==0);
}
}
flag_up=flag;
flag=0;
if(flag_up==1)
{inittime[3]++;
if(inittime[3]==0x0a)
{inittime[3]=0x10;}
if(inittime[3]==0x1a)
{inittime[3]=0x20;}
if(inittime[3]==0x2a)
{inittime[3]=0x30;}
if(inittime[3]==0x32)
{inittime[3]=0x00;}
}
// test(key_down); //调日期减
if (key_down==0)
{delay(10);
if(key_down==0)
{flag=1; //真正按下则置标志1
while(key_down==0);
}
}
flag_down=flag;
flag=0;
if(flag_down==1)
{inittime[3]--;
if(inittime[3]==0x0f)
{inittime[3]=0x09;}
if(inittime[3]==0x1f)
{inittime[3]=0x19;}
if(inittime[3]==0x2f)
{inittime[3]=0x29;}
if(inittime[3]==0xff)
{inittime[3]=0x31;}
}
v_setd1302(inittime);
break;
case 3: //test(key_up); // 调时加
if (key_up==0)
{delay(10);
if(key_up==0)
{flag=1; //真正按下则置标志1
while(key_up==0);
}
}
flag_up=flag;
flag=0;
if(flag_up==1)
{ inittime[2]++;
if(inittime[2]==0x0a) //完成进制的转换
{inittime[2]=0x10;}
if(inittime[2]==0x1a)
{inittime[2]=0x20;}
if(inittime[2]==0x24)
{inittime[2]=0;}
}
//test(key_down); //调时减
if (key_down==0)
{delay(10);
if(key_down==0)
{flag=1; //真正按下则置标志1
while(key_down==0);
}
}
flag_down=flag;
flag=0;
if(flag_down==1)
{ inittime[2]--;
if(inittime[2]==0x0f) //完成进制的转换
{inittime[2]=0x09;}
if(inittime[2]==0x1f)
{inittime[2]=0x19;}
if(inittime[2]==0xff)
{inittime[2]=0x23;}
}
v_setd1302(inittime);
break;
case 4: //test(key_up); //调分加
if (key_up==0)
{delay(10);
if(key_up==0)
{flag=1; //真正按下则置标志1
while(key_up==0);
}
}
flag_up=flag;
flag=0;
if(flag_up==1)
{inittime[1]++;
if(inittime[1]==0x0a)
{inittime[1]=0x10;}
if(inittime[1]==0x1a)
{inittime[1]=0x20;}
if(inittime[1]==0x2a)
{inittime[1]=0x30;}
if(inittime[1]==0x3a)
{inittime[1]=0x40;}
if(inittime[1]==0x4a)
{inittime[1]=0x50;}
if(inittime[1]==0x5a)
{inittime[1]=0;}
}
// test(key_down); //调分减
if (key_down==0)
{delay(10);
if(key_down==0)
{flag=1; //真正按下则置标志1
while(key_down==0);
}
}
flag_down=flag;
flag=0;
if(flag_down==1)
{inittime[1]--;
if(inittime[1]==0x0f)
{inittime[1]=0x09;}
if(inittime[1]==0x1f)
{inittime[1]=0x19;}
if(inittime[1]==0x2f)
{inittime[1]=0x29;}
if(inittime[1]==0x3f)
{inittime[1]=0x39;}
if(inittime[1]==0x4f)
{inittime[1]=0x49;}
if(inittime[1]==0xff)
{inittime[1]=0x59;}
}
v_setd1302(inittime);
break;
default: break;
}
disp_set();
// test(key_set);
if (key_set==0)
{delay(10);
if(key_set==0)
{
flag=1; //真正按下则置标志1
while(key_set==0);
}
}
flag_set=flag;
flag=0;
}
id=0;
flag_set=!flag_set;
}
}
void disp_set()
{
if(f2==1)
{
LCD_init();
delay(100);
f2--;
f1=1;
}
gotoxy(0,1);
LCD_display("Date:");
gotoxy(0,2);
LCD_display("Time:");
delay(1);
v_Get1302(ucCurtime);
change();
gotoxy(5,1);
LCD_display(date); //显示时间
gotoxy(5,2);
LCD_display(times);//显示日期
gotoxy(15,1);
id1[0]=id+'0'; //显示当前处于何种调节
LCD_display(id1);
}
void disp_time(void)
{
if(f1==1)
{
LCD_init();
delay(100);
f1--;
f2=1;
}
gotoxy(0,1);
LCD_display("Date:");
gotoxy(0,2);
LCD_display("Time:");
delay(1);
v_Get1302(ucCurtime);
change();
gotoxy(8,1);
LCD_display(date); //显示时间
gotoxy(8,2);
LCD_display(times);//显示日期
gotoxy(2,2);
}
void change()//时间显示转换程序
{
// 时 间 的 转 换
times[0]=ucCurtime[2]/16+'0';
times[1]=ucCurtime[2]%16+'0';
times[2]=':';
times[3]=ucCurtime[1]/16+'0';
times[4]=ucCurtime[1]%16+'0';
times[5]=':';
times[6]=ucCurtime[0]/16+'0';
times[7]=ucCurtime[0]%16+'0';
times[8]=' ';
times[9]=' ';
// 日 期 的 转 换
date[0]=ucCurtime[6]/16+'0';
date[1]=ucCurtime[6]%16+'0';
date[2]='-';
date[3]=ucCurtime[4]/16+'0';
date[4]=ucCurtime[4]%16+'0';
date[5]='-';
date[6]=ucCurtime[3]/16+'0';
date[7]=ucCurtime[3]%16+'0';
date[8]=' ';
date[9]=' ';
date[10]=' ';
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -