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

📄 clock.c

📁 KEIL编写用PROTEUS仿真的电子闹铃
💻 C
字号:
#include<reg51.h>
#define uchar unsigned char 
int j,k,i,a,h,m,A1,A2,A3,A4,A5,A6,second,min,hour;
sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
sbit key3=P1^3;
sbit key4=P1^4;
sbit P2_7=P2^7;
bit L=0;//长溢出标志位
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
                        0x80,0x90,0X88,0XC6,0XC7,0XFF};//编码0~9,A,C,L,全黑
int code select[]={0x01,0x02,0x04,0x08,0x10,0x20};//位选通
int time[3];
int alarm1,alarm2;
int con=0;con1=0;



void delay(int i)//延时
{ for(j=i;j>0;j--)
   for(k=125;k>0;k--);
}


 void t0(void) interrupt 1//1S延时
{ static int t;
  TF0=0;
  t++;
  if(t==15)
   {t=0;L=1;
   }
}


void display(uchar sh_c,uchar g_c,uchar sh_b,uchar g_b,uchar sh_a,uchar g_a)//显示部分
{  P0=table[sh_c];
   P3=select[0];
   delay(5);
   P3=0;
  
   P0=table[g_c];
   P3=select[1]; 
   delay(5);
   P3=0;
     
   P0=table[sh_b];
   P3=select[2];
   delay(5);
   P3=0;

   P0=table[g_b];
   P3=select[3];
   delay(5);
   P3=0;
   
   P0=table[sh_a];
   P3=select[4];
   delay(5);
   P3=0;

   P0=table[g_a];
   P3=select[5];
   delay(5);
   P3=0;
}


void timing (void)//数字调整
{ EA=0;
   if(!key1)
    {delay(10);
     while(!key1);
     con1++;TR0=0;ET0=0;     
    }
    if(con1>=2)
     con1=0;TR0=1;ET0=1;
    if(con1==0)  //分钟调整
	   { if(!key2)
		   {delay(10);
	       while(!key2);
	           { m++;
			  	    if(m>=60) m=0;
				  } 
			 }
			if(!key3)
		   {delay(10);
	       while(!key3);
	           { m--;
			  	    if(m<0) m=59;
				  } 
			 }	
		   A3=m/10;A4=m%10; //闪动
		   delay(10);
		   A3=13;A4=13;
		   display(A1,A2,A3,A4,A5,A6);
		   delay(10);
		   A3=m/10;A4=m%10;
		}
	  if(con1==1)  //小时调整
	   { if(!key2)
		   {delay(10);
	       while(!key2);
	           { h++;
			  	    if(h>=24) h=0;
				  } 
			 }
			if(!key3)
		   {delay(10);
	       while(!key3);
	           { h--;
			  	    if(h<0) h=23;
				  } 
			 }
		   A5=h/10;A6=h%10; //闪动
		   delay(10);
		   A5=13;A6=13;
		   display(A1,A2,A3,A4,A5,A6);
		   delay(10);
		   A5=h/10;A6=h%10;
		}
  EA=1;
}      


void function(void)//功能设置
{ if(!key0)
   { delay(10);
     while(!key0);
     con++;
	  if(con>=3) con=0;
	 }
   if(con==0)  
	 { A1=time[0]/10;
      A2=time[0]%10;
      A3=time[1]/10;
      A4=time[1]%10;
	   A5=time[2]/10;
	   A6=time[2]%10;
	  }			 	     
	 if(con==1)//设置时间
	  { m=time[1];h=time[2];
	    timing ();
	    time[1]=m;time[2]=h;
	    A1=11;
       A2=12;
		 A3=time[1]/10;
       A4=time[1]%10;
	    A5=time[2]/10;
	    A6=time[2]%10;
	  }
	 if(con==2)//设置闹钟
	  { m=alarm1;h=alarm2;
	    timing ();
	    alarm1=m;alarm2=h;
	    A1=10;
	    A2=12;
		 A3=alarm1/10;
       A4=alarm1%10;
	    A5=alarm2/10;
	    A6=alarm2%10;
	  } 
}

void alarm(void)//闹钟开关
{  if(key4==0)
	 {if(time[1]==alarm1 && time[2]==alarm2)
		{ P2_7=0;
		  delay(10);
		  display(A1,A2,A3,A4,A5,A6);//消除LED闪动
		  P2_7=1;
		  delay(10);
		  display(A1,A2,A3,A4,A5,A6);//消除LED闪动
       } 
      else P2_7=1;
     }
	 else P2_7=1;
}

void main()
  { TMOD=0x01;TH0=0x01;TL0=0x6b;
    TR0=1;ET0=1;EA=1;
    while(1)
       { if(L)
          { L=0;time[0]++;
            if(time[0]==60)
             { time[0]=0;time[1]++;}
            if(time[1]==60)
             { time[1]=0;time[2]++;}
			   if(time[2]==24) time[2]=0;
          }
          function();
			 alarm();
          display(A1,A2,A3,A4,A5,A6);
		}
   }  

⌨️ 快捷键说明

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