#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={"TIME0"};
uchar code table1[]={"GET UP TIME!0"};
uchar code table2[]={"MON0TUE0WED0THU0FRI0SAT0SUN0"};
uchar data buf[]={5,2,11,4,12,0,0};
uchar data buf1[]={7,0};
sbit enable=P3^4;
sbit rs=P3^5;
sbit rw=P3^7;
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
sbit k5=P3^6;
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P1_7=P1^7;
sbit P2_7=P2^7;
uchar temp,num,num1,hi,li,kk;
uchar a=10,b,c,disp_var,ww,ee;
uchar *table_var,(*fun)( );
uchar miao,day,key_var,address;
unsigned long lamp_var;
bit bdata nao,flash_var;
void initial (void);
void cls (void);
void busy (void);
void write (void);
void writedata (void);
void delay (uchar m);
//void year_disp(void);
void string_disp(void);
void week_disp(void);
void time_disp(void);
void display(void);
void seenao_time(void);
void nao_display(void);
void adjust_nao(void);
void adjust_nao_key(void);
void adjust_nao_key1(void);
void nao_disp(void);
void datetime_adjust(void);
void adjust_year_key(void);
void adjust_mon_key(void);
void write_kong (void);
void adjust_day_key(void);
void flash (uchar job);
void flash2 (void);
void adjust_week_key(void);
void adjust_time1_key(void);
void adjust_time2_key(void);
void datetime_adjust(void) //年月日,星期,时间总调整程序
{
time_disp();
while(1)
{
switch(key_var)
{
case 1:
{(*fun)=adjust_year_key;
address=0x82;
flash (1);}
break;
case 2:
{(*fun)=adjust_mon_key;
address=0x85;
flash (2);}
break;
case 3:
{(*fun)=adjust_day_key;
address=0x88;
flash (3);
year_disp();}
break;
case 4:
{flash2 ();
week_disp();}
break;
case 5:
{(*fun)=adjust_time1_key;
address=0xc5;
flash (4);}
break;
case 6:
{(*fun)=adjust_time2_key;
address=0xc8;
flash (5);
time_disp();}
break;
default:break;
}
if(k4==0){goto lable2;}
}
lable2:
{a=10;
lamp_var=69999;
TL0=183;
TH0=60;
TR0=1;
display();} //GOTO跳出调整
}
void flash (uchar job) //年月日,时间闪动
{
for(ww=8;ww>0;ww--)
{for(ee=188;ee>0;ee--);
{if(job<=3) {year_disp();}
if((job>=4)&&(job<=6)) {time_disp();}
if((job>=7)&&(job<=8)) {nao_display();}
(*fun)();
if(k3==0)
{do
{;}
while(k3==0);
{key_var++;
if((key_var>6)&&(flash_var==0)) {key_var=1;}
if((key_var>8)&&(flash_var==1)) {key_var=7;}
break;
}
}
if(k4==0){goto lable;}
}
}
for(ww=12;ww>0;ww--)
{for(ee=218;ee>0;ee--);
{
disp_var=address;
write_kong ();
(*fun)();
}
}
lable:{;}
}
void flash2 (void) //星期 闪动
{
for(ww=11;ww>0;ww--)
{for(ee=188;ee>0;ee--);
{week_disp();
adjust_week_key();
if(k3==0)
{do
{week_disp();}
while(k3==0);
{key_var++;break;}
}
if(k4==0){goto lable1;}
}
}
for(ww=11;ww>0;ww--)
{for(ee=188;ee>0;ee--);
{disp_var=0x8c;
write_kong ();
disp_var++;
temp=disp_var;
write();
temp=' ';
writedata();
adjust_week_key();
}
}
lable1:{;}
}
void adjust_year_key(void) // year ++;--
{
while(k1==0)
{buf[0]++;
if(buf[0]==16){buf[0]=5;}
year_disp();
delay(199);}
while(k2==0)
{if(buf[0]==5){buf[0]=16;}
buf[0]--;
year_disp();
delay(199);}
}
void adjust_mon_key(void) // mon ++;--
{
while(k1==0)
{buf[1]++;
if(buf[1]==13){buf[1]=1;}
year_disp();
delay(199);}
while(k2==0)
{if(buf[1]==1){buf[1]=13;}
buf[1]--;
year_disp();
delay(199);}
}
void adjust_day_key(void) // day ++;--
{
while(k1==0)
{buf[2]++;
if(buf[2]==32){buf[2]=1;}
year_disp();
delay(128);}
while(k2==0)
{if(buf[2]==1){buf[2]=32;}
buf[2]--;
year_disp();
delay(128);}
}
void write_kong (void) // 写入空字符
{
temp=disp_var;
write();
temp=' ';
writedata();
disp_var++;
temp=' ';
writedata();
}
void adjust_time1_key(void) // HH ++;--
{
while(k1==0)
{buf[4]++;
if(buf[4]==24){buf[4]=0;}
time_disp();
delay(128);}
while(k2==0)
{if(buf[4]==0){buf[4]=24;}
buf[4]--;
time_disp();
delay(128);}
}
void adjust_time2_key(void) // MM ++;--
{
while(k1==0)
{buf[5]++;
if(buf[5]==60){buf[5]=0;}
time_disp();
delay(128);}
while(k2==0)
{if(buf[5]==0){buf[5]=60;}
buf[5]--;
time_disp();
delay(128);}
}
void adjust_week_key(void) // WEEK ++;--
{
while(k1==0)
{buf[3]++;
if(buf[3]==7){buf[3]=0;}
week_disp();
delay(228);}
while(k2==0)
{if(buf[3]==0){buf[3]=7;}
buf[3]--;
week_disp();
delay(228);}
}
void seenao_time(void) //闹铃时间查询,6秒后自动返回
{
uint x;
uchar y,z,un=0;
cls ();
disp_var=0x80;
table_var=&table1[0];
string_disp();
nao_display();
for(x=1119;x>0;x--)
{for(y=219;y>0;y--);
{for(z=219;z>0;z--);
{
if(k3==0) //K3按下调时间,否则6秒后退出
{ do
{;}
while(k3==0);
{key_var=7;
flash_var=1;
adjust_nao();
goto lable2;
}
}
}
}
}
lable2:
{cls ();
display();
lamp_var=66666;
key_var=1;}
}
void adjust_nao(void) //闹铃调整
{
while(1)
{
switch(key_var)
{
case 7:
{(*fun)=adjust_nao_key;
address=0xc5;
flash(7);}
break;
case 8:
{(*fun)=adjust_nao_key1;
address=0xc8;
flash(8);}
break;
default: break;
}
if(k4==0){goto lable3;}
}
lable3:return;
}
void adjust_nao_key(void) //闹铃hh++;--
{
while(k1==0)
{buf1[0]++;
if(buf1[0]==24){buf1[0]=0;}
nao_display();
delay(199);}
while(k2==0)
{if(buf1[0]==0){buf1[0]=24;}
buf1[0]--;
nao_display();
delay(199);}
}
void adjust_nao_key1(void) //闹铃mm++;--
{
while(k1==0)
{buf1[1]++;
if(buf1[1]==60){buf1[1]=0;}
nao_display();
delay(159);}
while(k2==0)
{if(buf1[1]==0){buf1[1]=60;}
buf1[1]--;
nao_display();
delay(159);}
}
void nao_display(void) //闹铃时间扫描显示
{
disp_var=0xc5;
temp=disp_var;
write();
temp=((buf1[0]/10)+0x30);
writedata();
disp_var++;
temp=((buf1[0]%10)+0x30);
writedata();
disp_var++;
temp=disp_var;
write();
temp=':';
writedata();
disp_var++;
temp=disp_var;
write();
temp=((buf1[1]/10)+0x30);
writedata();
disp_var++;
temp=((buf1[1]%10)+0x30);
writedata();
}
void display(void) //全显示程序
{
year_disp(); //年月日函数
week_disp(); //星期扫描函数
disp_var=0xc0; //TIME字符扫描
table_var=&table[0]; //指针赋值
string_disp(); //字符串函数
time_disp(); //时间扫描函数
nao_disp(); //闹铃符号显示函数
}
void nao_disp(void) //闹铃符号显示函数
{
if(nao==1)
{temp=0xce;
write();
temp=0x40;
writedata(); }
if(nao==0)
{temp=0xce;
write();
temp=0x20;
writedata(); }
}
void year_disp(void) //年月日函数
{
num=0;
kk=0;
temp=0x80; //显示年的高位20;
write();
temp=0x32;
writedata();
temp=0x81;
write();
temp=0x30;
writedata();
disp_var=0x82; //显示年月日;
while(num<3)
{
temp=disp_var;
write();
hi=((buf[num]/10)+0x30);
li=((buf[num]%10)+0x30);
temp=hi;
writedata();
disp_var++;
temp=li;
writedata();
disp_var++;
temp=disp_var;
if(kk!=2){write();temp='/';writedata();}
num++;
kk++;
disp_var++;
}
}
void week_disp(void) //星期扫描
{
disp_var=0x8c;
table_var=&table2[(buf[3]*4)];
string_disp();
}
void string_disp(void) //字符串扫描
{
do
{temp=disp_var;
write();
temp=*table_var;
writedata();
disp_var++;
table_var++;}
while(*table_var!=0x30);
}
void time_disp(void) //时间扫描
{
disp_var=0xc5;
num=4;
kk=0;
while(num!=7)
{
temp=disp_var;
write();
hi=((buf[num]/10)+0x30);
li=((buf[num]%10)+0x30);
temp=hi;
writedata();
disp_var++;
temp=li;
writedata();
disp_var++;
temp=disp_var;
if(kk<2){write();temp=':';writedata();}
num++;
kk++;
disp_var++;
}
}
void initial (void) //LCD初始化
{
temp=0x38; //#00111000b
write();
temp=0x0c; //#00001100b
write();
temp=0x06; //#00000110b
write();
}
void cls (void) //清屏
{
temp=0x01;
enable=0;
write();
}
void write (void) //写资料寄存器
{
busy();
enable=0;
rw=0;
rs=0;
enable=1;
P1=temp;
enable=0;
}
void writedata (void) //写数据
{
busy();
enable=0;
rw=0;
rs=1;
enable=1;
P1=temp;
enable=0;
}
void busy (void) //忙查询
{
uchar busy_temp;
enable=0;
do
{rw=1;
rs=0;
enable=1;
busy_temp=P1_7;
enable=0;}
while(busy_temp==1);
delay(6);
}
void delay (uchar m) //延时
{
uchar n;
for(;m>0;m--)
for(n=100;n>0;n--);
}
void intermit() interrupt 1 using 0 //中断服务程序
{
EA=0;
TR0=0;
TL0+=183;
TH0+=60;
a--;
if(a==0)
{a=10; P0_0=!P0_0; b++;}
if(b==2)
{b=0;buf[6]++;}
if(buf[6]==60)
{buf[6]=0;buf[5]++;}
if(buf[5]==60)
{buf[5]=0; buf[4]++;}
if(buf[4]==24)
{buf[4]=0; buf[3]++; buf[2]++;}
if(buf[3]==7)
{buf[3]=0;}
if(buf[2]==32)
{buf[2]=1; buf[1]++;}
if(buf[1]==13)
{buf[1]=1; buf[0]++;}
if(buf[0]==16)
{buf[7]=(05,02,11,1,12,00,00);}
if(nao==1)
{if(buf1[0]==buf[4])
{ if(buf1[1]==buf[5]) { P2_7=0; } }
}
EA=1;
TR0=1;
}
void main(void) //主程序
{
TMOD=1;
EA=1;
ET0=1;
TL0=0xb0;
TH0=0x3c;
TR0=1;
P0_0=0;
initial();
cls();
display();
miao=buf[6];
day=buf[3];
while(1)
{
if(miao!=buf[6]) //比较旧秒与新秒之间有无变化,如有则扫描
{miao=buf[6];time_disp();}
if(day!=buf[3]) //比较旧日期与新日期之间有无变化,如有则扫描
{miao=buf[3];display();}
if(k1==0) //闹铃时间查询与调整
{P0_1=0;seenao_time();}
if(k2==0) //闹铃开 / 关
{do
{;}
while(k2==0);
{P0_1=0;
lamp_var=69999;
nao=!nao;
nao_disp();}
}
if(k3==0) //总调整(年月日,星期,时间)
{TR0=0;
miao=buf[6]=0;
P0_1=0;
key_var=1;
flash_var=0;
datetime_adjust();}
if(k5==0){P0_1=0;lamp_var=69999;} //背光开关
lamp_var--; //延时6秒关背光
if(lamp_var==1) {P0_1=1;}
}
} |
|
|
|