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

📄 1.0.c

📁 最简单的时钟程序
💻 C
字号:
#include <at89x051.h>


unsigned  char sec100,sec,sec5,min,hour,flag1,command,temp,opto,number,tempp3value;
/* above must be defined as register for tiny model */
unsigned char i,digit,buffer[4],onHour1,onMin1,offHour1,offMin1;
char cputick,key,delay,count1;
char convert[10] = {0x3F,0x0c,0x76,0x5e,0x4d,0x5b,0x7b,0x0e,0x7f,0x5f};//定义数码管上0-9显示的数据,1-灯亮,0-灯灭,


void pause(int) 
void scanLED();
void manualOnOff();
void savetimeOnOff1(); 
void addnumber();
void subnumber();
void showOnce();
void savenumber();


void numberToBuffer();
void offmsd();
void keyexe();
void keydelay();
void comparenumber();
void compareua0();
void compareua1();




void main()
{
  EA = 0;   //EA=0时禁止所有中断

  //----------------------------
  //以上为at89x051.h的初始值
  //---------------------------
  opto = 0xff;
  ua=0xff
  value=0xff
  hour = 0;
  min = 0;
  sec = 0;
  key = -1;
  flag1 = 0;
  number=180
  buffer[0] = 0x40;
  buffer[1] = 0x40;
  buffer[2] = 0x40;

 // serinit(9600);     /* must be invoked for tiny model */

  while(1)
  {

    scanLED();

/*------------- the following tasks execute every 10ms ------*/

    numberToBuffer();
    offmsd();
    keyexe();
    keydelay();
    comparetime();

/*-----------------------------------------------------------*/
   }
}

/* ****************** change constant below for other X-tal ********/
void time ()
/* update real-time clock  */
{
   sec100++;
   if (sec100 >= 100)       /* 100 * 10 ms = 1 s */
   {sec100 = 0;
    flag1 |= 0x05;   /* set bit 0, bit 2 */
    temp = 50;
    sec++;
    if (sec >= 60)
    {sec = 0;
     flag1 |= 0x02; /* set bit 1 */
     min++;
     if (min >= 60)
     {min = 0;
     hour++;
     if (hour >= 24)
     {hour = 0;

    }
  }
 }
}
}

void scanLED() /* scan 4-digit LED and 4-key switch, if key pressed key = 0-3
else key = -1 */

{
    int i;
    digit = 0x04;
    key = -1;
    for( i = 0; i < 3; i++)  /* 3-DIGIT scanning */
    {   
    	tempp3value=p3
    	value=tempp3value&0x30
    	if((value&0x20)!=0)
    	{
    		comparenumber()
    	else
    	        {
    	        	opto=0xff
    		}
    	}
    	P3 = (~digit & opto) & ~value;  /* send complement[digit] */
        P1 = buffer[i];  /* send complement[segment] */
        pause(5);         /* delay a while */
        P1 = 0xff;        /* off LED */
        if ((P3 & 0x08) == 0) /* if key pressed P3.3 became low */
           key = i;       /* save key position to key variable */
        digit>>=1;        /* next digit */
    }
}


void numberToBuffer()
{
    buffer[0] = convert[sec%10];
    buffer[1] = convert[min%10];
    buffer[2] = convert[hour%10];
}


void keyexe()
{
    if (key != -1)
    {
        if ((flag1 & 0x80) == 0)  /* within 0.5 sec after 1st press
                                    the following execution is not allowed */
            {
                flag1 |= 0x80;  //有按钮按下时flag1的位3置0.5秒钟的1
                delay = 50;

      		switch(key){
        		case (0): /* key position 0 */
        			addnumber()	//manualOnOff();    /* service key 0 */
        			break;
        		case (1): /* key position 1 */
        			subnumber()	//savetimeOnOff1();  /* service key 1 */
        			break;
        		case (2): /* key position 2 */
        			savenumber()	//setmin(); /* service key 2 */
        			break;
                  	}
             }

    }
}

void addnumber()
{
    number++;
    if ( number== 360)
    number=0; 

}
void subnumber()
{
    number--;
    if ( number== 0)
    number=360; 

}


void savenumber()

{
    hour = number/100;
    temp1=hour%100
    min=temp1/10
    sec=temp1%10      
    buffer[0] = 0x7f;   
    buffer[1] = 0x7f;  
    buffer[2] = 0x7f;  
    showOnce();        //888
    }
}

void showOnce()
{
    int i;
    for(i=0;i<2000;i++)
    scanLED();
}
void keydelay()
{
    if ((flag1 & 0x80) !=0)
        {
            delay--;
        if(delay == 0)
            flag1 &= ~0x80; //还原flag1
        }
}

void comparenumber()
{
	
	if((value&0x20)!=0)
	{
		compareua0()
	}
	compareua1()
	pause((numbertime-tg))
        opto = 0x7f; /* clear P3.7 turning opto on   */
        }
}
void compareua0()
{
	if((p3&0x10)!=0)
	{
		compareua0
	}	
}
void compareua1()
{
	if((p3&0x10)==0)
	{
		compareua1
	}	
}
void offmsd()

{
    if (buffer[2] == 0x3f)    /* if msd = '0' then put blank unstead */
        buffer[2] = 0x00;
}


void pause(j)
int j;
{
   int i;
   for (i = 0; i < j; i++)
   ;
}

⌨️ 快捷键说明

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