📄 dds.c
字号:
#include<AT89X52.h>
//#include<lcd.h>
#include<1302.h>
#include<music_code.h>
#include<SoundPlay.h>
//#include<dds.h>
#include<lcd1.h>
uchar code time[]={'0','1','2','3','4','5','6','7','8','9'};
uchar code get_up[]="Time to Get up!";
uchar code str[]="Never frown,even when you are sad,because you never know who is falling in love with your smile! To the world you are one person,but to one person you may be the world ";
uchar code menu[5][8]={{"校时"},{"铃声"},{"电子书"},{"闹钟"},{"日历"}};
uchar code daytab[7][3]= {"一","二","三","四","五","六","日"};
void main()
{
PSB=0;
lcddelay(300);
PSB=1;
RW=0;
lcdreset(); //初始化LCD屏
//CGRAM(); //调用自定义的CGRAM的代码
ceshi(); //显示测试字样
lcddelay(2000);
clrgdram();
clrscreen();
Disp_Img(BMP1); //调入一幅图画
lcddelay(20000);
clrscreen();
init_ds1302();
set_ds1302(time_add,initial_time);
while(1)
{
read_ring();
if(alarmsign)
if(ring_time[0]==now_time[0]&&ring_time[1]==now_time[1]&&ring_time[2]==now_time[2])
{
timeup();
}
detect();
write_com(0x80+0x3);
hzkdis(menu[key]);
get_ds1302();
now_week=getweek(now_time[5]/16*10+now_time[5]%16+2000,now_time[4]/16*10+now_time[4]%16,now_time[3]/16*10+now_time[3]%16);
write_com(0x91);
write_data(time[now_time[5]>>4]);
write_data(time[now_time[5]&0x0f]);
hzkdis("年");
write_data(time[now_time[4]>>4]);
write_data(time[now_time[4]&0x0f]);
hzkdis("月");
write_data(time[now_time[3]>>4]);
write_data(time[now_time[3]&0x0f]);
hzkdis("日");
write_com(0x8a);
write_data(time[now_time[2]>>4]);
write_data(time[now_time[2]&0x0f]);
write_data(':');
write_data(time[now_time[1]>>4]);
write_data(time[now_time[1]&0x0f]);
write_data(':');
write_data(time[now_time[0]>>4]);
write_data(time[now_time[0]&0x0f]);
write_com(0x98);
if(alarmsign==1)
hzkdis("AO ");
else
hzkdis("AC ");
write_data(time[ring_time[2]>>4]);
write_data(time[ring_time[2]&0x0f]);
write_data(':');
write_data(time[ring_time[1]>>4]);
write_data(time[ring_time[1]&0x0f]);
write_com(0x9d);
hzkdis("星期");
hzkdis(daytab[now_week-1]);
if(key==2)
{
book();
}
if(key==1)
{
music();
}
if(key==3)
{
alamn();
}
if(key==0)
{
time_set();
}
if(key==4)
{
rili();
}
}
}
void detect()
{
uchar temp;
temp=P2;
temp=temp&0x3f;
if(temp!=0x3f)
{
switch(temp)
{
case 0x3e:
while(temp!=0x3f)
{
temp=P2;
temp=temp&0x3f;
}
key++;
if(key==5)
{
key=0;
}
flag=1;
clrscreen();
break;
case 0x3d:
while(temp!=0x3f)
{
temp=P2;
temp=temp&0x3f;
}
if(key==0)
{
key=5;
}
key--;
flag=2;
clrscreen();
break;
case 0x3b:
while(temp!=0x3f)
{
temp=P2;
temp=temp&0x3f;
}
flag=3;
clrscreen();
break;
case 0x37:
while(temp!=0x3f)
{
temp=P2;
temp=temp&0x3f;
}
flag=4;
clrscreen();
break;
case 0x2f:
while(temp!=0x3f)
{
temp=P2;
temp=temp&0x3f;
}
flag=5;
clrscreen();
break;
case 0x1f:
while(temp!=0x3f)
{
temp=P2;
temp=temp&0x3f;
}
flag=6;
clrscreen();
break;
}
}
}
void page(uchar k)
{
write_com(0x80);
for(i=k*64;i<k*64+16&&str[i]!='\0';i++)
{
write_data(str[i]);
}
write_com(0x90);
for(i=k*64+16;i<k*64+32&&str[i]!='\0';i++)
{
write_data(str[i]);
}
write_com(0x88);
for(i=k*64+32;i<k*64+48&&str[i]!='\0';i++)
{
write_data(str[i]);
}
write_com(0x98);
for(i=k*64+48;i<k*64+64&&str[i]!='\0';i++)
{
write_data(str[i]);
}
}
void book()
{
flag=0;
detect();
if(flag==5)
{
flag=0;
page(sum);
while(flag!=6)
{
detect();
if(flag==1)
{
flag=0;
if(sum<3)
{
sum++;
}
}
if(flag==2)
{
flag=0;
if(sum>0)
{
sum--;
}
}
page(sum);
}
sum=0;
key=2;
}
}
void alamn()
{
flag=0;
detect();
if(flag==5)
{
flag=0;
while(flag!=6)
{
write_com(0x90+0x02);
write_data(time[move[0]]);
write_data(time[move[1]]);
write_data(':');
write_data(time[move[2]]);
write_data(time[move[3]]);
write_com(0x8a);
if(alarmsign==1)
hzkdis("闹钟开");
else
hzkdis("闹钟关");
detect();
if(flag==1)
{
flag=0;
move[1]=move[1]+1;
if(move[1]==10)
{
move[1]=0;
move[0]=move[0]+1;
}
if(move[0]==2)
{
if(move[1]==4)
{
move[1]=0;
move[0]=0;
}
}
ringgo[2]=move[0]<<4|move[1];
}
if(flag==2)
{
flag=0;
move[3]=move[3]+1;
if(move[3]==10)
{
move[3]=0;
move[2]=move[2]+1;
if(move[2]==6)
{
move[2]=0;
}
}
ringgo[1]=move[2]<<4|move[3];
}
if(flag==3)
{
flag=0;
alarmsign=~alarmsign;
}
if(flag==5)
{
set_ds1302(alamn_add,ringgo);//只要设定时和分,秒自动为零
flag=6;
}
}
key=3;
}
}
void time_set()
{
unsigned char setsign=0;
flag=0;
detect();
if(flag==5)
{
flag=0;
while(flag!=6)
{
write_com(0x90);
write_data(time[set[0]/10]);
write_data(time[set[0]%10]);
hzkdis("年");
write_data(time[set[1]/10]);
write_data(time[set[1]%10]);
hzkdis("月");
write_data(time[set[2]/10]);
write_data(time[set[2]%10]);
hzkdis("日");
write_com(0x88);
write_data(time[set[3]/10]);
write_data(time[set[3]%10]);
write_data(':');
write_data(time[set[4]/10]);
write_data(time[set[4]%10]);
write_data(':');
write_data(time[set[5]/10]);
write_data(time[set[5]%10]);
detect();
if(flag==1)
{
flag=0;
set[setsign]=set[setsign]+1;
}
else if(flag==2)
{
flag=0;
if(set[setsign]>0)
set[setsign]=set[setsign]-1;
}
else if(flag==3)
{
flag=0;
setsign++;
if(setsign==6)
setsign=0;
}
else if(flag==4)
{
flag=0;
set[setsign]+=10;
}
else if(flag==5)
{
for(setsign=0;setsign<6;setsign++)
timego[5-setsign]=set[setsign]/10*16+set[setsign]%10;
set_ds1302(time_add,timego);
write_data_ds1302(0x8e,0x00);
write_data_ds1302(0x86,timego[3]);
write_data_ds1302(0x88,timego[4]);
write_data_ds1302(0x8c,timego[5]);
write_data_ds1302(0x8e,0x80);
flag=6;
}
if(setsign==0)
{
if(set[setsign]>=100)
set[setsign]=0;
}
else if(setsign==1)
{
if(set[setsign]>12||set[setsign]<1)
set[setsign]=1;
}
else if(setsign==2)
{
if(set[0]%400==0||(set[0]%4==0&&set[0]%100!=0))
monthtab[1]=29;
if(set[setsign]>=monthtab[set[1]-1]||set[setsign]<1)
set[setsign]=1;
}
else if(setsign==3)
{
if(set[setsign]>=24)
set[setsign]=0;
}
else
{
if(set[setsign]>=60)
set[setsign]=0;
}
}
key=0;
}
}
void timeup()
{
clrscreen();
write_com(0x90);
hzkdis(get_up);
InitialSound();
switch(ring_song)
{
case 0:Play(tale,0,3,300);break;
case 1:Play(Love,0,3,340);break;
}
clrscreen();
}
void music()
{
flag=0;
detect();
if(flag==5)
{
flag=0;
clrscreen();
while(flag!=6)
{
detect();
if(key==2)
key=0;
if(key==5)
key=0;
write_com(0x90);
hzkdis(song[key]);
//for(i=0;song[key][i]!='\0';i++)
//{
// write_date(song[key][i]);
// }
if(flag==5)
{
InitialSound();
switch(key)
{
case 0:Play(tale,0,3,300);break;
case 1:Play(Love,0,3,340);break;
}
ring_song=key;
while(!esc);
}
}
clrscreen();
//write_order(0x01);
key=1;
}
}
//星期
//(百年%4*5天+年+年/4+月星期表+日+2天)%7
unsigned char getweek(unsigned year,unsigned char month,unsigned char day)
{
unsigned week;
unsigned char moontab1[]={3,6,0,3,5,1,3,6,2,4,0,2},moontab2[]={4,0,0,3,5,1,3,6,2,4,0,2};
if((0==year%400)||(0==year%4&&0!=year%100))
week=((year/100)%4*5+year%100+(year%100)/4+moontab1[month-1]+day+2)%7;
else
week=((year/100)%4*5+year%100+(year%100)/4+moontab2[month-1]+day+2)%7;
return week;
}
void pagerili(unsigned char k)
{
unsigned char fline=(k-1)*21+7-rili_week+1;
unsigned char j;
unsigned char line[]={0x91,0x89,0x99};
if(k==0)
{
write_com(0x90);
write_data(time[rili_set[0]/10]);
write_data(time[rili_set[0]%10]);
write_data(time[rili_set[1]/10]);
write_data(time[rili_set[1]%10]);
hzkdis("年");
write_data(time[rili_set[2]/10]);
write_data(time[rili_set[2]%10]);
hzkdis("月");
return;
}
write_com(0x80);
hzkdis("周一二三四五六日");
for(j=0;j<3;j++)
{
write_com(line[j]);
/* if(j==0&&k==1)
{
for(i=1;i<=8-rili_week;i++)
{
write_com(0x90+rili_week);
write_data(' ');
write_data(time[i]);
}
continue;
}*/
for(i=1;i<=7&&(fline+j*7+i-7)<=rili_monthday;i++)
{
if((fline+i+j*7)<17)
write_data(' ');
else
write_data(time[(fline+i+j*7-7)/10]);
if((fline+i+j*7)<8)
write_data(' ');
else
write_data(time[(fline+i+j*7-7)%10]);
}
}
}
void rilidis()
{
rili_year=rili_set[0]*100+rili_set[1];
rili_month=rili_set[2];
rili_week=getweek(rili_year,rili_month,1);
if(rili_month==4||rili_month==6||rili_month==9||rili_month==11)
rili_monthday=30;
else if(rili_month==2)
{
if(rili_year%400==0||(rili_year%4==0&&rili_year%100!=0))
rili_monthday=29;
else
rili_monthday=28;
}
else rili_monthday=31;
pagerili(0);
flag=0;
while(flag!=6)
{
detect();
if(flag==1)
{
flag=0;
if(sum<3)
sum++;
}
if(flag==2)
{
flag=0;
if(sum>0)
sum--;
}
pagerili(sum);
}
}
void rili()
{
unsigned char rili_setsign=0;
flag=0;
detect();
if(flag==5)
{
flag=0;
while(flag!=6)
{
write_com(0x80);
write_data(time[rili_set[0]/10]);
write_data(time[rili_set[0]%10]);
write_data(time[rili_set[1]/10]);
write_data(time[rili_set[1]%10]);
hzkdis("年");
write_data(time[rili_set[2]/10]);
write_data(time[rili_set[2]%10]);
hzkdis("月");
detect();
if(flag==1)
{
flag=0;
rili_set[rili_setsign]+=1;
}
else if(flag==2)
{
flag=0;
if(rili_set[rili_setsign]>0)
rili_set[rili_setsign]-=1;
}
else if(flag==3)
{
flag=0;
rili_setsign++;
if(rili_setsign==3)
rili_setsign=0;
}
else if(flag==4)
{
flag=0;
rili_set[rili_setsign]+=10;
}
else if(flag==5)
{
rilidis();
flag=6;
}
if(rili_setsign==0||rili_setsign==1)
{
if(rili_set[rili_setsign]>=100)
rili_set[rili_setsign]=0;
}
else if(rili_setsign==2)
{
if(rili_set[rili_setsign]>12||rili_set[rili_setsign]<1)
rili_set[rili_setsign]=1;
}
}
rili_set[0]=rili_set[1]=0;
rili_set[2]=1;
sum=0;
key=4;
clrscreen();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -