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

📄 macohbak.c

📁 工控计数器ICCAVR的MAGE8程序LED数码显示+4键
💻 C
📖 第 1 页 / 共 2 页
字号:
		   }
		   break;
		   case   left:
		   if(tbit<2) tbit++;
		   else         tbit=0;
		   break;
		   case   set_up:
		   while (1)
		      {
tr_x1:	   pontmp=pontdata;
		       pontdata=1;
		       sandcnd_display(tr_x,trdata_x[tdbit],1);
                o[1]=tdbit+1;
			   key=display_flash(135,0,1);  
		       pontdata=pontmp;
		      switch (key)
			                {
							case   set:
		                    reset_m=resettemp;
                            in_m=intemp ;
							intm_m=inmtemp;
		                   while(1) 
		                         {
                                 sandchar_display(in,inm);
		                         p[0]=intm_m+13;
			                     o[0]=in_m+13;
	                             key=display_flash(135,0,1);   
			                     switch (key)
		                                 {
									   case    set:
									    while (1)
										          {
												    sandchar_display(rst,comtep);
		                                            o[0]=reset_m+13;
												    key=display_flash(135,0,1);  
			 										switch (key)
												    {
												    case    up:
							                        if(reset_m<2)      reset_m++;
							                        else                       reset_m=0;
						                            break;
													case    set:
													goto    menu_end;
							                        case    left3s:
							                        resettemp=reset_m;
							                        EEPROMwrite(0x11,resettemp);
                                                    goto    menu_end;
												  }
												} 
										 break;
						                 case    down:
							             if(intm_m==0)intm_m++;
							             else                  intm_m=0;
						                 break;
							             case    up:
							             if(in_m<2)      in_m++;
							             else                 in_m=0;
						                 break;
							             case    left3s:
							             inmtemp=intm_m;
							             intemp=in_m;
							             EEPROMwrite(0x11,inmtemp );
	                                     EEPROMwrite(0x12,intemp);
			                             goto    menu_end;
							            }
			                      }
							break;
							case   up:
tr_x2:				     fbit=1;  cbit=0;
							 pontmp=pontdata;
		                     pontdata=1;
		                     sandcnd_display(tr_x,trdata_x[tdbit],1);
							while(1)
							      {
								  o=tr_x;
			                      key=display_flash(fbit,cbit,2);  
		                          pontdata=pontmp;
								  switch (key)
								                 {
								                            case    up:
															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:
															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    left3s:
															trdata=0;
												            trdata+= ((p[1]-25)*10);
                                                            trdata+= p[0];
															trdata_x[tdbit]=trdata;
															EEPROM_WRITE(0x30,trdata_x);  
			                                                goto    tr_x1;
										                    case    set:
			                                                goto    menu_end;
															case    set3s:
			                                                goto    menu_end;
												}
								  }
							break;
							case   down:
							goto    tr_x2;
							break;
							case   left:
							if(tdbit<2) tdbit++;
							else           tdbit=0;
							break;
							case   set3s:
							goto   menu_end;
							}
			  }  
		   break;
		   case   down:
		   Key_Init1();
		   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<c;d++) 
		     {
			      ed=~ed;
			      switch (ed)
			      {
				   case   1:      o=v;                      break;
			       case   2:      p[g]=10;              break;
				   case   3:      p=v; o=v;             break;
				  }
				  for (a=0;a<35;a++) 
				  {
				   display();
		           if((PINB&0XF0)!=0xf0) 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=CNT*scldata[0];
 tempcnt= posstep/scldata[1];
  process(tempcnt,o,1);
  process(timeset[tbit],p,0);
  display();
  }
  
//-------------------------------------------------------------------------------------------------------------
void display (void)  //--------------------------------------------------------------------------数码管显示扫描
{   
     unsigned  char  oda,pda,bda,cx,cz;
	 unsigned  char  bitda=0x01;
	 unsigned  char    bi;
	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);  kt[bi]=3;}}	
						else                    {if( (60000+ticnt-ti[bi])/100>=trdata_x[bi] )  { PORTC&=~BIT(bi);  kt[bi]=3;}}
						  }	
	     if(trdata_x[bi]==0)          kt[bi]=1;					  
	}					  					
	 if( resettemp==2)            { if(kt[0]*kt[1]*kt[2]==1)             CNT=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)          Key_Init1();}		
	 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);
	   
	 } 
}
//----------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------
char GetKey(void)     //-----------------------------------------------------------------------------------取键值防抖动                                     
{         
    unsigned char c,e,jd,f,u = 0;
	c=0;  f=0;
    if((PINB&0XF0)!=0xf0)
          {
		  e = (PINB&0XF0);
		  display();
   	      if(e==(PINB&0XF0) )  
		                                       { 
						   loopkey:     display();
						                        c++;
											   if(c>10) 
											                      {
																   if(c==100)   {
																                            e = (PINB&0XF0);
																                            e++; 
														s3loop: 					 display();
														                                    u++;
														                                    if (u>20)  
																							{
																							   for(u=0;u<80;u++)
																							                                  {
																															     p=so_1;
																							                                    display();
																																}   
																							   p=dhitemp;                      
																							   return e;  
																							 }                                             
																							if((PINB&0XF0)==0xf0 )   return e;
																							else                               goto  s3loop;
																							}
																   if ((PINB&0XF0)==set) goto loopkey;
																   if ((PINB&0XF0)==left) goto loopkey;
																   if ((PINB&0XF0)==0xa0) goto loopkey;
																   if ((PINB&0XF0)==0x60) goto loopkey;
											                       return e;
																   }
										       if((PINB&0XF0)==0xf0 )   return e;
											   else                             	goto loopkey;
											   }											     
          }    
return f;
}
//----------------------------------------------------------------------------------------------------------------
void process(long i,unsigned char *p,unsigned char z)//-----------------------------------------运算位数据 
{  
     long    j=100000;
     long   x;
     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)   {if(cv==0) p[s]=10;
	                else     {  if(s>pontdata) p[s]=12; } }
	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 ;} 	 
    }//----------------------------
}
//-------------------------------------------------------------------------------------------------------------------
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 + -