#include "Device.h"
#include "ds1820.h"
Uint8 code table[]=" 20 - - ";
Uint8 code table1[]=" : : C";
sbit key_function=P2^0;
sbit key_up=P2^1;
sbit key_down=P2^2;
sbit key_alarm=P3^4;
sbit speak=P3^0;
int8 miao,shi,fen,year,month,day,week,amiao,ashi,afen;
Uint8 key_num=0,temperature_l,temperature_h;
int16 temperature;
bit year_flag,month_flag,clock_run_flag,sign_flag,alarmclock_flag,alarmclock_check_flag;
void keyscanf()
{
if(alarmclock_flag==1)
{
if((key_function==0)||(key_up==0)||(key_down==0)||(key_alarm==0))
{
delay_ms(5);
if((key_function==0)||(key_up==0)||(key_down==0)||(key_alarm==0))
{
while(!(key_function&&key_up&&key_down&&key_alarm));
alarmclock_flag=0;
}
}
}
if(key_function==0)
{
delay_ms(5);
if(key_function==0)
{
key_num++;
clock_run_flag=1;
if(alarmclock_check_flag==1)
if(key_num==8)
key_num=5;
while(!key_function);
switch(key_num)
{
case 1: lcd1602_wr_com(0x80+3);
lcd1602_wr_com(0x0f);
break;
case 2: lcd1602_wr_com(0x80+6);
break;
case 3: lcd1602_wr_com(0x80+9);
break;
case 4: lcd1602_wr_com(0x80+12);
break;
case 5: lcd1602_wr_com(0xc0+3);
break;
case 6: lcd1602_wr_com(0xc0+6);
break;
case 7: lcd1602_wr_com(0xc0+9);
break;
case 8: key_num=0;
lcd1602_wr_com(0x0c);
ds12c887a_wr_date(0x00,miao);
ds12c887a_wr_date(0x02,fen);
ds12c887a_wr_date(0x04,shi);
ds12c887a_wr_date(0x06,week);
ds12c887a_wr_date(0x07,day);
ds12c887a_wr_date(0x08,month);
ds12c887a_wr_date(0x09,year);
clock_run_flag=0;
break;
}
}
}
if(key_num!=0)
{
if(key_up==0)
{
delay_ms(1);
if(key_up==0)
{
while(!key_up);
switch(key_num)
{
case 1: year++;
if(year==100)
year=0;
lcd1602_wr_nyr(3,year);
lcd1602_wr_com(0x80+3);
year_flag=run_year(year);
break;
case 2: month++;
if(month==13)
month=1;
lcd1602_wr_nyr(6,month);
lcd1602_wr_com(0x80+6);
month_flag=month_judgement(month);
break;
case 3: day++;
if((year_flag==1)&&(month==2))
{
if(day==30)
day=1;
}
if((year_flag==0)&&(month==2))
{
if(day==29)
day=1;
}
if(month_flag==1)
{
if(day==32)
day=1;
}
if(month_flag==0)
{
if(day==31)
day=1;
}
lcd1602_wr_nyr(9,day);
lcd1602_wr_com(0x80+9);
break;
case 4: week++;
if(week==8)
week=1;
lcd1602_wr_week(week);
lcd1602_wr_com(0x80+12);
break;
case 5: shi++;
if(shi==24)
shi=0;
lcd1602_wr_sfm(3,shi);
lcd1602_wr_com(0xc0+3);
break;
case 6: fen++;
if(fen==60)
fen=0;
lcd1602_wr_sfm(6,fen);
lcd1602_wr_com(0xc0+6);
break;
case 7: miao++;
if(miao==60)
miao=0;
lcd1602_wr_sfm(9,miao);
lcd1602_wr_com(0xc0+9);
break;
}
}
}
if(key_down==0)
{
delay_ms(1);
if(key_down==0)
{
while(!key_down);
switch(key_num)
{
case 1: year--;
if(year==-1)
year=99;
lcd1602_wr_nyr(3,year);
lcd1602_wr_com(0x80+3);
year_flag=run_year(year);
break;
case 2: month--;
if(month==0)
month=12;
lcd1602_wr_nyr(6,month);
lcd1602_wr_com(0x80+6);
month_flag=month_judgement(month);
break;
case 3: day--;
if((year_flag==1)&&(month==2))
{
if(day==0)
day=29;
}
if((year_flag==0)&&(month==2))
{
if(day==0)
day=28;
}
if(month_flag==1)
{
if(day==0)
day=31;
}
if(month_flag==0)
{
if(day==0)
day=30;
}
lcd1602_wr_nyr(9,day);
lcd1602_wr_com(0x80+9);
break;
case 4: week--;
if(week==0)
week=7;
lcd1602_wr_week(week);
lcd1602_wr_com(0x80+12);
break;
case 5: shi--;
if(shi==-1)
shi=23;
lcd1602_wr_sfm(3,shi);
lcd1602_wr_com(0xc0+3);
break;
case 6: fen--;
if(fen==-1)
fen=59;
lcd1602_wr_sfm(6,fen);
lcd1602_wr_com(0xc0+6);
break;
case 7: miao--;
if(miao==-1)
miao=59;
lcd1602_wr_sfm(9,miao);
lcd1602_wr_com(0xc0+9);
break;
}
}
}
}
if(key_alarm==0)
{
delay_ms(5);
if(key_alarm==0)
{
alarmclock_check_flag=~alarmclock_check_flag;
while(!key_alarm);
}
if(alarmclock_check_flag==1)
{
amiao=ds12c887a_rd_date(0x01);
afen=ds12c887a_rd_date(0x03);
ashi=ds12c887a_rd_date(0x05);
key_num=5;
miao=amiao;
fen=afen;
shi=ashi;
lcd1602_wr_com(0xc0);
lcd1602_wr_data('A');
lcd1602_wr_data('C');
lcd1602_wr_com(0xc3);
lcd1602_wr_com(0x0f);
lcd1602_wr_sfm(3,shi);
lcd1602_wr_sfm(6,fen);
lcd1602_wr_sfm(9,miao);
}
else
{
clock_run_flag=0;
lcd1602_wr_com(0xc0);
lcd1602_wr_data(' ');
lcd1602_wr_data(' ');
lcd1602_wr_com(0x0c);
ds12c887a_wr_date(0x01,miao);
ds12c887a_wr_date(0x03,fen);
ds12c887a_wr_date(0x05,shi);
}
}
}
int16 ds18b20_temperature_conver()
{
int16 date;
ds18b20_reset();
ds18b20_wr_data(0xcc);
ds18b20_wr_data(0x44);
// delay_ms(750);
ds18b20_reset();
ds18b20_wr_data(0xcc);
ds18b20_wr_data(0xbe);
temperature_l=ds18b20_rd_data();
temperature_h=ds18b20_rd_data();
ds18b20_reset();
date=((temperature_h<<8)|temperature_l);
return date;
}
void ds18b20_temperature_display()
{
temperature=ds18b20_temperature_conver();
if((temperature_h&0xf0)==0xf0)
{
temperature=(~temperature)+1;
sign_flag=1;
}
else
sign_flag=0;
temperature*=0.0625;
lcd1602_wr_temperatuer(sign_flag,temperature);
}
void speak_di()
{
speak=1;
delay_ms(100);
speak=0;
}
void main()
{
ds12c887a_init();
lcd1602_init();
EA=1;
ET1=1;
IT1=1;
alarmclock_check_flag=0;
clock_run_flag=0;
lcd1602_wr_any(1,0,&table[0]);
delay_ms(5);
lcd1602_wr_any(2,3,&table1[0]);
while(1)
{
keyscanf();
if(alarmclock_flag==1)
{
speak_di();
delay_ms(100);
speak_di();
delay_ms(100);
}
if((clock_run_flag==0)&&(alarmclock_check_flag==0))
{
year=ds12c887a_rd_date(0x09);
month=ds12c887a_rd_date(0x08);
day=ds12c887a_rd_date(0x07);
week=ds12c887a_rd_date(0x06);
shi=ds12c887a_rd_date(0x04);
fen=ds12c887a_rd_date(0x02);
miao=ds12c887a_rd_date(0x00);
lcd1602_wr_nyr(3,year);
lcd1602_wr_nyr(6,month);
lcd1602_wr_nyr(9,day);
lcd1602_wr_week(week);
lcd1602_wr_sfm(3,shi);
lcd1602_wr_sfm(6,fen);
lcd1602_wr_sfm(9,miao);
ds18b20_temperature_conver();
ds18b20_temperature_display();
}
}
}
void exter1()interrupt 2
{
Uint8 a;
alarmclock_flag=1;
a=ds12c887a_rd_date(0x0c);
}
评论0