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

📄 1602菜单实验.c

📁 自己设计的5路定时器!用于公司。内附电路图(DXP)
💻 C
📖 第 1 页 / 共 2 页
字号:
							   else timerbit[4][0]++;}
							 else  timerbit[4][1]++;
							logtimer[4][1]=timerbit[4][1];
							logtimer[4][0]=timerbit[4][0];
							add_dec5=0;}
							key=0;
						    break;

	     	case	14:	   if(!start5)
							{if(timerbit[4][3]==9)		//五组,秒加	                 
						     {timerbit[4][3]=0;
						       if(timerbit[4][2]==5)
							   timerbit[4][2]=0;
							   else timerbit[4][2]++;}
							 else  timerbit[4][3]++;
							logtimer[4][2]=timerbit[4][2];
							logtimer[4][3]=timerbit[4][3];
							add_dec5=0;}
							key=0;
						    break;

			case	15:	   	if(stop5==0)
							{display[5][2]=~display[5][2];//五组,开始/暂停
							 if(display[5][2])
							  display1[5][0]+=0x10;
							 else 
							  display1[5][0]-=0x10;							
							 start5=~start5;							
							 DDRB=0XF8;       
 							 PORTB=0X07; 
							 while(PINB!=0x07)       //如果有1脚为0即有按键动作
							  {display1_out();}
							 v_Get1302(buffer3);
							 if((timerbit[4][0]+timerbit[4][1]+timerbit[4][2]+timerbit[4][3])==0)
							  add_dec5=~add_dec5;							
							 start5_5=data[BcdToBin(buffer3[0]&0x0f)];}
							else {buzzer=0;
								  display[5][2]=~display[5][2];
								  if(display[5][2])
								  display1[5][0]+=0x10;
								  else 
								  display1[5][0]-=0x10;
								  stop5=~stop5;
								  timerbit[4][0]=logtimer[4][0];
								  timerbit[4][1]=logtimer[4][1];
								  timerbit[4][2]=logtimer[4][2];
								  timerbit[4][3]=logtimer[4][3];

								  DDRB=0XF8;       
 								  PORTB=0X07; 
							      while(PINB!=0x07)       //如果有1脚为0即有按键动作
								   {display1_out();}								  
							 }
								  key=0;break;


			case	16:		if(!start1){timerbit[0][0]=timerbit[0][1]=timerbit[0][2]=timerbit[0][3]=0;
								logtimer[0][1]=timerbit[0][1];
								logtimer[0][2]=timerbit[0][2];
								logtimer[0][3]=timerbit[0][3];
								logtimer[0][4]=timerbit[0][4];}

								break;

			case	17:		if(!start2){timerbit[1][0]=timerbit[1][1]=timerbit[1][2]=timerbit[1][3]=0;
								logtimer[1][1]=timerbit[1][1];
								logtimer[1][2]=timerbit[1][2];
								logtimer[1][3]=timerbit[1][3];
								logtimer[1][4]=timerbit[1][4];}
								break;

			case	18:		if(!start3){timerbit[2][0]=timerbit[2][1]=timerbit[2][2]=timerbit[2][3]=0;
								logtimer[2][1]=timerbit[2][1];
								logtimer[2][2]=timerbit[2][2];
								logtimer[2][3]=timerbit[2][3];
								logtimer[2][4]=timerbit[2][4];}
								break;

			case	19:		if(!start4){timerbit[3][0]=timerbit[3][1]=timerbit[3][2]=timerbit[3][3]=0;
								logtimer[3][1]=timerbit[3][1];
								logtimer[3][2]=timerbit[3][2];
								logtimer[3][3]=timerbit[3][3];
								logtimer[3][4]=timerbit[3][4];}
								break;

			case	20:		if(!start5){timerbit[4][0]=timerbit[4][1]=timerbit[4][2]=timerbit[4][3]=0;
								logtimer[4][1]=timerbit[4][1];
								logtimer[4][2]=timerbit[4][2];
								logtimer[4][3]=timerbit[4][3];
								logtimer[4][4]=timerbit[4][4];}
								break;

		     default:
	       break;
       }
							
  }
