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

📄 macoh.c

📁 工控计数器ICCAVR的MAGE8程序LED数码显示+4键
💻 C
📖 第 1 页 / 共 2 页
字号:
																				break;
rst_mcall:																	  case    up:
                              											        if(fbit==2)
													                             {
							                                                     if(reset_m<2)      reset_m++;
							                                                     else                   reset_m=0;
													                             }
						                                                        break;
																                case    down:
																                goto     rst_mcall;
													                            case    left:
													                            fbit=2;
													                            break;
													                            case   set3s:
							                                                    return ;
																				case   set_left3s:
                                                                                goto   menu3;	
																				}
																} 
																break;
												                case    up:
in_mcall:												      if(fbit==2)
													             {
			                                                     if(intm_m==0)  intm_m++;
			                                                      else                intm_m=0;
			                                                     }
						                                        break;
																case    down:
																goto     in_mcall;
													            case    left:
													            fbit=2;
													            break;
													            case   set3s:
							                                    return ;
																case   set_left3s:
                                                                goto   menu3;	
												              }
													 }	
											 }
										}																	 			  
						                break;
										case   up:
										if(fbit==2)
										  {    if(cbit!=3)   {   if(p[cbit]<9) p[cbit]++;
													                  else              p[cbit]=0;  }
												else            { if(p[cbit]==0) p[cbit]=1;
														                 else             p[cbit]=0;}
										  }
										break;
										case    down:
										if(fbit==2)         
										 {   if(cbit!=3)     {   if(p[cbit]>0)   p[cbit]--;
													                  else              p[cbit]=9;  }
											 else               { if(p[cbit]==0) p[cbit]=1;
														              else              p[cbit]=0;  }
										  }
									    break;
										case    left:
										fbit=2;
										
										if(cbit<3)   {cbit++;}
										else         { cbit=0;}
										if(p[cbit]==10)     {p[cbit]=0;}
										break;
										case   set3s:
										return;
										case   set_left3s:
                                        goto   menu3;	
									    } 
							         }	
								    
							   }   
		                      else { cbit=1;
							          if(tdbit<2) tdbit++;
							          else         tdbit=0;
									  process(trdata_x[tdbit],p,1);
									  }		  
							}	
							break;
						    case    up:
							if(fbit==2)
							{     if(cbit==1)   { p[cbit]-=25;}   
							      if(p[cbit]<9)   p[cbit]++;
							      else              p[cbit]=0;
							      if(cbit==1)   { p[cbit]+=25;} }
							break;
							case    down:
							if(fbit==2)
							{      if(cbit==1)    {p[cbit]-=25;} 
							        if(p[cbit]>0)  p[cbit]--;
							        else             p[cbit]=9;
							        if(cbit==1)    {p[cbit]+=25;} }
							break;
							case    left:
							fbit=2;
							if(cbit<1)   cbit++;
							else          cbit=0;
							break;
							case   set3s:
							return ;
							case   set_left3s:
                            goto   menu3;	
					        }
					 }//----------------------------------------2-2-2-2--
		        }
			 else  {     cbit=5;
			           if(tdbit<2) tdbit++;
		               else         tdbit=0;}
			}
			break;
			case    up:
			if(fbit==2)
			{        if(p[cbit]<9) p[cbit]++;
			        else             p[cbit]=0;}
			break;
			case    down:
			if(fbit==2)
			{        if(p[cbit]>0) p[cbit]--;
			          else           p[cbit]=9;}
			break;
			case    left:
			fbit=2;
			if(cbit<5) cbit++;
			else        cbit=0;
			if(p[cbit]==10)     p[cbit]=0;
			break;
			case   set3s:
			return;
			case   set_left3s:
            goto   menu3;	
			}
	 }
	break;
	case   down_up:
    int_clr();
	break;
	case   set_left3s:
