📄 main.c
字号:
#include"include.h"
//函数声明
void Up_date();
void Up_disp();
void To_almarray();
extern void Song_delay();
void Play();
//定义新旧日期/时间变量
struct date new_date,old_date;
struct time new_time,old_time,alm_time;
//定义软件延时计数变量
uchar secount=0;
//定义闹钟开关变量
bit on=0;
bit K1=1;
//定义扬声器引脚
sbit speaker=P1^0;
code uchar menu3[16]="--Made by Zheng@";
code uchar menu4[16]="Kunlong &Lorise@";
code uchar dispweek[7][4]={"Mon@","Tus@","Wes@","Thu@","Fir@","Sat@","Sun@"};
code uchar menu1[16]="1.Time 2.Alarm @";
code uchar menu2[16]="3.manufacturer@";
code uchar alarm_menu[]="Alarm time@";
code uchar onoff[2][4]={"OFF@","ON @"};
//定义时间、日期显示数组
struct disptime disp_time,disp_almtime;
struct dispdate disp_date;
//--------------------------------------------------------------------------
/******************定义音乐表***************************************/
uint code musictab[]={64103,64260,64400,64524,
64580,64684,64777,64820,64898,64968,65030,
65058,65110,65157,65178,65217,65252,65282};
/***************************音乐谱***************************************/
uchar code songtab[]={0x92,0xa2,0xc6,0xa2,0xc4,0xa2,0x92,0xa2,0xa2,0xa2,
0x92,0xa4,0x92,0xa2,0xc6,0xa2,0xc4,0xa2,0x92,0xa2,
0x92,0x92,0x72,0x64,0x62,0x72,0x56,0x32,0x54,0x22,
0xa2,0xa2,0x92,0x92,0x72,0x74,0x62,0x72,0x56,0x32,
0x72,0x92,0x92,0x72,0x9c,0x92,0xa2,0xc6,0xa2,0xc4,
0xa2,0x92,0xa2,0xa2,0xa2,0x92,0xa4,0x92,0xa2,0xc6,
0xa2,0xc4,0xa2,0x92,0xa2,0x92,0x92,0x72,0x64,0x62,
0x72,0x56,0x32,0x54,0x22,0xa2,0xa2,0x92,0x92,0x72,
0x74,0x62,0x72,0x66,0xa2,0x92,0x72,0x72,0x62,0x52,
0x56,0x02,0x92,0x92,0xa2,0xd2,0xc2,0xc2,0xa2,0xc4,
0xa2,0x92,0x22,0xa2,0xa2,0x92,0xa4,0x92,0xa2,0xd2,
0xc2,0xc2,0xa2,0xc4,0xa2,0x92,0xa2,0x92,0x72,0x72,
0x64,0x62,0x72,0x56,0x32,0x62,0xa2,0xa2,0x92,0x92,
0x72,0x74,0x62,0x72,0x66,0x52,0x64,0xa2,0x92,0x94,
0x04,0x72,0x62,0x62,0x74,0x5e,0x04,0x04,0x04,0x04,
0x74,0x74,0x74,0x72,0x32,0x3e,0x74,0x74,0x74,0x72,
0x92,0x3e,0x66,0x72,0x64,0x74,0x96,0x72,0x68,0x64,
0x62,0x72,0x94,0xa4,0x9e,0x00};
/******************定义音乐相关变量***************************************/
uchar time1,time2,tvar,play_point=0;
uchar hcount,lcount;
/***************计时中断程序*******************/
void time() interrupt 1
{
TH0=0x3c;
TL0=0xd3;
secount++;
if(secount==20)
{
secount=0;
new_time.second++;
if(new_time.second>=60)
{
new_time.second=0;
new_time.minute++;
if(new_time.minute>=60)
{
new_time.minute=0;
new_time.hour++;
if(new_time.hour>=24)
{
new_time.hour=0;
Up_date();
}
}
}
}
if(on&&Get_keynum()==15)
K1=0;
}
/******************音乐中断程序****************************/
void time_int() interrupt 3
{
speaker=~speaker;
TH1=hcount;
TL1=lcount;
}
//初始化函数
void Init()
{
//初始化时间变量
new_time.second=old_time.second=0;
new_time.minute=old_time.minute=0;
new_time.hour=old_time.hour=0;
//初始化闹钟时间变量
alm_time.second=30;
alm_time.minute=50;
alm_time.hour=7;
//初始化日期变量
new_date.year=old_date.year=2007;
new_date.month=old_date.month=5;
new_date.day=old_date.day=10;
new_date.week=old_date.week=3;
//初始化时间显示数组
disp_time.hour[2]='@';
disp_time.minute[2]='@';
disp_time.second[2]='@';
//初始化闹钟时间显示数组
disp_almtime.hour[2]='@';
disp_almtime.minute[2]='@';
disp_almtime.second[2]='@';
//初始化日期显示数组
disp_date.year[4]='@';
disp_date.month[2]='@';
disp_date.day[2]='@';
To_almarray();
Init_LCD();
TMOD=0x11;
TH0=0x3c;
TL0=0xd3;
IE=0x8a;
speaker=1;
TR0=1;
}
void Disp_menu1()
{
Dis_string(1,1,menu3);
Dis_string(2,1,menu4);
}
void Disp_menu()
{
Dis_string(1,1,menu1);
Dis_string(2,1,menu2);
}
void Dis_date(struct dispdate date1)
{
Dis_string(1,2,date1.year);
Dis_string(1,6,"/@");
Dis_string(1,7,date1.month);
Dis_string(1,9,"/@");
Dis_string(1,10,date1.day);
}
void Dis_time(struct disptime time1)
{
Dis_string(2,3,time1.hour);
Dis_string(2,5,":@");
Dis_string(2,6,time1.minute);
Dis_string(2,8,":@");
Dis_string(2,9,time1.second);
}
//显示所有数据
void Disp_all()
{
Dis_date(disp_date);
Dis_string(1,14,dispweek[new_date.week-1]);
Dis_time(disp_time);
}
void To_almvalue()
{
alm_time.hour=(disp_almtime.hour[0]-'0')*10+(disp_almtime.hour[1]-'0');
alm_time.minute=(disp_almtime.minute[0]-'0')*10+(disp_almtime.minute[1]-'0');
alm_time.second=(disp_almtime.second[0]-'0')*10+(disp_almtime.second[1]-'0');
}
//把显示数组的值转换为十进制数值
void To_value()
{
new_date.year=(disp_date.year[0]-'0')*1000+(disp_date.year[1]-'0')*100
+(disp_date.year[2]-'0')*10+(disp_date.year[3]-'0');
new_date.month=(disp_date.month[0]-'0')*10+(disp_date.month[1]-'0');
new_date.day=(disp_date.day[0]-'0')*10+(disp_date.day[1]-'0');
new_time.hour=(disp_time.hour[0]-'0')*10+(disp_time.hour[1]-'0');
new_time.minute=(disp_time.minute[0]-'0')*10+(disp_time.minute[1]-'0');
new_time.second=(disp_time.second[0]-'0')*10+(disp_time.second[1]-'0');
}
void To_almarray()
{
disp_almtime.hour[0]=alm_time.hour/10+'0';
disp_almtime.hour[1]=alm_time.hour%10+'0';
disp_almtime.minute[0]=alm_time.minute/10+'0';
disp_almtime.minute[1]=alm_time.minute%10+'0';
disp_almtime.second[0]=alm_time.second/10+'0';
disp_almtime.second[1]=alm_time.second%10+'0';
}
//
void To_array()
{
disp_date.year[0]=old_date.year/1000+'0';
disp_date.year[1]=(old_date.year/100)%10+'0';
disp_date.year[2]=(old_date.year/10)%10+'0';
disp_date.year[3]=old_date.year%10+'0';
disp_date.month[0]=old_date.month/10+'0';
disp_date.month[1]=old_date.month%10+'0';
disp_date.day[0]=old_date.day/10+'0';
disp_date.day[1]=old_date.day%10+'0';
disp_time.hour[0]=old_time.hour/10+'0';
disp_time.hour[1]=old_time.hour%10+'0';
disp_time.minute[0]=old_time.minute/10+'0';
disp_time.minute[1]=old_time.minute%10+'0';
disp_time.second[0]=old_time.second/10+'0';
disp_time.second[1]=old_time.second%10+'0';
}
/***********************日期更新函数************************/
void Up_date()
{
new_date.week++;
if(new_date.week==8)
new_date.week=1;
new_date.day++;
if(new_date.day>=29)
{
switch(new_date.month)
{
case 2:
{
if(new_date.year%4==0&&new_date.year%100!=0||new_date.year%400==0)
{
if(new_date.day==30)
{
new_date.day=0;
new_date.month++;
}
else
{
new_date.day=0;
new_date.month++;
}
}
break;
}
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
{
if(new_date.day==32)
{
new_date.day=0;
new_date.month++;
}
break;
}
case 4:case 6:case 9:case 11:
{
if(new_date.day==31)
{
new_date.day=0;
new_date.month++;
}
break;
}
}
if(new_date.month==13)
{
new_date.month=0;
new_date.year++;
}
if(new_date.year==6000)
new_date.year=0;
}
}
void Up_alarm()
{
uchar keynum=0xff,pos=0;
Wrcom(0x01); //清屏
Dis_string(1,3,alarm_menu); //闹钟提示菜单
Dis_time(disp_almtime);
Dis_string(2,12,onoff[on]);
Dis_cursor(2,3); //光标闪烁
keynum=Get_keynum(); //获取键值
while(keynum!=12)
{
if(keynum==11)
{
if(pos<9)
{
if(pos==1||pos==4||pos==7)
pos+=2;
else
pos++;
}
else
pos=0;
Dis_cursor(2,3+pos);
}
else if(keynum==10)
{
if(pos>0)
{
if(pos==9||pos==6||pos==3)
pos-=2;
else
pos--;
}
else
pos=0;
}
else if(keynum<=9)
{
switch(pos)
{
case 0:
{
if(keynum>2)
break;
disp_almtime.hour[0]=keynum+'0';
Disdata(keynum+'0');
pos++;
break;
}
case 1:
{
if(keynum>3&&disp_almtime.hour[0]==2+'0')
break;
disp_almtime.hour[1]=keynum+'0';
Disdata(keynum+'0');
pos+=2;
break;
}
case 3:
{
if(keynum>5)
break;
disp_almtime.minute[0]=keynum+'0';
Disdata(keynum+'0');
pos++;
break;
}
case 4:
{
disp_almtime.minute[1]=keynum+'0';
Disdata(keynum+'0');
pos+=2;
break;
}
case 6:
{
if(keynum>5)
break;
disp_almtime.second[0]=keynum+'0';
Disdata(keynum+'0');
pos++;
break;
}
case 7:
{
disp_almtime.second[1]=keynum+'0';
Disdata(keynum+'0');
pos+=2;
break;
}
case 9:
{
on=~on;
Dis_string(2,12,onoff[on]);
break;
}
}
}
else
Dis_cursor(2,3+pos);
keynum=Get_keynum(); //获取键值
}
Wrcom(0x01); //清屏
Wrcom(0x0c); //开显示,关光标及闪烁
To_almvalue();
}
/*********************修改变量和显示函数************************/
void Up_value()
{
uchar keynum=0xff,pos=0;
Wrcom(0x01); //清屏
Disp_all();
Dis_cursor(1,2); //光标闪烁
keynum=Get_keynum(); //获取键值
while(keynum!=12)
{
if(keynum==11)
{
if(pos<14)
{
if(pos==3||pos==6||pos==9)
pos+=2;
else if(pos==12||pos==13||pos==14)
pos=15;
else
pos++;
Dis_cursor(1,2+pos);
}
else if(pos<22)
{
if(pos==16||pos==19)
pos+=2;
else
pos++;
Dis_cursor(2,pos-12);
}
else
{
pos=0;
Dis_cursor(1,2);
}
}
else if(keynum==10)
{
if(pos<=0)
{
pos=0;
Dis_cursor(1,2);
}
else if(pos<16)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -