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

📄 main.c

📁 此程序为利用mage8 AVR 和EM4094实现读取TYPE A类型卡的C程序、读卡稳定、这个项目我们做了好久、非常不错的程序、很适合做这方面产品的朋友们参考
💻 C
📖 第 1 页 / 共 2 页
字号:
        	  eeprom_wb( &EEPROM_CHECK , param );
        	  while ( !eeprom_is_ready( ) ){};
        	  eeprom_wb( &EEPROM_CHECK_CHK , param ); 
        	  if ( param )
        	  {
        	  	  if ( Check_EEPROM( ) )
        	  	  {
        	  	  	  SendByte( 'O' );
        	  	  	  SendByte( 'K' );
        	  	  }
        	  	  else
        	  	  {
        	  	  	  SendByte( 'E' );
        	  	  }      	        
        	  }
        	  
        	  break;
        	  
        case 0x06 :             //Recovery default value, 0 --not , 1 -- reset  to default value;
        	  while ( !eeprom_is_ready( ) ){};
        	  eeprom_wb( &RESET_DEFAULT , param );
        	  while ( !eeprom_is_ready( ) ){};
        	  eeprom_wb( &RESET_DEFAULT_CHK , param ); 
        	  if ( param )
        	  	  Reset_To_Default( );  
        	  	    	        	
        	  break;
        	  
        case 0x07 :             //Modify keybord enable, ( 0 -- low level alarm , 1 -- high level alarm );
        	  while ( !eeprom_is_ready( ) ){};
        	  eeprom_wb( &ALARM_LEVEL , param );
        	  while ( !eeprom_is_ready( ) ){};
        	  eeprom_wb( &ALARM_LEVEL_CHK , param );
        	  alarm_level = param ;    
        	       	
        	  break;  
        	  
        case 0x08 :
        	  while ( !eeprom_is_ready( ) ){};
        	  eeprom_wb( &ALARM_TIME , param );
        	  while ( !eeprom_is_ready( ) ){};
        	  eeprom_wb( &ALARM_TIME_CHK , param );        	  
        	  alarm_time = param;  
        	  
        	  break;   
        	  
        case 0x09 :
        	  while ( !eeprom_is_ready( ) ){};
        	  eeprom_wb( &ALARM_ENABLE , param );
        	  while ( !eeprom_is_ready( ) ){};
        	  eeprom_wb( &ALARM_ENABLE_CHK , param );        	  
        	  alarm_enable = param;  
        	  
        	  break; 
        	          	        	        	  
        default   :
        	  break;
    }      
}

uint8_t Check_EEPROM( void )
{
	  if( eeprom_rb( &ID )            != eeprom_rb( &ID_CHK ) )
	  {	
	      return 0;
	  }
	  if( eeprom_rb( &SERIAL_NUMBER ) != eeprom_rb( &SERIAL_NUMBER_CHK ) )
	  {	
	      return 0;
	  }
	  if( eeprom_rb( &WEIGAN_FORMAT ) != eeprom_rb( &WEIGAN_FORMAT_CHK ) )
	  {	
	      return 0;
	  }
	  if( eeprom_rb( &AUTH_CODE )     != eeprom_rb( &AUTH_CODE_CHK ) )
	  {	
	      return 0;
	  }
	  if( eeprom_rb( &EEPROM_CHECK )  != eeprom_rb( &EEPROM_CHECK_CHK ) )
	  {	
	      return 0;
	  }
	  if( eeprom_rb( &RESET_DEFAULT ) != eeprom_rb( &RESET_DEFAULT_CHK ) )
	  {	
	      return 0;
	  }
	  if( eeprom_rb( &ALARM_LEVEL )    != eeprom_rb( &ALARM_LEVEL_CHK ) )
	  {	
	      return 0;
	  }
	  if( eeprom_rb( &ALARM_TIME ) != eeprom_rb( &ALARM_TIME_CHK ) )
	  {	  
	  	  return 0;	 
	  }	
	  if( eeprom_rb( &ALARM_ENABLE ) != eeprom_rb( &ALARM_ENABLE_CHK ) )
	  {	  
	  	  return 0;	 
	  }	    	  
	  return 1;	     	  
}

void Reset_To_Default( void )
{
	  wdt_reset( );
#ifdef WDT
        WatchDog_Feed( );
#endif
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &ID                , 0x01 );
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &ID_CHK            , 0x01 );
    
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &SERIAL_NUMBER     , 0xFF );
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &SERIAL_NUMBER_CHK , 0xFF );
    
    while ( !eeprom_is_ready( ) ){};        	  
    eeprom_wb( &WEIGAN_FORMAT     , 0x01 );
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &WEIGAN_FORMAT_CHK , 0x01 );
    
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &AUTH_CODE         , 0x00 );
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &AUTH_CODE_CHK     , 0x00 ); 
           	
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &EEPROM_CHECK      , 0x00 );
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &EEPROM_CHECK_CHK  , 0x00 ); 
    
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &RESET_DEFAULT     , 0x00 );
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &RESET_DEFAULT_CHK , 0x00 );	
    
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &ALARM_LEVEL        , 0x01 );
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &ALARM_LEVEL_CHK    , 0x01 );   
    
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &ALARM_TIME     , 0x05 );
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &ALARM_TIME_CHK , 0x05 );    
    
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &ALARM_ENABLE     , 0x01 );
    while ( !eeprom_is_ready( ) ){};
    eeprom_wb( &ALARM_ENABLE_CHK , 0x01 );   
        
    wdt_reset( ); 
