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

📄 m8demo._c

📁 AVR系列被广泛应用的单片机MEGA8开发(原理图)及例程
💻 _C
📖 第 1 页 / 共 2 页
字号:
		       key_tick=0;
		     
      		}
	      break;
		}
    
    case KBD_DEBOUNCE:
    		
    		{
    			
      		if (key_tick > KBD_DEBOUNCE_TEMPO)
		        key_state = KBD_DECODE;
             
      		break;
    		}
    
    case KBD_DECODE:
    		{
    		 
		if(key_value==Key_Decode())
         	{
		//if(( key_value==key_dec)||(key_value==key_inc))
		//	key_state = KBD_DECODE5;
		//else
		    key_state = KBD_DECODE2;
		   

		}
              else
	   	key_state = KBD_IDLE;
      		break;
		}
 
    case KBD_DECODE2:
       	{
       	if(key_value!=Key_Decode())
	        {key_pressed = true;          
       	  key_state = KBD_IDLE;
	       }
	        break;
		}
     
     case KBD_DECODE3:
     		{  
		if (key_tick > KBD_DEBOUNCE_TEMP1)
              key_state = KBD_DECODE5;
      		break;
		}
	
    case KBD_DECODE4:
    		{ 

    		 key_pressed = true;    
    		 key_state = KBD_DECODE3;
    		 key_tick=0;
		if(key_value!=Key_Decode())
       	 {
       	 key_pressed = true;          
	         key_state = KBD_IDLE;
	        }
	      break;
		}
    case KBD_DECODE5:
    		{ 

    		if (key_tick > KBD_DEBOUNCE_TEMP1)
              key_state = KBD_DECODE4;
		if(key_value!=Key_Decode())
       	 {
       	 key_pressed = true;          
	         key_state = KBD_IDLE;
	        }
		
	      break;
		}

    default:      break;
  }	


}


