电子万年历源程序

时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……

电子万年历源程序.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219