#ifdef WDT
        WatchDog_Feed( );
#endif 

}
// ********************************************************************************************
// Description : Main function.
// Return value: None.   
// parameter   : None.
// ********************************************************************************************

int main( void )
{
//    Set_RED_LED( ); 
    watchdog_reset = bit_is_set( MCUCSR , WDRF );     //capture watchdog resets
    avr_ini( );			                               // initialization
    main_receiver( );
    return( 0 );
}

//weigan26
//E CCCC CCCC CCCC                    CCCC CCCC CCCC O

//weigan34 
//E CCCC CCCC CCCC CCCC          CCCC CCCC CCCC CCCC O

//weigan36
//O CCCC CCCC CCCC CCCC C       CCC CCCC CCCC CCCC IIE
//I is '0';

//weigan44
//CCCC CCCC CCCC CCCC CCCC
//CCCC CCCC CCCC CCCC CCCC XXXX
//XXXX is the value of XOR of first 10 CCCC;

void Beep_Long( void )
{
    cbi( PORTD , BEEP_PIN );
    Delayms( 90 );
    sbi( PORTD , BEEP_PIN );
//    Delayms( 80 );
}

void Beep( uint8_t times )
{
	  if ( times == 0x01 )
	  	  Beep_Long( );
	  else
    {
    	  while( times-- > 1 )
        {
    	      cbi( PORTD , BEEP_PIN );
    	      Delayms( 50 );
    	      sbi( PORTD , BEEP_PIN );
    	      Delayms( 30 );
        } 
    	  cbi( PORTD , BEEP_PIN );
    	  Delayms( 50 );
    	  sbi( PORTD , BEEP_PIN );                   	  
    }	  
}

void Delayms( uint16_t count )
{
    while( count-- > 0 )
    {
    	  Delayus( 1000 );
    }
    wdt_reset( );
#ifdef WDT
    WatchDog_Feed( );
#endif     	
}

void Delayus( uint16_t count )
{
    while( count-- > 0 )
    {
    	  asm ("nop");asm ("nop");asm ("nop");asm ("nop");
    	  asm ("nop");asm ("nop");asm ("nop");asm ("nop");  
    	  asm ("nop");asm ("nop");asm ("nop");asm ("nop");
    	  asm ("nop");asm ("nop");asm ("nop");asm ("nop");   	  
    }	
}
/*
uint8_t Compare_Weigan_Data( void )
{
   	uint8_t i;
   	if ( em4094_data_valid == 0 )
   	{   		  
   		  data_same_times++;
   		  if ( data_same_times > 16 )
   		  {
   		  	  data_same_times = 0;
   		  	  for ( i = 0 ; i < 5 ; i++ )
   		  	      history_weigan_data[ i ] = 0;
   		  }
   		  return( 0 );
   	}
   	else
    {
    	  data_same_times = 0;      
       	for ( i = 0 ; i < 5 ; i++ )
   	    {
   	        if ( weigan_data[ i ] != history_weigan_data[ i ] )
   	    	      break;	
   	    }
   	    if ( i != 5 )
   	    {
   		      for ( i = 0 ; i < 5 ; i++ )
   		          history_weigan_data[ i ] = weigan_data[ i ];     
   		      return( 1 );   		  
   	    }
   	    else
   	    	  return( 0 );    		        		      
   	}
}
*/
void Send_Card_ID( uint8_t format , uint8_t *data )
{
	  switch( format )
	  {
	      case 1 :
	      	  Send_Weigan26( data );
	          break;
	      case 2 :
	      	  Send_Weigan34( data );
	      	  break;
	      case 3 :
	      	  Send_Weigan36( data );
	      	  break;
	      case 4 :
	      	  Send_Weigan44( data );
	      	  break;
	      case 5 :
	      	  Send_9600( data );
	      	  break;	      	  	      	  
	      default :
	      	  break;	
	  }	
}

void Alarm_Check_And_Process( void )
{


	  if ( alarm_level == 0 )
	  {
	      if ( PINC & ( 1 << ALARM_IN ) )
	      {
	  	      sbi( PORTC , ALARM_OUT );        
	  	      cbi( PORTD , BEEP_PIN );         //beep;
	  	  }
	      else
	      {	      	  
	      	  cbi( PORTC , ALARM_OUT );	 
	      	  sbi( PORTD , BEEP_PIN ); 	       //not beep;
	      }  
	  }
	  else if ( alarm_level == 1 )              //ALARM pin high level alarm;
	  {
	      if ( PINC & ( 1 << ALARM_IN ) )
	      {	      	  
	      	  cbi( PORTC , ALARM_OUT );
	      	  sbi( PORTD , BEEP_PIN );       //not beep;
	      }
	      else
	      {
	      	  sbi( PORTC , ALARM_OUT );	     //beep;
	      	  cbi( PORTD , BEEP_PIN );
	      }
	  }	  
}














⌨️ 快捷键说明

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