电子万年历源程序Word下载.docx
《电子万年历源程序Word下载.docx》由会员分享,可在线阅读,更多相关《电子万年历源程序Word下载.docx(42页珍藏版)》请在冰豆网上搜索。
TMOD=0x01。
TH0=(65535-20000>
/256。
//给定时器初值。
TL0=(65535-20000>
%256。
TR0=1。
//启动定时器T0
ET0=1。
//允许T0中断
EA=1。
LEDC=0。
//138正常工作
Beep_Flag=1。
//闹铃开
}//刷新数码管显示
voidFresh_Display(>
staticunsignedcharNum。
staticunsignedintFlash_Time。
Num++。
if(Num>
=8>
Num=0。
LED_DATA=0x00。
//P0口全部为零
if(Num==0>
{
L3=1。
L2=1。
L1=1。
//第八个数码管亮
}
elseif(Num==1>
{
L1=0。
//第七个数码管亮
elseif(Num==2>
L2=0。
//第六个数码管亮
elseif(Num==3>
//第五个数码管亮
elseif(Num==4>
L3=0。
//第四个数码管亮
elseif(Num==5>
//第二个数码管亮
elseif(Num==6>
L3=0。
//第一个数码管亮
elseif(Num==7>
L3=0。
//第零个数码亮
Flash_Time++。
LED_ON=0xff。
if(Flash_Time<
200>
LED_ON=~Flash_Number。
elseif(Flash_Time>
400>
Flash_Time=0。
temp=(1<
<
Num>
if((LED_ON&
temp>
>
0>
if((Beep_Flag==1>
&
(Num==0>
LED_DATA=Dis_Tab[Dis_Buffer[Num]]+0x20。
else
LED_DATA=Dis_Tab[Dis_Buffer[Num]]。
else
LED_DATA=0x00。
}
voidTest_Ring(>
//这个函数有什么作用?
unsignedchari,temp_m,temp_h。
temp_m=(F8563RWBuff[2]>
4>
*10+(F8563RWBuff[2]&
0x0f>
//分
temp_h=(F8563RWBuff[3]>
*10+(F8563RWBuff[3]&
//时
for(i=0。
i<
5。
i++>
if((temp_m==Ring_Buffer[i][0]>
(temp_h==Ring_Buffer[i][1]>
{
Ringing=1。
//Ring_Buffer[i][1]和Ring_Buffer[i][0]
break。
}
Ringing=0。
}//定时器02.5ms中断
voidTimer0(>
interrupt1
staticunsignedcharkey_Down_Time。
TH0=(65535-2500>
TL0=(65535-2500>
Fresh_Display(>
//动态扫描数码管
if(K_D==0>
//扫描按键
key_Down_Time++。
if(key_Down_Time>
3>
{
Key_Value=K_Port>
if(Key_Bak==10>
//对于前一次按键值,怎么处理?
{
Key_Flag=1。
//置按键标志位。
Key_Bak=Key_Value。
//存贮当前按键值。
if(Ringing_Time>
10>
//设定闹铃的时间
Ringing_Time=0。
}
else//如果没有键按下
key_Down_Time=0。
Key_Bak=10。
if(Ringing_Time>
0>
Ringing=0。
Ringing_Time--。
BEEP=0。
//开闹铃
BEEP=1。
//关闹铃
if(Ringing==1>
Ringing_Time=12000。
voidAdjust_Time(>
unsignedcharposition=1。
//position有什么作用?
Adjust_Buffer[0]=(F8563RWBuff[1]>
*10+(F8563RWBuff[1]&
。
//秒
Adjust_Buffer[1]=(F8563RWBuff[2]>
//分。
Adjust_Buffer[2]=(F8563RWBuff[3]>
if(position==1>
Flash_Number=0x03。
elseif(position==2>
Flash_Number=0x18。
elseif(position==3>
Flash_Number=0xC0。
if(Key_Flag==1>
Key_Flag=0。
if(Key_Value==2
if(position<
position++。
elseif(Key_Value==1>
//1号键被按下
if(position>
position--。
elseif(Key_Value==3>
//++
if(position==1>
{
if(Adjust_Buffer[0]<
60>
Adjust_Buffer[0]++。
else
Adjust_Buffer[0]=30。
elseif(position==2>
if(Adjust_Buffer[1]<
Adjust_Buffer[1]++。
Adjust_Buffer[1]=30。
}
elseif(position==3>
if(Adjust_Buffer[2]<
24>
Adjust_Buffer[2]++。
Adjust_Buffer[2]=12。
elseif(Key_Value==4>
//--{
{
if(Adjust_Buffer[0]>
Adjust_Buffer[0]--。
if(Adjust_Buffer[1]>
Adjust_Buffer[1]--。
if(Adjust_Buffer[2]>
Adjust_Buffer[2]--。
elseif(Key_Value==0>
//
F8563RWBuff[1]=(Dis_Buffer[1]<
+Dis_Buffer[0]。
//秒
F8563RWBuff[2]=(Dis_Buffer[4]<
+Dis_Buffer[3]。
F8563RWBuff[3]=(Dis_Buffer[7]<
+Dis_Buffer[6]。
SetTimeto8563(>
break。
Dis_Buffer[0]=Adjust_Buffer[0]%10。
Dis_Buffer[1]=Adjust_Buffer[0]/10。
Dis_Buffer[3]=Adjust_Buffer[1]%10。
Dis_Buffer[4]=Adjust_Buffer[1]/10。
Dis_Buffer[6]=Adjust_Buffer[2]%10。
Dis_Buffer[7]=Adjust_Buffer[2]/10。
voidAdjust_Month(>
Adjust_Buffer[0]=(F8563RWBuff[4]>
*10+(F8563RWBuff[4]&
Adjust_Buffer[1]=(F8563RWBuff[5]>
*10+(F8563RWBuff[5]&
Adjust_Buffer[2]=(F8563RWBuff[6]>
*10+(F8563RWBuff[6]&
while(1>
if(Key_Value==2>
elseif(Key_Value==1>
//++
32>
Adjust_Buffer[0]=15。
12>
Adjust_Buffer[1]=6。
99>
Adjust_Buffer[2]=50。
F8563RWBuff[4]=(Dis_Buffer[1]<
F8563RWBuff[5]=(Dis_Buffer[4]<
F8563RWBuff[6]=(Dis_Buffer[7]<
Dis_Buffer[1]=Adjust_Buffer[0]/10。
//分
Dis_Buffer[4]=Adjust_Buffer[1]/10。
voidRewrite_Time(>
unsignedchari。
i=1。
Flash_Number=0xff。
//所有数码管均闪烁
while(1>
GetTimeFrom8563(>
if(Key_Flag==1>
if(Key_Value==6>
i++。
if(i==3>
i=1。
elseif(Key_Value==5>
//闹铃键当确认键
if(i==1>
Adjust_Time(>
//调整整时分秒
_nop_(>
return。
elseif(i==2>
Adjust_Month(>
//调整整年月日
elseif((Key_Value>
(Key_Value<
5>
return。
elseif(Key_Value==7>
if(i==1>
Dis_Buffer[0]=(F8563RWBuff[1]&
Dis_Buffer[1]=(F8563RWBuff[1]>
Dis_Buffer[2]=12。
Dis_Buffer[3]=(F8563RWBuff[2]&
Dis_Buffer[4]=(F8563RWBuff[2]>
Dis_Buffer[5]=12。
Dis_Buffer[6]=(F8563RWBuff[3]&
Dis_Buffer[7]=(F8563RWBuff[3]>
elseif(i==2>
Dis_Buffer[0]=(F8563RWBuff[4]&
Dis_Buffer[1]=(F8563RWBuff[4]>
Dis_Buffer[3]=(F8563RWBuff[5]&
Dis_Buffer[4]=(F8563RWBuff[5]>
Dis_Buffer[6]=(F8563RWBuff[6]&
Dis_Buffer[7]=(F8563RWBuff[6]>
voidAdd_Ring(>
unsignedcharring_Number=1,position。
Flash_Number=0x00。
if(Key_Value==4>
if(ring_Number>
1>
ring_Number--。
if(ring_Number<
ring_Number++。
//确定进入调整某个闹铃
else
if(Key_Value!
=7>
Dis_Buffer[0]=Ring_Buffer[ring_Number-1][0]%10。
Dis_Buffer[1]=Ring_Buffer[ring_Number-1][0]/10。
Dis_Buffer[2]=12。
Dis_Buffer[3]=Ring_Buffer[ring_Number-1][1]%10。
Dis_Buffer[4]=Ring_Buffer[ring_Number-1][1]/10。
Dis_Buffer[5]=13。
Dis_Buffer[6]=13。
Dis_Buffer[7]=ring_Number。
position=1。
2>
if(Ring_Buffer[ring_Number-1][0]<
59>
Ring_Buffer[ring_Number-1][0]++。
Ring_Buffer[ring_Number-1][0]=30。
if(Ring_Buffer[ring_Number-1][1]<
23>
Ring_Buffer[ring_Number-1][1]++。
Ring_Buffer[ring_Number-1][1]=12。
if(Ring_Buffer[ring_Number-1][0]>
Ring_Buffer[ring_Number-1][0]--。
if(Ring_Buffer[ring_Number-1][1]>
Ring_Buffer[ring_Number-1][1]--。
Beep_Flag=1。
//打开闹铃
Dis_Buffer[3]=Ring_Buffer[ring_Number-1][1]%10。
voidmain(>
unsignedinti。
Delay_1ms(500>
Sys_Init(>
Delay_1ms(100>
Flash_Number=0x00。
//闪烁控制位为0,所有的位都不闪烁。
i++。
Flash_Number=0x00。
if(i>