extern u8 Check_u8SwitchState(u8 Copy_u8SwitchIdx) { u8 Local_u8SwitchState=u8RELEASED; u8 Local_u8ReturnVal=u8ERROR; u8 Local_u8Counter=0; DIO_u8ReadPinVal(Copy_u8SwitchIdx,&Local_u8SwitchState); if (Local_u8SwitchState==u8PRESSED) { if (Local_u8Counter<50) { Local_u8Counter++; } else if (Local_u8Counter==50) { // DELAY_voidDELAY(10); DIO_u8ReadPinVal(Copy_u8SwitchIdx,&Local_u8SwitchState); Local_u8Counter=0; } switch (Local_u8SwitchState) { case u8PRESSED: Local_u8ReturnVal=u8PRESSED; break; case u8RELEASED: Local_u8ReturnVal=u8RELEASED; break; // default: // Local_u8ReturnVal=u8RELEASED; } } return Local_u8ReturnVal; }
u8 SwitchSingle_u8Check(u8 Copy_u8PinIndx) { static u8 Switch_State=SWITCH_u8RELEASED; u8 local_PinReading=0; u8 local_PinReading2=0; switch (Switch_State) { case SWITCH_u8RELEASED: DIO_u8ReadPinVal(Copy_u8PinIndx,&local_PinReading); Delay(10UL); DIO_u8ReadPinVal(Copy_u8PinIndx,&local_PinReading2); if(local_PinReading==DIO_u8HIGH && local_PinReading==local_PinReading2) {Switch_State=SWITCH_u8DEBOUNCING;} else {Switch_State=SWITCH_u8RELEASED;} break; case SWITCH_u8DEBOUNCING: DIO_u8ReadPinVal(Copy_u8PinIndx,&local_PinReading); if(local_PinReading==DIO_u8HIGH){Switch_State=SWITCH_u8DEBOUNCING;} else {Switch_State=SWITCH_u8PRESSED;} break; case SWITCH_u8PRESSED: Switch_State=SWITCH_u8RELEASED; } return Switch_State; }
void LCD_WaitLcd(void) { u8 Local_u8ValBusyFlag; #if (LCD_u8LcdMode == LCD_u8Bit4) DIO_u8WritePinDir(LCD_u8D0,DIO_u8INPUT);//lcdd7=i/p . DIO_u8WritePinDir(LCD_u8D1,DIO_u8INPUT);//lazm el 4 yb2o i/p 3shan ama b2lb enable mn high l low bib3t lcd btb3t high DIO_u8WritePinDir(LCD_u8D2,DIO_u8INPUT);//lazm el 4 yb2o i/p 3shan ama b2lb enable mn high l low bib3t lcd btb3t high DIO_u8WritePinDir(LCD_u8D3,DIO_u8INPUT);//lazm el 4 yb2o i/p 3shan ama b2lb enable mn high l low bib3t lcd btb3t high DIO_u8WritePinVal(LCD_u8ReadWrite,DIO_u8HIGH);//rw=1. #elif (LCD_u8LcdMode == LCD_u8Bit8) DIO_u8WritePinDir(LCD_u8D0,DIO_u8INPUT); DIO_u8WritePinDir(LCD_u8D1,DIO_u8INPUT); DIO_u8WritePinDir(LCD_u8D2,DIO_u8INPUT); DIO_u8WritePinDir(LCD_u8D3,DIO_u8INPUT); DIO_u8WritePinDir(LCD_u8D4,DIO_u8INPUT); DIO_u8WritePinDir(LCD_u8D5,DIO_u8INPUT); DIO_u8WritePinDir(LCD_u8D6,DIO_u8INPUT); DIO_u8WritePinDir(LCD_u8D7,DIO_u8INPUT); DIO_u8WritePinVal(LCD_u8ReadWrite,DIO_u8HIGH);//rw=1. #endif DIO_u8WritePinVal(LCD_u8Reset,DIO_u8LOW);//rs=0. do { Local_u8ValBusyFlag=0; DIO_u8WritePinVal(LCD_u8Enable,DIO_u8HIGH);//Enable=1. Delay_ms_Max1s(1); #if (LCD_u8LcdMode == LCD_u8Bit4) DIO_u8ReadPinVal(LCD_u8D3,&Local_u8ValBusyFlag ); #elif (LCD_u8LcdMode == LCD_u8Bit8) DIO_u8ReadPinVal(LCD_u8D7,&Local_u8ValBusyFlag ); #endif Delay_ms_Max1s(1); DIO_u8WritePinVal(LCD_u8Enable,DIO_u8LOW);//e=0. Delay_ms_Max1s(1); DIO_u8WritePinVal(LCD_u8Enable,DIO_u8HIGH);//e=1 Delay_ms_Max1s(1); }while(Local_u8ValBusyFlag == LCD_u8Busy); DIO_u8WritePinVal(LCD_u8ReadWrite,DIO_u8LOW);//rw=0. #if (LCD_u8LcdMode == LCD_u8Bit4) DIO_u8WritePinDir(LCD_u8D0,DIO_u8OUTPUT); DIO_u8WritePinDir(LCD_u8D1,DIO_u8OUTPUT); DIO_u8WritePinDir(LCD_u8D2,DIO_u8OUTPUT); DIO_u8WritePinDir(LCD_u8D3,DIO_u8OUTPUT); Delay_ms_Max1s(1); #elif (LCD_u8LcdMode == LCD_u8Bit8) DIO_u8WritePinDir(LCD_u8D0,DIO_u8OUTPUT); DIO_u8WritePinDir(LCD_u8D1,DIO_u8OUTPUT); DIO_u8WritePinDir(LCD_u8D2,DIO_u8OUTPUT); DIO_u8WritePinDir(LCD_u8D3,DIO_u8OUTPUT); DIO_u8WritePinDir(LCD_u8D4,DIO_u8OUTPUT); DIO_u8WritePinDir(LCD_u8D5,DIO_u8OUTPUT); DIO_u8WritePinDir(LCD_u8D6,DIO_u8OUTPUT); DIO_u8WritePinDir(LCD_u8D7,DIO_u8OUTPUT); #endif }
u8 Keypad_u8Read(u8* Copy_u8SwitchNo) { u8 local_u8funcDoneRightFlag = u8OK; u8 local_u8ActiveRows = 0; u8 local_u8Col1Val; u8 local_u8Col2Val; u8 local_u8Col3Val; u8 local_u8Col4Val; u8 local_testVal; u8 local_u8Counter; for(local_u8Counter = 0; local_u8Counter <4; local_u8Counter++) { DIO_u8WritePin(KEYPAD_ROW1,KeyPad_u8StateArr[local_u8Counter][KEYPAD_ROW_IDX1]); DIO_u8WritePin(KEYPAD_ROW2,KeyPad_u8StateArr[local_u8Counter][KEYPAD_ROW_IDX2]); DIO_u8WritePin(KEYPAD_ROW3,KeyPad_u8StateArr[local_u8Counter][KEYPAD_ROW_IDX3]); DIO_u8WritePin(KEYPAD_ROW4,KeyPad_u8StateArr[local_u8Counter][KEYPAD_ROW_IDX4]); DIO_u8ReadPinVal(KEYPAD_COL1,&local_u8Col1Val); DIO_u8ReadPinVal(KEYPAD_COL2,&local_u8Col2Val); DIO_u8ReadPinVal(KEYPAD_COL3,&local_u8Col3Val); DIO_u8ReadPinVal(KEYPAD_COL4,&local_u8Col4Val); local_testVal = (!local_u8Col1Val)*(!local_u8Col2Val)*(local_u8Col3Val ^ local_u8Col4Val) + \ (!local_u8Col3Val)*(!local_u8Col4Val)*(local_u8Col1Val ^ local_u8Col2Val); if(local_testVal == 1) { local_u8ActiveRows |= local_u8Col1Val; local_u8ActiveRows |= local_u8Col2Val << 1; local_u8ActiveRows |= local_u8Col3Val << 2; local_u8ActiveRows |= local_u8Col4Val << 3; switch(local_u8ActiveRows) { case 1: *Copy_u8SwitchNo = KeyPad_u8SWITCHMap[local_u8Counter][KEYPAD_COL_IDX1]; break; case 2: *Copy_u8SwitchNo = KeyPad_u8SWITCHMap[local_u8Counter][KEYPAD_COL_IDX2]; break; case 4: *Copy_u8SwitchNo = KeyPad_u8SWITCHMap[local_u8Counter][KEYPAD_COL_IDX3]; break; case 8: *Copy_u8SwitchNo = KeyPad_u8SWITCHMap[local_u8Counter][KEYPAD_COL_IDX4]; break; default: local_u8funcDoneRightFlag = u8ERROR; break; } //end of switch case } //end of if } //end of for return local_u8funcDoneRightFlag; }
void main (void) { u8 x ; DIO_voidInit(); while(1) { DIO_u8WritePinVal(24,1); DIO_u8ReadPinVal(23,&x); if(x==1) DIO_u8WritePinVal(28,1); else if(x==0) DIO_u8WritePinVal(28,0); } }
int main(void) { u8 temp; u8 val; for (u8 i = 0; i < 4; i++) { val = DIO_u8WritePortDir(i, 5); //DIO_u8WritePinVal(i,1); val = DIO_u8ReadPinVal(i, &temp); printf("state = %d val = %d \n", val, temp); } printf("DDRA= %d \n", DDR0); printf("DDRB= %d \n", DDR1); printf("DDRC= %d \n", DDR2); printf("DDRD= %d \n", DDR3); return 0; }
void main(void) { u16 Local_u8ADCReading; u16 Local_u8LCDresult[5]; u8 Local_u8SW; u8 Local_u8ADCanalog; DIO_voidInit(); TACTILE_voidInit(); ADC_voidConfig(); ADC_voidEnable(); LCD_voidInit(); while (1) { ADC_voidReadSingleShot(&Local_u8ADCReading); DIO_u8ReadPinVal(DIO_u8PIN31, &Local_u8SW); Local_u8ADCanalog=((Local_u8ADCReading>>6)*(u16)5)/(u16)1024; switch (Local_u8SW) { case TACTILE_u8Pressed: DIO_u8WritePinVal(DIO_u8PIN27, 1); itoa(Local_u8ADCanalog+5, Local_u8LCDresult, 10); LCD_voidWriteString(Local_u8LCDresult); delay_ms(5); break; case TACTILE_u8Released: DIO_u8WritePinVal(DIO_u8PIN27, 0); itoa(Local_u8ADCanalog, Local_u8LCDresult, 10); LCD_voidWriteString(Local_u8LCDresult); delay_ms(5); break; } LCD_voidClearSceen(); } return; }
extern u8 TACTILE_u8GetState(u8 Copy_u8SwitchNumber, u8* Copy_u8PtrToVal) { static u8 TACTILE_u8SwitchesState[TACTILE_u8SWITCHESNO]={TACTILE_u8Released}; static u16 TACTILE_u8PressedCount[TACTILE_u8SWITCHESNO]={0}; static u16 TACTILE_u8ReleasedCount[TACTILE_u8SWITCHESNO]={0}; u8 Local_u8ReturnFlag = OK; u8 Local_u8ReadSW; if (Copy_u8SwitchNumber > TACTILE_u8SWITCHESNO-1) { Local_u8ReturnFlag = ERROR; } else { DIO_u8ReadPinVal(Copy_u8SwitchNumber, &Local_u8ReadSW); switch (TACTILE_u8SwitchesState[Copy_u8SwitchNumber]) { case TACTILE_u8Released: switch (Local_u8ReadSW) { case DIO_u8HIGH: TACTILE_u8SwitchesState[Copy_u8SwitchNumber] = TACTILE_u8Bounce; * Copy_u8PtrToVal = TACTILE_u8Released; break; case DIO_u8LOW: TACTILE_u8SwitchesState[Copy_u8SwitchNumber] = TACTILE_u8Released; * Copy_u8PtrToVal = TACTILE_u8Released; break; default: break; } break; case TACTILE_u8Pressed: switch (Local_u8ReadSW) { case DIO_u8LOW: TACTILE_u8SwitchesState[Copy_u8SwitchNumber] = TACTILE_u8Bounce; * Copy_u8PtrToVal = TACTILE_u8Pressed; break; case DIO_u8HIGH: TACTILE_u8SwitchesState[Copy_u8SwitchNumber] = TACTILE_u8Pressed; * Copy_u8PtrToVal = TACTILE_u8Pressed; break; default: break; } break; case TACTILE_u8Bounce: switch (Local_u8ReadSW) { case DIO_u8LOW: TACTILE_u8ReleasedCount[Copy_u8SwitchNumber]++; TACTILE_u8PressedCount[Copy_u8SwitchNumber] = 0; if (TACTILE_u8ReleasedCount[Copy_u8SwitchNumber] > TACTILE_u8DEBOUNCE_RANGE) { TACTILE_u8SwitchesState[Copy_u8SwitchNumber] = TACTILE_u8Released; * Copy_u8PtrToVal=TACTILE_u8Released; } break; case DIO_u8HIGH: TACTILE_u8PressedCount[Copy_u8SwitchNumber]++; TACTILE_u8ReleasedCount[Copy_u8SwitchNumber] = 0; if (TACTILE_u8PressedCount[Copy_u8SwitchNumber] > TACTILE_u8DEBOUNCE_RANGE) { TACTILE_u8SwitchesState[Copy_u8SwitchNumber] = TACTILE_u8Pressed; * Copy_u8PtrToVal=TACTILE_u8Pressed; } break; default: break; } break; } Local_u8ReturnFlag = OK; } return Local_u8ReturnFlag; }
extern u8 TSW_u8CheckSW(u8 CopyIdx,u8 *Copy_u8PtrVal) { u8 local_returnStatus; u8 local_u8readPin = 0; switch(TSW_u8SwitchParams[INTERNAL_STATES][CopyIdx]) { case TSW_Released: DIO_u8ReadPinVal(TSW_SwitchPins[CopyIdx],&local_u8readPin); if(GetBit(TSW_MODE,CopyIdx) == ACTIVELOW){local_u8readPin = !local_u8readPin;} switch(local_u8readPin) { case TSW_HIGH: TSW_u8SwitchParams[INTERNAL_STATES][CopyIdx] = TSW_Bouncing; *Copy_u8PtrVal= TSW_u8SwitchParams[EXTERNAL_STATES][CopyIdx]; local_returnStatus = okay; break; case TSW_LOW: TSW_u8SwitchParams[INTERNAL_STATES][CopyIdx] = TSW_Released; TSW_u8SwitchParams[EXTERNAL_STATES][CopyIdx] = TSW_Released; *Copy_u8PtrVal = TSW_u8SwitchParams[EXTERNAL_STATES][CopyIdx]; local_returnStatus = okay; break; default: local_returnStatus = error; break; } break; case TSW_Bouncing: DIO_u8ReadPinVal(TSW_SwitchPins[CopyIdx],&local_u8readPin); if(GetBit(TSW_MODE,CopyIdx) == ACTIVELOW){local_u8readPin = !local_u8readPin;} switch(local_u8readPin) { case TSW_HIGH: TSW_u8SwitchParams[LOW_COUNTER][CopyIdx] = 0; TSW_u8SwitchParams[HIGH_COUNTER][CopyIdx]++; local_returnStatus = okay; if ( TSW_u8SwitchParams[HIGH_COUNTER][CopyIdx] == 100){TSW_u8SwitchParams[INTERNAL_STATES][CopyIdx] = TSW_Pressed;} break; case TSW_LOW: TSW_u8SwitchParams[LOW_COUNTER][CopyIdx]++; TSW_u8SwitchParams[HIGH_COUNTER][CopyIdx] = 0; local_returnStatus = okay; if(TSW_u8SwitchParams[LOW_COUNTER][CopyIdx] == 100){TSW_u8SwitchParams[INTERNAL_STATES][CopyIdx] = TSW_Released;} break; default: local_returnStatus = error; break; } if( TSW_u8SwitchParams[HIGH_COUNTER][CopyIdx] == 100){TSW_u8SwitchParams[INTERNAL_STATES][CopyIdx] = TSW_Released;} break; case TSW_Pressed: DIO_u8ReadPinVal(TSW_PIN1,&local_u8readPin); if(GetBit(TSW_MODE,CopyIdx) == ACTIVELOW){local_u8readPin = !local_u8readPin;} switch(local_u8readPin) { case TSW_HIGH: TSW_u8SwitchParams[INTERNAL_STATES][CopyIdx] = TSW_Pressed; TSW_u8SwitchParams[EXTERNAL_STATES][CopyIdx] = TSW_Pressed; *Copy_u8PtrVal= TSW_u8SwitchParams[EXTERNAL_STATES][CopyIdx]; local_returnStatus = okay; break; case TSW_LOW: TSW_u8SwitchParams[INTERNAL_STATES][CopyIdx] = TSW_Bouncing; *Copy_u8PtrVal = TSW_u8SwitchParams[EXTERNAL_STATES][CopyIdx]; local_returnStatus = okay; break; default:local_returnStatus = error; break; } break; default:local_returnStatus = error; break; } return local_returnStatus; }
int main (void) { u8 KeyPadVal,Toggle_3=0,Toggle_2=0,Toggle_1=0,SwitchPin; DIO_VoidInit(); ExtInt_Init(); Timer_VoidInit(); ExtInt_EnableGlobalInt(); //ExtInt_voidOverFlowInt0(Toggle); ExtInt_voidSetExtInt0(Toggle); while(1) { DIO_u8ReadPinVal(DIO_u8Pin24,&SwitchPin); if(u8_DebounceSenceHigh(SwitchPin,Pressed) == Pressed) { DIO_u8WritePinVal(ExternaInterruptZeroPin,TurnOn); } else DIO_u8WritePinVal(ExternaInterruptZeroPin,TurnOff); TotalTimeInMile=Timer_u16Count1mile(); KeyPadVal=KeyPad_StructRead(); if(KeyPadVal!=KeyPad_u8NoPressed) { KeyPadVal_2=KeyPadVal; //PORTB=KeyPadVal_2 ; } else; if(TotalTimeInMile>=250) { if(Led_1==FiredInterrupt) { if(ToggleLed1==FirstPressed) { DIO_u8WritePinVal(FirstLed,Toggle_1^=1); } else DIO_u8WritePinVal(FirstLed,TurnOff); } else; if(Led_2==FiredInterrupt) { if(ToggleLed2==FirstPressed) { DIO_u8WritePinVal(SecondLed,Toggle_2^=1); } else DIO_u8WritePinVal(SecondLed,TurnOff); } else ; if(Led_3==FiredInterrupt) { if(ToggleLed3==FirstPressed) { DIO_u8WritePinVal(ThirdLed,Toggle_3^=1); } else DIO_u8WritePinVal(ThirdLed,TurnOff); } else; Timer_u16ResetCounter(); Timer_u16ResetTotalTime(); } else; } return 0; }
extern Keypad_u16Switches KEYPAD_Keypad_u16SwitchesRead(void) { u8 local_u8Switch_Current_State; u8 local_u8SwitchIdx; Keypad_u16Switches Keypad_u16State; /*Comment!: Initialize Switches as unPressed */ Keypad_u16State.KEYPAD_u16Switches = KEYPAD_u16UNPRESSED; /*Comment!: Loop over all rows*/ for (u8 Keypad_u8LoopCounter = 0; Keypad_u8LoopCounter < KEYPAD_u8NUM_ROWS; Keypad_u8LoopCounter++) { /*Comment!: make one output as pressed state and other outputs as released state */ for (u8 Keypad_u8RowsCounter = 0; Keypad_u8RowsCounter < KEYPAD_u8NUM_ROWS; Keypad_u8RowsCounter++) { if (Keypad_u8RowsCounter == Keypad_u8LoopCounter) { DIO_u8WritePinVal(Keypad_u8RowS_Array[Keypad_u8RowsCounter], KEYPAD_u8PRESSEDSTATE); } else { DIO_u8WritePinVal(Keypad_u8RowS_Array[Keypad_u8RowsCounter], !KEYPAD_u8PRESSEDSTATE); } } for (u8 Keypad_u8ColumnsCounter = 0; Keypad_u8ColumnsCounter < KEYPAD_u8NUM_COLUMNS; Keypad_u8ColumnsCounter++) { /*Comment!: Get Switch Index */ /*Comment!: Switch Index from 0~15*/ local_u8SwitchIdx = Keypad_u8ColumnsCounter + (KEYPAD_u8NUM_ROWS * Keypad_u8LoopCounter); /*Comment!: Read Switch value*/ DIO_u8ReadPinVal(Keypad_u8COLUMNS_Array[Keypad_u8ColumnsCounter], &local_u8Switch_Current_State); if (local_u8Switch_Current_State == KEYPAD_u8PRESSEDSTATE) { SET_BIT(Keypad_u16State.KEYPAD_u16Switches, local_u8SwitchIdx); } else { CLR_BIT(Keypad_u16State.KEYPAD_u16Switches, local_u8SwitchIdx); } } } return Keypad_u16State; }