/******************************************************************** */
//595驱动
/******************************************************************** */ 	
void wr595(unsigned char DAT)
	{unsigned char k,i;
	for(k=8;k>0;k--)
	{i=k-1;
	 SDI=DAT>>i;
	 SCR=1;
	 asm ("NOP");
	 asm ("NOP");
	 SCR=0; }
	}
void out595(void)
	{LCR=0;
	asm ("NOP");
	asm ("NOP");
	LCR=1;
	asm ("NOP");
	asm ("NOP");
	LCR=0;}
/******************************************************************** */
//LED时钟显示驱动
/******************************************************************** */
void display_out(void)
	{unsigned char a,s;
	 //

	 wr595(display[5][0]);
     for(a=s=5;a>0;a--)	  
	   wr595(display[--s][0]);	   
	   out595();
	   SETBIT(PORT_595,LED1);
	   delay_nus(5000);
      CLRBIT(PORT_595,LED1);
	  //
	  wr595(display[5][0]);
     for(a=s=5;a>0;a--)	  
	   wr595(display[--s][1]);	   
	   out595();
	   SETBIT(PORT_595,LED2);
	   delay_nus(5000);       
	  CLRBIT(PORT_595,LED2);
	  //
	  wr595(display[5][0]);
	  for(a=s=5;a>0;a--)	  
	   wr595(display[--s][2]);	   
	   out595();
	   SETBIT(PORT_595,LED3);
	   delay_nus(5000);
	  CLRBIT(PORT_595,LED3);
	  //
	  wr595(display[5][0]);
	  for(a=s=5;a>0;a--)	  
	   wr595(display[--s][3]);	   
	   out595();
	   SETBIT(PORT_595,LED4);
	   delay_nus(5000);
	  CLRBIT(PORT_595,LED4);
	  	}
/******************************************************************** */
//LED定时器显示驱动
/******************************************************************** */
void display1_out(void)
	{unsigned char a,s;
	 //
	 wr595(display1[5][0]);
     for(a=s=5;a>0;a--)	 	  
	   wr595(display1[--s][0]);	   
	   out595();
	   SETBIT(PORT_595,LED1);
	   delay_nus(5000);
      CLRBIT(PORT_595,LED1);
	  //
	  wr595(display1[5][0]);
     for(a=s=5;a>0;a--)	 	  
	   wr595(display1[--s][1]);	   
	   out595();
	   SETBIT(PORT_595,LED2);
	   delay_nus(5000);       
	  CLRBIT(PORT_595,LED2);
	  //
	  wr595(display1[5][0]);
	  for(a=s=5;a>0;a--)
	   wr595(display1[--s][2]);	   
	   out595();
	   SETBIT(PORT_595,LED3);
	   delay_nus(5000);
	  CLRBIT(PORT_595,LED3);
	  //
	  wr595(display1[5][0]);
	  for(a=s=5;a>0;a--)	 
	   wr595(display1[--s][3]);	   	   
	   out595();
	   SETBIT(PORT_595,LED4);
	   delay_nus(5000);
	  CLRBIT(PORT_595,LED4);


	  	}
/******************************************************************** */
//LED日期显示数据输入
/******************************************************************** */
void displayinput(char*P)
{       display[0][0]=0x5B;
        display[0][1]=0X3F;
		display[0][2]=data[BcdToBin(buffer3[6]>>4)];
		display[0][3]=data[BcdToBin(buffer3[6]&0x0f)];
		display[1][0]=data[BcdToBin(buffer3[4]>>4)];
		display[1][1]=data[BcdToBin(buffer3[4]&0x0f)];
		display[1][2]=data[BcdToBin(buffer3[3]>>4)]+0x80;
		display[1][3]=data[BcdToBin(buffer3[3]&0x0f)];

     	display[2][0]=data[BcdToBin(buffer3[2]>>4)];
		display[2][1]=data[BcdToBin(buffer3[2]&0x0f)];
		display[2][2]=data[BcdToBin(buffer3[1]>>4)]+0x80;
		display[2][3]=data[BcdToBin(buffer3[1]&0x0f)];
		display[3][0]=data[BcdToBin(buffer3[0]>>4)]+0x80;
		display[3][1]=data[BcdToBin(buffer3[0]&0x0f)];
		}
