U8_t EF_u8_KeyPad_GetKeyAfterReleasing () { volatile U8_t KeyPressed_Status = 0; KeyPressed_Status = EF_u8_KeyPad_Scan(); if( KeyPressed_Status != NOT_PRESSED) { while (EF_u8_KeyPad_Scan() != NOT_PRESSED ); _delay_ms(50); } return KeyPressed_Status; }
int main (void) { U16_t Period; DDRD = 0x00; PORTD = 0x00; EF_void_TimerInit(); EF_void_LCD_init(); EF_void_LCD_Clear_Screen(); EF_void_LCD_goto(1, 2); // _delay_ms(1000); EF_void_LCD_print(" EmbeddedFab"); _delay_ms(1000); // GICR = (1<<INT0); // Enable INT0 // MCUCR = (1 << ISC00) | (1 << ISC01); sei(); EF_void_PWM_init(TIMER_0); EF_void_InputCapture_Init(); EF_void_PWM_SetDutyCycle (90 ,TIMER_0); u8Counter = EF_BOOLEAN_InputCapture_GetPeriod (&Period, 100); EF_void_LCD_Clear_Screen(); EF_void_LCD_goto(1, 2); EF_void_LCD_print_NUM( Period, 2); EF_void_LCD_print_NUM( u8Counter, 1); while(1) { PORTD &= ~(1 << 7); // _delay_ms(100); PORTD |= 1 << 7; _delay_ms(50); } #if 0 U8_t temp[2]; U8_t number; DDRD = 0xff; PORTD = 0x00; EF_void_LCD_init(); EF_void_KeyPad_Init(); #if RTC_ENABLE void_TIMER_init(); EF_void_DS1307_Init(); sei(); /*Enable interrupts*/ EF_void_DS1307_SetTime(17, 13, 30); #endif EF_void_LCD_Clear_Screen(); EF_void_LCD_goto(1,2); EF_void_LCD_print("Embedded"); #ifdef PWM_test /*don't forget init. the PWM*/ EF_void_PWM_SetDutyCycle (0,TIMER_0); _delay_ms(500); EF_void_PWM_SetDutyCycle (23,TIMER_0); _delay_ms(500); EF_void_PWM_SetDutyCycle (50,TIMER_0); _delay_ms(500); EF_void_PWM_SetDutyCycle (80,TIMER_0); _delay_ms(500); EF_void_PWM_SetDutyCycle (100,TIMER_0); _delay_ms(500); _delay_ms(100); #endif #ifdef EEPROM_ENABLE EF_void_I2C_Init(); EF_EEPROM_Write_Byte(6,0xA0,0x65); number = EF_EEPROM_Read_Byte(6,0xA0); if (0x15 == number) { EF_void_LCD_goto(2,8); EF_void_LCD_HextoASCII(&number); } else { EF_void_LCD_goto(2,8); EF_void_LCD_HextoASCII(&number); } #endif #ifdef INPUT_CAPTURE_TEST /* enable timer init and sei()*/ EF_void_PWM_init(TIMER_0); EF_void_InputCapture_Init(); EF_void_PWM_SetDutyCycle (90 ,TIMER_0); u8Counter = EF_BOOLEAN_InputCapture_GetPeriod (&Period, 100); EF_void_LCD_Clear_Screen(); EF_void_LCD_goto(1, 2); EF_void_LCD_print_NUM( Period, 2); EF_void_LCD_print_NUM( u8Counter, 1); #endif #ifdef ADC_ENABLE /* don't forget ADC_init before while */ u16DigitalValue = EF_u16_ADC_read(0); EF_void_LCD_Clear_Screen(); // u16DigitalValue = (u16DigitalValue*5)/1024; itoa(u16DigitalValue, string, 10); EF_void_LCD_goto(1, 2); EF_void_LCD_print(string); #endif #ifdef EEPROM_INTERNAL EF_void_EEPROM_WriteByte(0, 0x99); number = EF_u8_EPROM_ReadByte (0); if (0x15 == number) { EF_void_LCD_goto(2,8); EF_void_LCD_HextoASCII(&number); } else { EF_void_LCD_goto(2,8); EF_void_LCD_HextoASCII(&number); } #endif while(1) { #ifdef RTC_ENABLE if((SystemTick1MSec - TimeOut) > TIMEOUR_1SEC) { TimeOut = SystemTick1MSec; EF_void_DS1307_GetTime(&Hours, &Mintes, &Seconds); LCD_update_time(Hours, (Mintes), (Seconds)); PORTD = 0x7F; } #endif #ifdef WAVECOM /* using ISR */ volatile U8_t gSecondTimeEntery = 0; /* flag to define the second response to get SMS */ volatile U8_t gNumberOfPunctuation = 0; /* flag to know when SMS begin */ volatile U16_t gNumberOfRxBytes = 0; /* save number of SMS bytes */ volatile U16_t counter = 0; /* using in SMS array in ISR */ U8_t gBuffer [50]; Wavecom_Sms_cfg_str Wavecom_Sms_cfg ={ENABLE,ENABLE,ENABLE}; char const SMS[] = "Again , it's ATMEGA \n :) ;)"; Wavecom_Call_cfg_str Wavecom_Call_cfg = {DISABLE, DISABLE}; Wavecom_ReadSms_cfg_str Wavecom_ReadSms_cfg ={0, All_list, 0 ,10 , (U8_t*)&gBuffer}; sei(); // EF_B_Wavecom_SendSms((U8_t*)"01091067575",11,(U8_t*)SMS, strlen(SMS)); // EF_B_Wavecom_Call ((U8_t*)"01117079935",11); // EF_B_Wavecom_ReadSms (&Wavecom_ReadSms_cfg); while (1) { // PORTD ^= 0xc0; EF_B_Wavecom_InitModule(); EF_B_Wavecom_InitSms(&Wavecom_Sms_cfg); EF_B_Wavecom_InitCall (&Wavecom_Call_cfg); _delay_ms(1000); EF_void_LCD_Clear_Screen(); EF_void_LCD_goto(1, 1); _delay_ms(1000); EF_void_LCD_goto(2, 1); // EF_B_Wavecom_CallRelease(); } ISR (USART_RXC_vect) { static volatile U8_t RX_data = 0; RX_data = UDR; if ((RX_data != '\r') && (RX_data != '\n')) { if (gSmsReadyFlag == 1) { if (gNumberOfPunctuation == 6) { gRX_SMS[counter] = RX_data; //TODO modify this check. if ( gRX_SMS[counter] == 'K' && gRX_SMS[counter-1] == 'O') { gNumberOfRxBytes = counter-1; counter=0; gSmsReadyFlag = 0; gSecondTimeEntery = 0; } counter++; } else { if (RX_data == '\"') { gNumberOfPunctuation++; } } } else { EF_void_LCD_send_data (RX_data); if (RX_data == 'K') { EF_void_LCD_send_data (' '); } } } } #endif #ifdef SKYLAB_GPS double D_Longitude = 0; double D_Latitude = 0; BOOLEAN b_Datavaild = 0; EF_void_LCD_init(); EF_B_SkyLabGPS_Init(); //timer OS EF_void_TimerInit(); EF_void_LCD_Clear_Screen(); DDRD = 0xc0; while (1) { b_Datavaild = EF_B_SkyLabGPS_GetPosition( &D_Latitude , &D_Longitude); if (b_Datavaild == DATA_VAILD) { EF_B_SkyLabGPS_PrintPosition( D_Latitude, D_Longitude); } PORTD ^=0xc0; } #endif #ifdef ULTRASONIC /* it used timer of timer.h , be careful if you depend on this timer in anther application */ EF_UltraSonic_Init(); U8_t Distance_Cm ; while (1) { Distance_Cm = EF_UltraSonic_GetDistance(); #if INTERRUPT_BASED == 0 EF_void_LCD_Clear_Screen(); itoa(Distance_Cm, string, 10); EF_void_LCD_goto(1, 2); EF_void_LCD_print(string); #endif _delay_ms (20); } #endif #if 1 number = EF_u8_KeyPad_Scan(); if(number != 0) { EF_void_LCD_goto(2,1); itoa(number,temp,10); EF_void_LCD_print(temp); } #endif } #endif return 0; }