void UserApplication(void)
{
unsigned char  nn;;
init_devices();
TimerCount=0;
TimerCountOld=0;
key_state=KBD_IDLE;
mode_state=0;
PutChar(0x0a);
PutChar(0x0d);
PutStr("富友勤电子M8DEMO");
PutStr("时钟模式");
 while(1)
 	{
 	 Key_Task();
 	 if(key_pressed)
 	 	{
 	 switch(key_value)
 	 	{ 
 	 	case key_inc:
			 switch(mode_state)
 	 	       	{
 	 	       	  case clock_mode:break;
 	 	                case out_eeprom_addr_modify_mode:
					out_eeprom_addr++;
 	 	                	out_eeprom_data=i2c_Read(out_eeprom_addr);
 	 	                	

					break;
 	 	                case out_eeprom_data_modify_mode:
 	 	                	out_eeprom_data++;
 	 	                	i2c_Write(out_eeprom_addr,out_eeprom_data);
 	 	               	 break;
 	 	                case out_eeprom_read_mode:
 	 	                	out_eeprom_addr++;
 	 	                	out_eeprom_data=i2c_Read(out_eeprom_addr);
 	 	                	break;
 	 	                case in_eeprom_addr_modify_mode:
					in_eeprom_addr++;
					EEPROM_READ(in_eeprom_addr, in_eeprom_data);
					break;
 	 	                case in_eeprom_data_modify_mode:
 	 	                	in_eeprom_data++;
 	 	                	EEPROM_WRITE  (in_eeprom_addr,in_eeprom_data);
 	 	               	 break;
 	 	                case in_eeprom_read_mode:
 	 	                	out_eeprom_addr++;
 	 	                	EEPROM_READ(in_eeprom_addr, in_eeprom_data);

 	 	                	break;
   				 case AT45DB021_addr_modify_mode:
   				 	  AT45DB021_addr++;
   				 	  if(AT45DB021_addr==0x80)
   				 	  	AT45DB021_addr=0x00;
   				 	   PutStr("45DB21 Read Start Addr");
   				 	  PutInt( AT45DB021_addr );
   				 	  AT45DB021_data=ReadBlock(AT45DB021_addr);
   				 	   PutStr("45DB21 Read  Data");
   				 	  PutInt( AT45DB021_data );
   				 	  PutStr("45DB21 Read End");
   				 	  break;
				  case AT45DB021_data_modify_mode:
 	 	                       AT45DB021_data++;
   				 	  PutStr("45DB21 Write Start");
 	 	                       WriteBlock(AT45DB021_addr, AT45DB021_data);
   				 	  PutInt( AT45DB021_data );
   				 	  PutStr("45DB21 Write End");
 	 	    		 	  break;

 	 	                default :break;
 	 	       	}
       		break;
 	 	case key_dec:
 	 	        switch(mode_state)
 	 	       	{
 	 	       	  case clock_mode:break;
 	 	                case out_eeprom_addr_modify_mode:
 	 	                	out_eeprom_addr--; 
 	 	                	out_eeprom_data=i2c_Read(out_eeprom_addr);
					break;
				  case out_eeprom_data_modify_mode:
 	 	                	out_eeprom_data--;
 	 	                	i2c_Write(out_eeprom_addr,out_eeprom_data);
 	 	               	 break;
 	 	                case out_eeprom_read_mode:
 	 	                   	out_eeprom_addr--;
 	 	                   	out_eeprom_data=i2c_Read(out_eeprom_addr);
					break;
 	 	                case in_eeprom_addr_modify_mode:
 	 	                	in_eeprom_addr--;
 	 	              	EEPROM_READ(in_eeprom_addr, in_eeprom_data);

					break;
				  case in_eeprom_data_modify_mode:
 	 	                	in_eeprom_data--;
 	 	                	EEPROM_WRITE  (in_eeprom_addr,in_eeprom_data);
 	 	               	 break;
	
 	 	                case in_eeprom_read_mode:
 	 	                   	in_eeprom_addr--;
					EEPROM_READ(in_eeprom_addr, in_eeprom_data);
 	 	                   	break;
   				 case AT45DB021_addr_modify_mode:
   				 	  AT45DB021_addr--;
   				 	  if(AT45DB021_addr==0xFF)
   				 	  	AT45DB021_addr=0x7F;
   				 	   PutStr("45DB21 Read Start Addr");
   				 	    PutInt( AT45DB021_addr );
   				 	  AT45DB021_data=ReadBlock(AT45DB021_addr);
   				 	   PutStr("45DB21 Read  Data");
   				 	  PutInt( AT45DB021_data );
   				 	  PutStr("45DB21 Read End");
   				 	  break;
				  case AT45DB021_data_modify_mode:
 	 	                       AT45DB021_data--;
   				 	  PutStr("45DB21 Write Start");
 	 	                       WriteBlock(AT45DB021_addr, AT45DB021_data);
   				 	  PutInt( AT45DB021_data );
   				 	  PutStr("45DB21 Write End");
 	 	    		 	  break;

                              default :break;
 	 	       	}
			break;
 	 	case key_mode:
 	 	       switch(mode_state)
 	 	       	{
 	 	       	  case clock_mode:
 	 	       	  	mode_state=out_eeprom_addr_modify_mode;
 	 	                	PutStr("外部EEPROM地址修改");
 	 	                	out_eeprom_addr=0xFF;
 	 	                	out_eeprom_data=0xF1;
 	 	       	  	break;
 	 	                case out_eeprom_addr_modify_mode:
 	 	                	 mode_state=in_eeprom_addr_modify_mode;
 	 	                	 PutStr("内部EEPROM地址修改");
 	 	                	in_eeprom_addr=0xFF;
 	 	                	in_eeprom_data=0xF2;

 	 	             		break;
 	 	                case out_eeprom_data_modify_mode:
 	 	                	 mode_state=in_eeprom_addr_modify_mode;
 	 	                	PutStr("内部EEPROM地址修改");
 	 	                	in_eeprom_addr=0xFF;
 	 	                	in_eeprom_data=0xF2;
 	 	             		break;
	 	         
 	 	                case in_eeprom_addr_modify_mode:
 	 	                	adc_Enable();
 	 	                	mode_state=adc_mode;
 	 	       	  	PutStr("ADC模式");
 	 	       	  	adc_value=8888;
 	 	       	  	key_pressed=false;
 	 	       	  	#ifdef  query_adc
 	 	       	   while(1)
 	 	       	  	{ Key_Task();
 	 	       	  	if(key_pressed)
 	 	       	  		if(key_value==key_mode)
 	 	       	  		{
 	 	       	  		adc_Disable();
 	 	       	  		AT45DB021_addr=0x7F;
 	 	                		AT45DB021_data=0xF3;
 	 	                		mode_state=AT45DB021_addr_modify_mode;
 	 	       	  		PutStr("45DB21块地址修改");
 	 	       	  		goto end_key_value;
 	 	       	  		}
 	 	       	  	adc_value=ReadADC(0);
 	 	       	       	}
 	 	       	  	#endif
 	 	                	break;
 	 	                 case in_eeprom_data_modify_mode:
 	 	                	adc_Enable();
 	 	                	 mode_state=adc_mode;
 	 	       	  	PutStr("ADC模式");
 	 	       	  	 adc_value=8888;
 	 	       	  	 	key_pressed=false;
 	 	       	  	 	#ifdef  query_adc
 	 	       	      while(1)
 	 	       	  	{ Key_Task();
 	 	       	  	if(key_pressed)
 	 	       	  		if(key_value==key_mode)
 	 	       	  		{
 	 	       	  		adc_Disable();
 	 	       	  		AT45DB021_addr=0x7F;
 	 	                		AT45DB021_data=0xF3;
 	 	                		mode_state=AT45DB021_addr_modify_mode;
 	 	       	  		PutStr("45DB21块地址修改");
 	 	       	  		goto end_key_value;
 	 	       	  		}
 	 	       	  	adc_value=ReadADC(0);
 	 	       	       	}
 	 	       	      #endif
 	 	                	break;
 	 	                   case AT45DB021_addr_modify_mode:
 	 	                   case AT45DB021_data_modify_mode:
 	 	                	mode_state=clock_mode;
 	 	       	  	PutStr("时钟模式");
 	 	                	break;
                              default :break;
 	 	       	}
			 break;
 	 	case key_enter:
/* 	 		PutStr("key_enter");
 	 		if(UCSRB&0x10)
                     uart0_RX_Enable();
                     else
                     uart0_RX_Disable();*/
                      switch(mode_state)
 	 	       	{
 	 	                case out_eeprom_addr_modify_mode:
 	 	                	PutStr("外部EEPROM数据修改");
 	 	                	mode_state=out_eeprom_data_modify_mode;
 	 	                	break;
 	 	                case out_eeprom_data_modify_mode:
 	 	                	PutStr("外部EEPROM地址修改");
 	 	                	mode_state=out_eeprom_addr_modify_mode;
 	 	               	 break;
 	 	                case in_eeprom_addr_modify_mode:
 	 	                	PutStr("内部EEPROM数据修改");
 	 	                	mode_state=in_eeprom_data_modify_mode;
 	 	                	break;
 	 	                case in_eeprom_data_modify_mode:
 	 	                	PutStr("内部EEPROM地址修改");
 	 	                	mode_state=in_eeprom_addr_modify_mode;
 	 	               	 break;
 	 	                case AT45DB021_addr_modify_mode:
 	 	       	  	PutStr("45DB21数据修改");
 	 	                	mode_state=AT45DB021_data_modify_mode;
 	 	                	break;
 	 	                case AT45DB021_data_modify_mode:
 	 	       	  		PutStr("45DB21地址修改");	
 	 	                	mode_state=AT45DB021_addr_modify_mode;
 	 	               	 break;

                              default :break;
 	 	       	}
			 break;
 	 	default:break;
 	 	}
end_key_value:
	key_pressed=false;
 	 	}
 	}
 //insert your functional code here...
}

void main()
{
UserApplication();
}


⌨️ 快捷键说明

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