/******************************************************************** */
//LED定时显示数据输入
/******************************************************************** */

void displayinput1(void)
{if(!((display1[5][1]==0)^(start1==0)))
 {display1[0][0]=data[timerbit[0][0]];
 display1[0][1]=data[timerbit[0][1]];
 display1[0][2]=data[timerbit[0][2]]+0x80;
 display1[0][3]=data[timerbit[0][3]];}
 else {if(start1_1!=startdata){display1[0][0]=0x00;
 display1[0][1]=0x00;
 display1[0][2]=0x00;
 display1[0][3]=0x00;}}

 display1[1][0]=data[timerbit[1][0]];
 display1[1][1]=data[timerbit[1][1]];
 display1[1][2]=data[timerbit[1][2]]+0x80;
 display1[1][3]=data[timerbit[1][3]];

 display1[2][0]=data[timerbit[2][0]];
 display1[2][1]=data[timerbit[2][1]];
 display1[2][2]=data[timerbit[2][2]]+0x80;
 display1[2][3]=data[timerbit[2][3]];

 display1[3][0]=data[timerbit[3][0]];
 display1[3][1]=data[timerbit[3][1]];
 display1[3][2]=data[timerbit[3][2]]+0x80;
 display1[3][3]=data[timerbit[3][3]];

 display1[4][0]=data[timerbit[4][0]];
 display1[4][1]=data[timerbit[4][1]];
 display1[4][2]=data[timerbit[4][2]]+0x80;
 display1[4][3]=data[timerbit[4][3]];
}


