基于51单片机控制的语音报时万年历课程设计Word格式.docx
《基于51单片机控制的语音报时万年历课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机控制的语音报时万年历课程设计Word格式.docx(44页珍藏版)》请在冰豆网上搜索。
12864.h"
main.h"
isd1700.h"
sound.h"
externunsignedintcount;
externunsignedintkey_time[8];
externunsignedcharkey_new;
externunsignedcharkey_old;
externunsignedcharstop_flag;
externunsignedcharkey_follow[8];
externunsignedintkey_num[8];
sbitBEEP=P3^7;
sbitISD_SS=P0^7;
sbitISD_MISO=P0^4;
sbitISD_MOSI=P0^5;
sbitISD_SCLK=P0^6;
externunsignedchardate_show[];
externunsignedchartime_show[];
externunsignedcharsec;
externunsignedcharmin;
externunsignedcharhour;
externunsignedcharday;
externunsignedcharmonth;
externunsignedcharyear_f;
externunsignedcharyear_l;
externunsignedcharleap_year_flag;
externunsignedcharupdate_flag;
externunsignedcharadjust_flag;
externunsignedcharkey;
unsignedcharreport();
#endif
Main.c
unsignedintcount=0;
unsignedintkey_num[8]=0;
unsignedcharkey_new=0;
unsignedcharkey_old=0;
unsignedcharstop_flag=0;
unsignedcharkey_follow[8]=0;
unsignedcharsec=1;
unsignedcharmin=0;
unsignedcharhour=9;
unsignedcharday=1;
unsignedcharmonth=1;
unsignedcharyear_f=20;
unsignedcharyear_l=14;
unsignedcharleap_year_flag=0;
unsignedchardate_show[]="
2014-01-01"
;
unsignedchartime_show[]="
09:
00"
unsignedcharupdate_flag=1;
unsignedcharkey=0;
unsignedcharadjust_flag=0;
unsignedcharadjust_pos=0;
unsignedcharreport_flag=0;
voidmain()
{
unsignedchari;
P2=0XFF;
BEEP=0;
init();
initinal();
//调用LCD字库初始化程序
TMOD=0x01;
//使用定时器T0
TH0=(65536-1000)/256;
//定时器高八位赋初值
TL0=(65536-1000)%256;
//定时器低八位赋初值*/
EA=1;
//开中断总允许
ET0=1;
//允许T0中断
TR0=1;
//启动定时器T0
while
(1)
{
if(update_flag)
{
lcd_pos(1,0);
for(i=0;
i<
10;
i++)
write_dat(date_show[i]);
lcd_pos(2,4);
8;
write_dat(time_show[i]);
update_flag=0;
}
if(key!
=keyscan_nor())
key=keyscan_nor();
if(key==8&
&
!
adjust_flag)
adjust_flag=1;
if(key&
adjust_flag)
if(key==1)
{
adjust_pos++;
if(adjust_pos==14)
adjust_pos=0;
}
elseif(key==2)
if(!
adjust_pos)
adjust_pos=13;
else
adjust_pos--;
elseif(key==6)
sec++;
elseif(adjust_pos==1)
sec=sec+10;
elseif(adjust_pos==2)
min++;
elseif(adjust_pos==3)
min=min+10;
elseif(adjust_pos==4)
hour++;
elseif(adjust_pos==5)
hour=hour+10;
elseif(adjust_pos==6)
day++;
elseif(adjust_pos==7)
day=day+10;
elseif(adjust_pos==8)
month++;
elseif(adjust_pos==9)
month=month+10;
elseif(adjust_pos==10)
year_l++;
elseif(adjust_pos==11)
year_l=year_l+10;
elseif(adjust_pos==12)
year_f++;
elseif(adjust_pos==13)
year_f=year_f+10;
elseif(key==7)
sec--;
sec=sec-10;
min--;
min=min-10;
hour--;
hour=hour-10;
day--;
day=day-10;
month--;
month=month-10;
year_l--;
year_l=year_l-10;
year_f--;
year_f=year_f-10;
elseif(key==3)
adjust_flag=0;
if(key==6||key==7)
if(sec>
=80)
sec=0;
if(min>
min=0;
if(hour>
=40)
hour=0;
if(month>
30)
month=1;
if(day>
50)
day=0;
if(year_f>
=120)
year_f=0;
if(year_l>
year_l=0;
}
if(key==3)
report_flag=1;
if(report_flag)
clrram();
Dingwei(2,1);
lcd_mesg("
REPORTING!
"
);
report();
}
voidtime0()interrupt1
staticunsignedchartimer=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
//定时器低八位赋初值
timer++;
if(timer==20)
sec++;
time_show[6]=sec/10+48;
time_show[7]=sec%10+48;
if(sec>
=60)
sec=0;
min++;
time_show[6]=sec/10+48;
time_show[7]=sec%10+48;
time_show[3]=min/10+48;
time_show[4]=min%10+48;
if(min>
min=0;
hour++;
time_show[0]=hour/10+48;
time_show[1]=hour%10+48;
if(hour>
=24)
{
hour=0;
day++;
date_show[8]=day/10+48;
date_show[9]=day%10+48;
if((day>
=29&
leap_year_flag&
month==2)||(day==30&
month==2)||
(day==31&
(month==4||month==6||month==9||month==11))||(month==32))
day=1;
month++;
date_show[5]=month/10+48;
date_show[6]=month%10+48;
if(month>
=13)
month=1;
year_l++;
date_show[0]=year_f/10+48;
date_show[1]=year_f%10+48;
date_show[2]=year_l/10+48;
date_show[3]=year_l%10+48;
if(year_l>
=100)
year_l=0;
year_f++;
if(((!
((year_f*100+year_l)%4))&
((year_f*100+year_l)%100))||(!
((year_f*100+year_l)%400)))
leap_year_flag=1;
else
leap_year_flag=0;
timer=0;
update_flag=1;
if(adjust_flag)
if(adjust_flag&
timer==10)
if(!
adjust_pos)
time_show[7]='
'
elseif(adjust_pos==1)
time_show[6]='
elseif(adjust_pos==2)
time_show[4]='
elseif(adjust_pos==3)
time_show[3]='
elseif(adjust_pos==4)
time_show[1]='
elseif(adjust_pos==5)
time_show[0]='
elseif(adjust_pos==6)
date_show[9]='
elseif(adjust_pos==7)
date_show[8]='
elseif(adjust_pos==8)
date_show[6]='
elseif(adjust_pos==9)
date_show[5]='
elseif(adjust_pos==10)
date_show[3]='
elseif(adjust_pos==11)
date_show[2]='
elseif(adjust_pos==12)
date_show[1]='
elseif(adjust_pos==13)
date_show[0]='
if(!
min&
sec&
}
unsignedcharreport()
PlaySoundTick(11);
long_delay();
min)
if(hour<
=10)
PlaySoundTick(hour);
short_delay();
PlaySoundTick(12);
PlaySoundTick(14);
elseif(hour>
10&
hour<
20)
PlaySoundTick(10);
PlaySoundTick(hour-10);
elseif(hour==20)
PlaySoundTick
(2);
else
PlaySoundTick(hour-20);
}
else
}
if(min<
PlaySoundTick(min);
PlaySoundTick(13);
elseif(min>
min%10)
PlaySoundTick(min/10);
PlaySoundTick(min-10*(min/10));
else
report_flag=0;
time_show[7]=sec%10+48;
time_show[6]=sec/10+48;
time_show[4]=min%10+48;
time_show[3]=min/10+48;
time_show[1]=hour%10+48;
time_show[0]=hour/10+48;
date_show[9]=day%10+48;
date_show[8]=day/10+48;
date_show[6]=month%10+48;
date_show[5]