⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time.c

📁 利用89S52做的数字时钟
💻 C
字号:
#include"delay.h"
#include"PIO.h"
#include"led.h"
#include"key.h"
int n=0;
char time[4]={0,0,0,0};
unsigned int date[3]={1,5,2007};
uchar month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
uchar day=1,work=1,datework=0,daywork=0;
void main()
{
    unsigned int i=0;
    PT2=1;//定时器2设为高优先级
	IT0=1;//外部中断设为负跳变触发方式
	EX0=1;//开启外部中断
	RCAP2H=0x3c;//初始化定时器2	
	RCAP2L=0xb0;
	TH2=0x3c;
	TL2=0xb0;
	TR2=1;//启动定时器2
	ET2=1;//开启定时器2
	EA=1;
	while(1)
	{
        for(date[1]=1;date[1]<=12;date[1]++)//每12个月进1
        {
            for(date[0]=1;date[0]<=month[date[1]-1];date[0]++)//足一个月的天数进1
            {
        		for(time[2]=0;time[2]<24;time[2]++)//每24小时进1
        		{
        			for(time[1]=0;time[1]<60;time[1]++)//每60分进1
        			{
        				for(time[0]=0;time[0]<60;)//每60秒进1
        				{
                            num2(2,time[2]);//显示时间
                            dot(4);
                            num2(3,time[1]);
                            dot(6);
        					num2(4,time[0]);
                            keyread();//键盘扫描
                            if(KEY==1&&P2==0xff)//若按下1号键,则显示日期
                            {
                                datework=1;//日期显示标记
                                KEY=0;
                                for(i=0;i<150;i++)
                                {
                                    num4(1,date[2]);//显示日期
                                    dot(4);
                                    num2(3,date[1]);
                                    dot(6);
                                    num2(4,date[0]);
                                    keyread();//键盘扫描
                                    if(KEY==1&&P2==0xff)
									{
										daywork=1;//星期显示标记
										KEY=0;
										for(i=0;i<100;i++)
										{
											w_p(8,day);//显示星期
											delay(10);//使显示稳定
											keyread();//键盘扫描
											if(KEY==1&&P2==0xff)break;//若按下1键,则跳出星期显示循环,回到时间显示循环境保护
											if(KEY==13&&P2==0xff){p32=0;p32=1;KEY=1;}
										}										
										daywork=0;//清除星期显示标记
									}
									if(KEY==1)break;
									if(KEY==13&&P2==0xff){p32=0;p32=1;}
                                }
                                KEY=0;
                                datework=0;//清除日期显示标记
                            }
                            if
                            (KEY==13&&P2==0xff){p32=0;p32=1;}
        				}
                        time[0]=0;
        			}
        		}
				day++;
				if(day==8)day=1;
            }
        }
        date[2]++;
        if((date[2]%4==0&&date[2]%100!=0)||date[2]%400==0)
        month[1]=29;//如果是闰年,则2月变为29日,否则是28日
        else
        month[1]=28;
	}	
}

//计时函数每秒使time[0]加1
timer0() interrupt 5
{
	static uchar t;
	TF2=0;
	t++;
	if(t==20)
	{
		t=0;
		time[0]++;
	}
}

//时间设定函数
set_time() interrupt 0  
{       
        KEY=0;
		if(daywork)//修改星期
		while(1)
		{	
			w_p(8,day);
			delay(10);
			keyread();
			if(KEY==16&&P2==0xff){KEY=0;break;}
            if(KEY==14&&P2==0xff){KEY=0;day++;if(day==8)day=1;}
            if(KEY==15&&P2==0xff){KEY=0;day--;if(day==0)day=7;}
		}
        if(!datework)//修改时间
        while(1)
        {
            while(1)
            {
                delay(10);
                work=0;
				if(time[0]==60){time[0]=0;time[1]++;}
                num2(4,time[0]);
                keyread();
                if(KEY==16&&P2==0xff){KEY=0;break;}
                if(KEY==13&&P2==0xff){KEY=0;work=1;}
                if(KEY==14&&P2==0xff){KEY=0;time[0]++;if(time[0]==60)time[0]=0;}
                if(KEY==15&&P2==0xff){KEY=0;time[0]--;if(time[0]<0)time[0]=59;}
				if(work)break;
             }

            if(work)
            while(1)
            {
                delay(10);
                work=0;
                num2(3,time[1]);
                keyread();
                if(KEY==16&&P2==0xff){KEY=0;break;}
                if(KEY==13&&P2==0xff){KEY=0;work=1;}
                if(KEY==14&&P2==0xff){KEY=0;time[1]++;if(time[1]==60)time[1]=0;}
				if(KEY==15&&P2==0xff){KEY=0;time[1]--;if(time[1]<0)time[1]=59;}
                if(work)break;
             }
            
            if(work)
            while(1)
            {
                work=0;
                delay(10);
                num2(2,time[2]);
                keyread();
                if(KEY==16){KEY=0;break;}
                if(KEY==13&&P2==0xff){KEY=0;work=1;break;}
                if(KEY==14&&P2==0xff){KEY=0;time[2]++;if(time[2]==24)time[2]=0;}
                if(KEY==15&&P2==0xff){KEY=0;time[2]--;if(time[2]<0)time[2]=23;}
                if(work)break;
            }
            if(work==0)break;
	    }

        else if(!daywork)     //修改日期
        while(1)
        {
            while(1)
            {
                delay(10);
                work=0;
                num2(4,date[0]);
                keyread(); 
                if(KEY==16&&P2==0xff){KEY=0;break;}
                if(KEY==13&&P2==0xff){KEY=0;work=1;}
                if(KEY==14&&P2==0xff){KEY=0;date[0]++;if(date[0]==32)date[0]=0;}
                if(KEY==15&&P2==0xff){KEY=0;date[0]--;if(date[0]==0)date[0]=31;}
                if(work)break;
             }

            if(work)
            while(1)
            {
                delay(10);
                work=0;
                num2(3,date[1]);
                keyread(); 
                if(KEY==16&&P2==0xff){KEY=0;break;}
                if(KEY==13&&P2==0xff){KEY=0;work=1;}
                if(KEY==14&&P2==0xff){KEY=0;date[1]++;if(date[1]==13)date[1]=0;}
                if(KEY==15&&P2==0xff){KEY=0;date[1]--;if(date[1]==0)date[1]=12;}
                if(work)break;
             }
            
            if(work)
            while(1)
            {
                work=0;
                delay(10);
                num4(1,date[2]);
                keyread();
                if(KEY==16){KEY=0;break;}
                if(KEY==13&&P2==0xff){KEY=0;work=1;break;}
                if(KEY==14&&P2==0xff){KEY=0;date[2]++;}
                if(KEY==15&&P2==0xff){KEY=0;date[2]--;if(date[2]<0)date[2]=2007;}
                if((date[2]%4==0&&date[2]%100!=0)||date[2]%400==0)
                    month[1]=29;//如果是闰年,则2月变为29日,否则是28日
                else
                    month[1]=28;
                if(work)break;
            }
            if(work==0)break;
	    }

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -