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

📄 111.c

📁 基于AT89C51的数字钟(闹钟功能)
💻 C
字号:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit f=P3^4;
uint a,ge,shi,i,j,k=12,fg,fs,xg,xs,xingqi=1;
uchar   hour=0,  minute=0,flag=0;
void display(uint ge,uint shi,uint fg,uint fs,uint xg,uint xs);
void fm();
uchar code wm[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code dm[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit ke1=P0^4;	// 正常调时
sbit ke2=P0^5;	 //正常调分
sbit ke4=P0^7;	  //正常调星期
sbit k3=P0^6;//闹钟调时
sbit k5=P0^3; // 闹钟调分
sbit k6=P0^2;//切换闹钟模式
void delay(uint s)
{       
     uint x,y;
     for(x=s;x>0;x--)
     for(y=110;y>0;y--);
 }
void timer()interrupt 1
{
     TH0=(65536-50000)/256;
     TL0=(65536-50000)%256;
     a++;
 }
void key()
{
    P0=0xfe;
    if(ke1==0)
    {       
        k++;
        if(k==24)
           k=0;
     while(!ke1);

          }
    if(ke2==0)
    {
        j++;
        if(j==60)
           j=0;
        while(!ke2);
         }

if(ke4==0)
 {	 
     while(!ke4);
 	 xingqi++;
	 if(xingqi==8)
	 {	 
	      xingqi=1;
		  
	 }
 } 

if(k6==0)
 {	 
     while(!k6);
 	 flag=~flag;
	 
 } }
void setclock()	 //闹钟键盘扫描
{
			      
			      if(k3==0)
						{
							delay(10);			 
					         if(k3==0)       
							    { 	  
								  if(hour<23)
					                  hour++;
								  else hour=0;
								} 
							while(!k3);	 
					    }
					  
				
				 	  //模式——闹钟调分 
				   {	  
					 if(k5==0)
						{
							delay(10);					 
					        if(k5==0)       
							    { 	  
								  if(minute<59)
					                  minute++;
								  else minute=0;
								} 
						while(!k5);
						}
				
				}
 }

 void panduanmaozhong()//判断闹钟时间是否到来
 {
 		 if( (j==minute)&(k==hour))
		 {
		     P3=0x00;
		 }

                  
 }


void main()
{
     TMOD=1;
     TH0=(65536-50000)/256;
     TL0=(65536-50000)%256;
     EA=1;
     ET0=1;
     TR0=1;
     P3=0x01;

     while(1)
     {

     if(a>=20)
    {
        a=0;
        i++;
        if(i==60)//秒
        {       
          j++;
          i=0;
          if(j==60)		   //分
          {
             k++;
             j=0;
             if(k==24)	  //时
             {
			   xingqi++	 ;
		       k=0;
			   if(xingqi>7)	   //星期
			   {
			        xingqi=1;
			   }                                                                  
     }
     }       
  }
 }
                  
               ge=i%10;
               shi=i/10;
               fg=j%10;
               fs=j/10;
               xg=k%10;
               xs=k/10;

			   if(flag==0)
                    display(ge,shi,fg,fs,xg,xs);
			   else 
			   	    display(ge,shi,(minute%10),(minute/10),(hour%10),(hour/10));
			   
				if(fg==9&&fs==5&&shi==5&&(ge==1||ge==3||ge==5||ge==7||ge==9))
                   P3=0x00;
                   else P3=0x01;
                   key();
				   setclock(); 	 //闹钟键盘扫描
                panduanmaozhong();//判断闹钟时间是否到来
				   
				  
    
      }
 }

void display(uint ge,uint shi,uint fg,uint fs,uint xg,uint xs)
{
 	   P1=wm[0];
       P2=dm[xingqi];
       delay(1);

       P1=wm[2];
       P2=dm[xs];
       delay(1);

       P1=wm[3];
       P2=dm[xg];
       delay(1);

       P1=wm[4];
       P2=dm[fs];
       delay(1);

       P1=wm[5];
	   P2=dm[fg];
       delay(1);

       P1=wm[6];
       P2=dm[shi];
       delay(1);

       P1=wm[7];
       P2=dm[ge];
       delay(1);
                           
}

⌨️ 快捷键说明

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