/******************************************************************** */
//计时
/******************************************************************** */
void start_time(void)
	{if(start1)
 	 {if(start1_1!=startdata)
	 	{start1_1=data[BcdToBin(buffer3[0]&0x0f)];
		if(add_dec1!=0)
		 {if(timerbit[0][3]==9)
		   {timerbit[0][3]=0;
		    if(timerbit[0][2]==5)
		      {timerbit[0][2]=0;
			   if(timerbit[0][1]==9)
			     {timerbit[0][1]=0;
				  if(timerbit[0][0]==9)
				    timerbit[0][0]=0;
			        timerbit[0][0]++;}
			   else timerbit[0][1]++;}
			else timerbit[0][2]++;}	
		  else timerbit[0][3]++; }
		else {if((timerbit[0][0]+timerbit[0][1]+timerbit[0][2]+timerbit[0][3])!=0)
			   {if(timerbit[0][3]==0)
		        {timerbit[0][3]=9;
		         if(timerbit[0][2]==0)
		          {timerbit[0][2]=5;
		  	       if(timerbit[0][1]==0)
			        {timerbit[0][1]=9;
				     if(timerbit[0][0]==0)
				    ;
			        else timerbit[0][0]--;}
			   else timerbit[0][1]--;}
			else timerbit[0][2]--;}	
		  else timerbit[0][3]--;}
		  
		 else{	buzzer=1;
			start1=~start1;
			stop1=~stop1;}
			}}
		  }
	if(start2)
 	 {if(start2_2!=startdata)
	 	{start2_2=data[BcdToBin(buffer3[0]&0x0f)];
		if(add_dec2!=0)
		 {if(timerbit[1][3]==9)
		   {timerbit[1][3]=0;
		    if(timerbit[1][2]==5)
		      {timerbit[1][2]=0;
			   if(timerbit[1][1]==9)
			     {timerbit[1][1]=0;
				  if(timerbit[1][0]==9)
				    timerbit[1][0]=0;
			        timerbit[1][0]++;}
			   else timerbit[1][1]++;}
			else timerbit[1][2]++;}	
		  else timerbit[1][3]++; }
		else {if((timerbit[1][0]+timerbit[1][1]+timerbit[1][2]+timerbit[1][3])!=0)
			   {if(timerbit[1][3]==0)
		        {timerbit[1][3]=9;
		         if(timerbit[1][2]==0)
		          {timerbit[0][1]=5;
		  	       if(timerbit[1][1]==0)
			        {timerbit[1][1]=9;
				     if(timerbit[1][0]==0)
				    ;
			        else timerbit[1][0]--;}
			   else timerbit[1][1]--;}
			else timerbit[1][2]--;}	
		  else timerbit[1][3]--;}
		  
		 else{	buzzer=1;
			start2=~start2;
			stop2=~stop2;}
			}}
		  }
	if(start3)
 	 {if(start3_3!=startdata)
	 	{start3_3=data[BcdToBin(buffer3[0]&0x0f)];
		if(add_dec3!=0)
		 {if(timerbit[2][3]==9)
		   {timerbit[2][3]=0;
		    if(timerbit[2][2]==5)
		      {timerbit[2][2]=0;
			   if(timerbit[2][1]==9)
			     {timerbit[2][1]=0;
				  if(timerbit[2][0]==9)
				    timerbit[2][0]=0;
			        timerbit[2][0]++;}
			   else timerbit[2][1]++;}
			else timerbit[2][2]++;}	
		  else timerbit[2][3]++; }
		else {if((timerbit[2][0]+timerbit[2][1]+timerbit[2][2]+timerbit[2][3])!=0)
			   {if(timerbit[2][3]==0)
		        {timerbit[2][3]=9;
		         if(timerbit[2][2]==0)
		          {timerbit[2][2]=5;
		  	       if(timerbit[2][1]==0)
			        {timerbit[2][1]=9;
				     if(timerbit[2][0]==0)
				    ;
			        else timerbit[2][0]--;}
			   else timerbit[2][1]--;}
			else timerbit[2][2]--;}	
		  else timerbit[2][3]--;}
		  
		 else{	buzzer=1;
			start3=~start3;
			stop3=~stop3;}
			}}
		  }
	if(start4)
 	 {if(start4_4!=startdata)
	 	{start4_4=data[BcdToBin(buffer3[0]&0x0f)];
		if(add_dec4!=0)
		 {if(timerbit[3][3]==9)
		   {timerbit[3][3]=0;
		    if(timerbit[3][2]==5)
		      {timerbit[3][2]=0;
			   if(timerbit[3][1]==9)
			     {timerbit[3][1]=0;
				  if(timerbit[3][0]==9)
				    timerbit[3][0]=0;
			        timerbit[3][0]++;}
			   else timerbit[3][1]++;}
			else timerbit[3][2]++;}	
		  else timerbit[3][3]++; }
		else {if((timerbit[3][0]+timerbit[3][1]+timerbit[3][2]+timerbit[3][3])!=0)
			   {if(timerbit[3][3]==0)
		        {timerbit[3][3]=9;
		         if(timerbit[3][2]==0)
		          {timerbit[3][2]=5;
		  	       if(timerbit[3][1]==0)
			        {timerbit[3][1]=9;
				     if(timerbit[3][0]==0)
				    ;
			        else timerbit[3][0]--;}
			   else timerbit[3][1]--;}
			else timerbit[3][2]--;}	
		  else timerbit[3][3]--;}
		  
		 else{	buzzer=1;
			start4=~start4;
			stop4=~stop4;}
			}}
		  }
	if(start5)
 	 {if(start5_5!=startdata)
	 	{start5_5=data[BcdToBin(buffer3[0]&0x0f)];
		if(add_dec5!=0)
		 {if(timerbit[4][3]==9)
		   {timerbit[4][3]=0;
		    if(timerbit[4][2]==5)
		      {timerbit[4][2]=0;
			   if(timerbit[4][1]==9)
			     {timerbit[4][1]=0;
				  if(timerbit[4][0]==9)
				    timerbit[4][0]=0;
			        timerbit[4][0]++;}
			   else timerbit[4][1]++;}
			else timerbit[4][2]++;}	
		  else timerbit[4][3]++; }
		else {if((timerbit[4][0]+timerbit[4][1]+timerbit[4][2]+timerbit[4][3])!=0)
			   {if(timerbit[4][3]==0)
		        {timerbit[4][3]=9;
		         if(timerbit[4][2]==0)
		          {timerbit[4][2]=5;
		  	       if(timerbit[4][1]==0)
			        {timerbit[4][1]=9;
				     if(timerbit[4][0]==0)
				    ;
			        else timerbit[4][0]--;}
			   else timerbit[4][1]--;}
			else timerbit[4][2]--;}	
		  else timerbit[4][3]--;}
		  
		 else{	buzzer=1;
			start5=~start5;
			stop5=~stop5;}
			}}
		  }

	

		
	}