menu3:	
    if(lockda!=1234) return;
	in_m=intemp;
    while (1)
    {
	if(in_m==0) sandchar_display(in,in_10k);
	if(in_m==1) sandchar_display(in,in_2k);
	if(in_m>=2) sandchar_display(in,in_25h);
	key=display_flash(fbit,0,2);  
	switch (key)
			{
			 case   set:
			 if(fbit==2)
				{ 
				intemp=in_m;
	            EEPROMwrite(0x12,intemp);
				fbit=0;
			    }
			else  
			while(1)
			{
			if(negdata==0)sandchar_display(nega,off);
			else               sandchar_display(nega,on);
			key=display_flash(fbit,0,2);
			switch (key)
			       {
				   case   set:
				    if(fbit==2)
					{
					EEPROMwrite(0x16,negdata);
					fbit=0;
					}
					else
				    goto   menu3;
				   break;
				   case   left:
				   fbit=2;
				   break;
				   case   up:
negset:		    if(fbit==2)
                   {
                   if(negdata==0)    { negdata++;negaon_off=-100000;}
			       else                   { negdata=0;          negaon_off=0;}                       
				   }
				   break;
				   case   down:
				   goto   negset;
				   case  set_left3s:
				   return;
				   } 
			} 
			break;						                                  
			case    down:
rst_call:  if(fbit==2)
			{
			if(in_m<2)      in_m++;
			else               in_m=0;
			}
			break;
			case    up:
			goto  rst_call;
			case    left:
			fbit=2;
			break;
			case   set_left3s:
		    return ;
		   }
	}	
	break;
}  
menu_end:        return;                                                                            
}                 
//--------------------------------------------------------------------------------------------------------------------------------------------------
void   sanddata_display(long  i,  long  j, unsigned char k )
{                     // ---------------------------------------------长数据1----长数据2-----------小数点开关                 
	   unsigned char      v=0;
	   unsigned char    m=0;
	   if(k==0) m=1; v=1;
	   if(k==1) m=1; 
	   if(k==2)   v=1;
	   process(j,p,m);
	   process(i,o,v);
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------		  
void   sandcnd_display(unsigned  char  *q,  long  j, unsigned char y )
{
  process(j,p,y);
  o=q;
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
void   sandchar_display(unsigned  char  *q,  unsigned char  *w)
{
o=q;
p=w;
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------   
char   display_flash (unsigned char  ed,unsigned char  g, unsigned char  c)
{
      unsigned char  a,b,d,keydata=0;
      unsigned char   *x,*f;
	  x=p;
	  f=o;
	  b=p[g];
	  for (d=0;d<4;d++) 
		     {
			      ed=~ed;
			      switch (ed)
			      {
			       case   2:      p[g]=10;              break;
				   case   3:      p=v; o=v;             break;
				  }
				  for (a=0;a<3;a++) 
				  {
				   display();
		           if((PINB&0X0f)!=0x0f) goto  end_d;
			      }
				 p[g]=b;	
		         p=x;
                 o=f;	 
			 }				
end_d:  keydata=GetKey() ;  
                 p[g]=b;	
                 p=dhitemp;
                 o=dlotemp; 
	       
        return keydata;
}
 //------------------------------------------------------------------------------------------------------------
 void cntplay(void)
 {
 long  posstep;
 posstep= Contdata*scldata[0];
 tempcnt= posstep/scldata[1];
 if( tempcnt>=1000000)    {tempcnt=0;  Contdata=0;}
 if( tempcnt<=negaon_off)    { tempcnt=0;  Contdata=0;}
  process(tempcnt,o,1);
  process(timeset[tbit],p,0);
  display();
  }
  
//-------------------------------------------------------------------------------------------------------------
void display (void)  //--------------------------------------------------------------------------数码管显示扫描
{   
    unsigned  char  oda,pda,bda,cx,cz,bi,bitda=0x01;
	 for(bi=0;bi<3;bi++)
	{ 
	 if(kt[bi]==1){
	                    if(ticnt>=ti[bi])  {if( (ticnt-ti[bi])/10>=trdata_x[bi] )                   { PORTC&=~BIT(bi+3);  kt[bi]=3;}}	
						else                    {if( (60000+ticnt-ti[bi])/100>=trdata_x[bi] )  { PORTC&=~BIT(bi+3);  kt[bi]=3;}}
						  }	
	     if(trdata_x[bi]==0)          kt[bi]=1;				  
	}				  					
	 if( resettemp==2)            { if(kt[0]*kt[1]*kt[2]==1)             Contdata=0;}
	 for(bi=0;bi<3;bi++)
	  {
	  if(trdata_x[bi]==0)            kt[bi]=3;
      }
     if( resettemp>=1) 		      { if((kt[0]+kt[1]+kt[2])==9)               int_clr(); }		
	 PORTC&=~BIT(cp);
	 for(cz=0;cz<7;cz++)
	 {
	   oda=table[p[cz]];
	   pda=table[o[cz]]; 
	   bda=bitda; 	
	   for(cx=0;cx<24;cx++)
	   {
	   delay_nus(1);
	   PORTC&=~BIT(sh_cp);
       if(cx<8){
                if( oda&0x80)    PORTC|= BIT(ds);
                else             PORTC&=~BIT(ds);
		        oda<<=1;
				}
	   else    {
	            if(cx<16)
				  {
	              if( pda&0x80)    PORTC|= BIT(ds);
                  else             PORTC&=~BIT(ds);
		          pda<<=1;
				  }
				else
				  {
				  if( bda&0x80)    PORTC|= BIT(ds);
                  else             PORTC&=~BIT(ds);
		          bda<<=1;
				  }    
				}
	   PORTC|= BIT(sh_cp);
       }
	   delay_nus(1);   
	   PORTC|=BIT(cp);
	   delay_nus(1);
	   PORTC&=~BIT(cp);
	   bitda<<=1;
	   delay_nus(500);
	 } 
	 WDR();
}
//----------------------------------------------------------------------------------------------------------------
char GetKey(void)     //-----------------------------------------------------------------------------------取键值防抖动                                     
{         
unsigned char c,e,f,u = 0;
c=0;
f=0;
if((PINB&0X0f)!=0x0f)
  {
  e = (PINB&0X0f);
  display();
  if(e==(PINB&0X0f) )  
               {
loopkey:     display();
	            c++;
			    if(c>20) 
	              {
				  if(c==254)
				     {
					  e = (PINB&0X0f);
					  e+=0x10; 
s3loop: 			display();
					  u++;
					  if (u>20)  
						 { return e;  }                                             
						 if((PINB&0X0f)==0x0f )          return e;
						 else                                goto  s3loop;
					     }
						if ((PINB&0X0f)==set)        goto loopkey;
						if ((PINB&0X0f)==set_left)  goto loopkey;
						return e;
					 }
				 if((PINB&0X0f)==0x0f )                  return e;
				 else                             	        goto loopkey;
			 }											     
  }    
return f;
}
//----------------------------------------------------------------------------------------------------------------
void process(long i,unsigned char *p,unsigned char z)//------------------------- 
{  
     long    j=100000;
     long    x,w=0;
     unsigned char cv,s=5;
	 if(i<0)  { i*=-1;        cv=1;}
	 else                 cv=0;
     x=i;
repro:	
    if(s!=0)
    {
	p[s]=i/j;
	if(x<j)   {p[s]=10;}
	i%=j;     j/=10;     s--;
	goto repro;
	}
	else p[s]=i;
	if(z==1)
	{//----------------------
	 if(p[pontdata] != 10 )  { if(pontdata!=0)  p[pontdata]+=25;}
	 else
	     {
		   if(pontdata>0)
		      { 
		         s=pontdata;
possreb:   if(p[s]==10)
		            {
		               p[s]=0;    s--;
			           if(s!=0)   goto possreb;
	                }
				 p[pontdata]+=25;
			  }
		 }
	 if(pontdata==5) {if(cv!=0) p[5]=55 ;} 	 
    }
	if(cv==1)     {if(pontdata==5)                  p[pontdata]=55;
	                    else   { while(p[w]!=10){w++;} p[w]=12;}  }
}
//-------------------------------------------------------------------------------------------------------------------
long               process_add(void)
{
long               timeposs=0;
if(p[5]<10)      timeposs+= (p[5]*100000);
if(p[4]<10)      timeposs+= (p[4]*100000/10);
if(p[3]<10)      timeposs+= (p[3]*1000);
if(p[2]<10)      timeposs+= (p[2]*100);
if(p[1]<10)      timeposs+= (p[1]*10);
if(p[0]<10)      timeposs+= p[0];
return            timeposs;
}

⌨️ 快捷键说明

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