电子万年历源程序
时间:2025-07-13
时间:2025-07-13
电子万年历源程序
IO口程序
#include <reg52.h>//*****数码管引脚*****
sbit L1 = P2^0; sbit L2 = P2^1; sbit L3 = P2^2; sbit LEDC= P2^3;
#define LED_DATA P0//按键接口定义 #define K_Port P2
sbit K_D = P3^3; //外部中断1
#include <main.h>
void Delay_1ms(unsigned int time) { unsigned char temp; while(time--) for(temp=127;temp>0;temp--) _nop_(); }//系统初始化 void Sys_Init() {
TMOD=0x01;
TH0=(65535-20000)/256;//给定时器初值。 TL0=(65535-20000)%256; TR0=1;//启动定时器T0 ET0=1;//允许T0中断 EA=1; LEDC=0; //138正常工作 Beep_Flag=1;//闹铃开 }//刷新数码管显示 void Fresh_Display() { static unsigned char Num; unsigned char temp; static unsigned int Flash_Time; Num++; if(Num>=8) Num=0; LED_DATA=0x00; //P0口全部为零 if(Num==0) { L3=1;L2=1;L1=1; //第八个数码管亮
}
else if(Num==1) { L3=1;L2=1;L1=0;//第七个数码管亮 } else if(Num==2) { L3=1;L2=0;L1=1;//第六个数码管亮 } else if(Num==3) { L3=1;L2=0;L1=0;//第五个数码管亮 } else if(Num==4) { L3=0;L2=1;L1=1;//第四个数码管亮 } else if(Num==5) { L3=0;L2=1;L1=0;//第二个数码管亮 } else if(Num==6) { L3=0;L2=0;L1=1;//第一个数码管亮 } else if(Num==7) { L3=0;L2=0;L1=0;//第零个数码亮 }
Flash_Time++; LED_ON=0xff; //*****PCF8563接口定义****
sbit PCF8563CLK=P1^0;
sbit PCF8563SDA=P1^1;// 24c02接口定义
sbit E2PCLK=P1^5;
sbit E2PSDA=P1^6;//蜂鸣器接口定义
sbit BEEP = P1^2
主程序
if(Flash_Time<200) { LED_ON=~Flash_Number; }
else if(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; }
void Test_Ring() //这个函数有什么作用? { unsigned char i,temp_m,temp_h;
temp_m=(F8563RWBuff[2]>>4)*10+(F8563RWBuff[2]&0x0f); //分
temp_h=(F8563RWBuff[3]>>4)*10+(F8563RWBuff[3]&0x0f); //时 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; } else Ringing=0; }
}//定时器0 2.5ms中断 void Timer0()interrupt 1 { static unsigned char key_Down_Time; TH0=(65535-2500)/256; TL0=(65535-2500)%256;
Fresh_Display(); //动态扫描数码管 if(K_D==0) //扫描按键 { key_Down_Time++; if(key_Down_Time>3) { Key_Value=K_Port>>5; 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;//开闹铃 } else { BEEP=1;//关闹铃 } if(Ringing==1) { Ringing=0;
Ringing_Time=12000; } }
void Adjust_Time() { unsigned char position=1;//position有什么作用? Adjust_Buffer[0]=(F8563RWBuff[1]>>4)*10+(F8563RWBuff[1]&0x0f) ;//秒 Adjust_Buffer[1]=(F8563RWBuff[2]>>4)*10+(F8563RWBuff[2]&0x0f); //分; Adjust_Buffer[2]=(F8563RWBuff[3]>>4)*10+(F8563RWBuff[3]&0x0f); { if(position==1) { Flash_Number=0x03; } else if(position==2) { Flash_Number=0x18; } else if(position==3) { Flash_Number=0xC0; } if(Key_Flag==1) { Key_Flag=0; if(Key_Value==2 { if(position<3) position++; } else if(Key_Value==1)//1号键被按下 { if(position>0) position--; } else if(Key_Value==3)//++ { if(position==1)
{
if(Adjust_Buffer[0]<60)
Adjust_Buffer[0]++; else
Adjust_Buffer[0]=30;
}
else if(position==2) {
if(Adjust_Buffer[1]<60)
Adjust_Buffer[1]++; else
Adjust_Buffer[1]=30; } else if(position==3) {
if(Adjust_Buffer[2]<24)
Adjust_Buffer[2]++; else
Adjust_Buffer[2]=12; }
}
else if(Key_Value==4) //-- { if(position==1) {
if(Adjust_Buffer[0]>0) Adjust_Buffer[0]--; else
Adjust_Buffer[0]=30; } else if(position==2) {
if(Adjust_Buffer[1]>0) Adjust_Buffer[1]--; else
Adjust_Buffer[1]=30; } else if(position==3) {
if(Adjust_Buffer[2]>0) Adjust_Buffer[2]--; else
Adjust_Buffer[2]=12;
}
}
else if(Key_Value==0) // { F8563RWBuff[1]=(Dis_Buffer[1]<<4)+Dis_Buffer[0]; //秒 F8563RWBuff[2]=(Dis_Buffer[4]<<4)+Dis_Buffer[3]; //分 F8563RWBuff[3]=(Dis_Buffer[7]<<4)+Dis_Buffer[6]; //时 SetTimeto8563(); break; }
}
Dis_Buffer[0]=Adjust_Buffer[0]%1
0; //秒 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; } } void Adjust_Month() { unsigned char position=1;
Adjust_Buffer[0]=(F8563RWBuff[4]>>4)*10+(F8563RWBuff[4]&0x0f);//秒 Adjust_Buffer[1]=(F8563RWBuff[5]>>4)*10+(F8563RWBuff[5]&0x0f); //分; Adjust_Buffer[2]=(F8563RWBuff[6]>>4)*10+(F8563RWBuff[6]&0x0f); //时
while(1) { if(position==1) { Flash_Number=0x03; } else if(position==2) { Flash_Number=0x18; } else if(position==3) { Flash_Number=0xC0; } if(Key_Flag==1) { Key_Flag=0;
if(Key_Value==2)
{ if(position<3) position++; } else if(Key_Value==1) { if(position>0) posit …… 此处隐藏:20414字,全部文档内容请下载后查看。喜欢就下载吧 ……