/***********************************************************************************************
计时减
***************************************************************************************************/
void start_timedec(void)
{if(start1)
 	 {if(start1_1!=startdata)
	 	{start1_1=data[BcdToBin(buffer3[0]&0x0f)];
		if(timerbit[0][3]==0)
		   {timerbit[0][3]=9;
		    if(timerbit[0][2]==0)
		      {timerbit[0][2]=5;
			   if(timerbit[0][1]==0)
			     {timerbit[0][1]=9;
				  if(timerbit[0][0]==0)
				    timerbit[0][0]=9;
			        timerbit[0][0]--;}
			   else timerbit[0][1]--;}
			else timerbit[0][2]--;}	
		  else timerbit[0][3]--; }
		  }
}

SIGNAL(SIG_OVERFLOW0)
{if(++t>14)
{buzzer=1;t=0;
}
}
/***********************************************************************************************
主函数
***************************************************************************************************/
int main() 
{
  TCNT0=0; // T/C0 开始值  
  TCCR0=_BV(CS02)|_BV(CS00); // 预分频 ck/1024 ,计数允许 
  sei();
 DDRB=0X00;
 PORTB=0X00;
 DDRC=0X00;
 PORTC=0X00;
 DDRD=0X00;
 PORTD=0X00;
 initialize_1302();
 buzzer=0;
 buzzer_1=1;
 switch1=~switch1;
 SETBIT(DDR_595,LED2);
 SETBIT(DDR_595,LED1);
 SETBIT(DDR_595,LED3);
 SETBIT(DDR_595,LED4);
 SCR1=1;
 LCR1=1;
 SDI1=1; 
 	  
//eeprom_write_byte(&timerrom,6);
while(1)
{	   v_Get1302(buffer3);
       startdata=data[BcdToBin(buffer3[0]&0x0f)];
       SETBIT(PORTC,PC1);

	   if(!CHKBIT(PINC,PC1))
		{   switch1=~switch1;
	    	buzzer=0;
			while(!CHKBIT(PINC,PC1));
			delay_nms(10);
		}

		if(switch1)
		{ DDRB=0XF8;       
 		  PORTB=0X07; 
		  if(PINB!=0x07)       //如果有1脚为0即有按键动作        		      
	      scankey(); 		  
//      	 buzzer=0; 
	  	 key_day();	   
	   	 v_Get1302(buffer3);
         displayinput(buffer3);
	     display_out();}

		 if(!switch1)
		 {DDRB=0XF8;       
 		  PORTB=0X07; 
		  if(PINB!=0x07)       //如果有1脚为0即有按键动作        		      
	      {scankey();		  
		  key_timer();}		  
		  displayinput1();
		 display1_out();
		 
		 }
		start_time();
}

}

⌨️ 快捷键说明

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