/***************************************************
键盘扫描源文件(.C)
**************************************************/
#include"define.h" //函数申明头文件包含
#include<reg52.h> //包含52头文件
extern uchar table1[],table2[],table3[],table4[],table8[]; //全局调用变量
sbit key_set_time=P0^7; //设置时间键位定义
sbit key_up=P0^6; //上加键位定义
sbit key_down=P0^3; //下减键位定义
sbit key_back=P0^5;
sbit key_set_alarm=P0^4;
uchar flag_time,count_time; //申明标志位,计数值变量
uchar flag_alarm,count_alarm,flag_set_alarm,alarm_shi,alarm_fen;
/***************************************************
键盘扫描函数
**************************************************/
void time_keyscan(void)
{
uchar nian,zhou,yue,ri,shi,fen;
if(key_set_time==0)
{
delay_1ms(5); //消抖
if(key_set_time==0)
{
display(0x94,"00");
write_lcd_comd(0x0e); //开光标并闪烁
count_time++; //计数
flag_time=1; //标志位置位
while(!key_set_time); //松手检测
write_1302(0x8e,0x00); //关写保护
write_1302(0x80,0x80); //停止时钟
write_1302(0x8e,0x80); //开写保护
}
}
if(count_time!=0)
{
switch(count_time)
{
case 1:
display(0x90,""); //光标移至“时”调节位
if(key_up==0)
{
delay_1ms(5); //消抖
if(key_up==0)
{
write_1302(0x8e,0x00); //关写保护
shi=read_1302(0x85); //读取此刻“时”时值
shi++; //“时”加一
if(shi==24) //判断是否溢出
shi=0;
while(!key_up); //松手检测
write_1302(0x84,shi);
table2[0]=read_1302(0x85)/10+0x30; //读取调节后“时”的个位
table2[1]=read_1302(0x85)%10+0x30; //读取调节后“时”的十位
display(0x90,table2); //显示在LCD12864上
display(0x94,"00");
write_1302(0x8e,0x80); //打开写保护
}
}
if(key_down==0)
{
delay_1ms(5); //消抖
if(key_down==0)
{
write_1302(0x8e,0x00); //关写保护
shi=read_1302(0x85); //读取此刻“时”的值
shi--; //“时”减一
if(shi==-1) //判断是否溢出
shi=23;
while(!key_down); //松手检测
write_1302(0x84,shi); //“时”调节后送回时钟
table2[0]=read_1302(0x85)/10+0x30; //读取调节后“时”的个位
table2[1]=read_1302(0x85)%10+0x30; //读取调节后“时”的十位
display(0x90,table2); //显示在LCD12864上
display(0x94,"00");
write_1302(0x8e,0x80); //打开写保护
}
}
if(key_back==0) //调时复位
{
delay_1ms(5);
if(key_back==0)
{
count_time=0; flag_time=0; //计数值清零,标志位复位
write_1302(0x8e,0x00); //关写保护
write_1302(0x80,0x00); //开时钟
write_1302(0x8e,0x80); //开写保护
write_lcd_comd(0x0c); //关光标
}
}
break; //跳出
case 2: /**************以下调节方式同“时”调节*******************/
display(0x92,"");
if(key_up==0)
{
delay_1ms(5);
if(key_up==0)
{
write_1302(0x8e,0x00);
fen=read_1302(0x83);
fen++;
if(fen==60)
fen=0;
while(!key_up);
write_1302(0x82,fen);
table2[4]=read_1302(0x83)/10+0x30;
table2[5]=read_1302(0x83)%10+0x30;
display(0x90,table2);
display(0x94,"00");
write_1302(0x8e,0x80);
}
}
if(key_down==0)
{
delay_1ms(5);
if(key_down==0)
{
write_1302(0x8e,0x00);
fen=read_1302(0x83);
fen--;
if(fen==-1)
fen=59;
while(!key_down);
write_1302(0x82,fen);
table2[4]=read_1302(0x83)/10+0x30;
table2[5]=read_1302(0x83)%10+0x30;
display(0x90,table2);
display(0x94,"00");
write_1302(0x8e,0x80);
}
}
if(key_back==0) //调时复位
{
delay_1ms(5);
if(key_back==0)
{
count_time=0; flag_time=0; //计数值清零,标志位复位
write_1302(0x8e,0x00); //关写保护
write_1302(0x80,0x00); //开时钟
write_1302(0x8e,0x80); //开写保护
write_lcd_comd(0x0c); //关光标
}
}
break;
case 3:
display(0x89,"");
if(key_up==0)
{
delay_1ms(5);
if(key_up==0)
{
write_1302(0x8e,0x00);
nian=read_1302(0x8d);
nian++;
if(nian==100)
nian=0;
while(!key_up);
write_1302(0x8c,nian);
table3[2]=read_1302(0x8d)/10+0x30;
table3[3]=read_1302(0x8d)%10+0x30;
display(0x88,table3);
write_1302(0x8e,0x80);
}
}
if(key_down==0)
{
delay_1ms(5);
if(key_down==0)
{
write_1302(0x8e,0x00);
nian=read_1302(0x8d);
nian--;
if(nian==-1)
nian=99;
while(!key_down);
write_1302(0x8c,nian);
table3[2]=read_1302(0x8d)/10+0x30;
table3[3]=read_1302(0x8d)%10+0x30;
display(0x88,table3);
write_1302(0x8e,0x80);
}
}
if(key_back==0) //调时复位
{
delay_1ms(5);
if(key_back==0)
{
count_time=0; flag_time=0; //计数值清零,标志位复位
write_1302(0x8e,0x00); //关写保护
write_1302(0x80,0x00); //开时钟
write_1302(0x8e,0x80); //开写保护
write_lcd_comd(0x0c); //关光标
}
}
break;
case 4:
display(0x8b,"");
if(key_up==0)
{
delay_1ms(5);
if(key_up==0)
{
write_1302(0x8e,0x00);
yue=read_1302(0x89);
yue++;
if(yue==13)
yue=1;
while(!key_up);
write_1302(0x88,yue);
table3[6]=read_1302(0x89)/10+0x30;
table3[7]=read_1302(0x89)%10+0x30;
display(0x88,table3);
write_1302(0x8e,0x80);
}
}
if(key_down==0)
{
delay_1ms(5);
if(key_down==0)
{
write_1302(0x8e,0x00);
yue=read_1302(0x89);
yue--;
if(yue==0)
yue=12;
while(!key_down);
write_1302(0x88,yue);
table3[6]=read_1302(0x89)/10+0x30;
table3[7]=read_1302(0x89)%10+0x30;
display(0x88,table3);
write_1302(0x8e,0x80);
}
}
if(key_back==0) //调时复位
{
delay_1ms(5);
if(key_back==0)
{
count_time=0; flag_time=0; //计数值清零,标志位复位
write_1302(0x8e,0x00); //关写保护
write_1302(0x80,0x00); //开时钟
write_1302(0x8e,0x80); //开写保护
write_lcd_comd(0x0c); //关光标
}
}
break;
case 5:
display(0x8d,"");
if(key_up==0)
{
delay_1ms(5);
if(key_up==0)
{
write_1302(0x8e,0x00);
ri=read_1302(0x87);
ri++;
if(ri==32)
ri=1;
while(!key_up);
write_1302(0x86,ri);
table3[10]=read_1302(0x87)/10+0x30;
table3[11]=read_1302(0x87)%10+0x30;
display(0x88,table3);
write_1302(0x8e,0x80);
}
}
if(key_down==0)
{
delay_1ms(5);
if(key_down==0)
{
write_1302(0x8e,0x00);
ri=read_1302(0x87);
ri--;
if(ri==0)
ri=31;