[Źródło: https://icons.com/icon/40670/c-programming]
Za przykład wykorzystam tutaj bibliotekę do obsługi wyświetlacza TFT sterowanego przez UART.
Poniżej lista przygotowanych funkcji dla wyświetlacza:
Dla tych funkcji można przygotować strukturę przechowującą wskaźniki do każdej z tych funkcji:
Teraz jej inicjalizacja podanymi wcześniej funkcjami:
Aby wywołać poszczególne funkcje należy podać nazwę struktury następnie wskaźnik do funkcji oraz parametry:
Program:
Poniżej lista przygotowanych funkcji dla wyświetlacza:
- void M7Axa_PrintString(const char * str, FontSize_TypeDef fontSize, uint16_t posX, uint16_t posY,
- uint16_t textColor);
- void M7Axa_PrintStringWithBg(const char * str, uint16_t len, FontSize_TypeDef fontSize,
- uint16_t posX, uint16_t posY, uint16_t textColor, uint16_t bgColor);
- void M7Axa_Disp_DrawCircle(uint16_t Xa, uint16_t Ya, uint16_t R, uint16_t Color);
- void M7Axa_Disp_FillInColor(uint16_t Xa, uint16_t Ya, uint16_t Xe, uint16_t Ye, uint16_t Color);
- uint8_t M7Axa_ClearScreen(uint16_t bgColor);
- void M7Axa_CutPicture(uint16_t Pn, uint16_t Xa, uint16_t Ya, uint16_t Xb, uint16_t Yb, uint16_t Xs, uint16_t Ys);
- void M7Axa_DrawDot(uint16_t Xa, uint16_t Ya, uint16_t Color);
- void M7Axa_DrawLine(uint16_t Xa, uint16_t Ya, uint16_t Xe, uint16_t Ye, uint16_t Color);
- void M7Axa_BacklightControl(uint8_t onOffState);
- uint8_t M7Axa_LoadPicById(uint16_t Pn, uint16_t Xa, uint16_t Ya);
- void M7Axa_LoadPicture(char * path, uint16_t posX, uint16_t posY);
- void M7Axa_DrawRactangle(uint16_t Xa, uint16_t Ya, uint16_t Xb, uint16_t Yb, uint16_t Color);
- void M7Axa_GetScreenSize();
- void M7Axa_DisplayAlphabeticString(uint16_t Xa, uint16_t Ya, uint16_t Color, const char * str);
- uint8_t M7Axa_BuzzerControl(uint16_t Tb, uint16_t Fb);
- TPCoords_Typedef getTouchPadData(uint8_t * recBuffer, uint16_t bufferSize);
Dla tych funkcji można przygotować strukturę przechowującą wskaźniki do każdej z tych funkcji:
- typedef struct{
- void (*PrintString)(const char * str, FontSize_TypeDef fontSize, uint16_t posX, uint16_t posY, uint16_t textColor);
- void (*PrintStringWithBg)(const char * str, uint16_t len, FontSize_TypeDef fontSize, uint16_t posX, uint16_t posY, uint16_t textColor,uint16_t bgColor);
- void (*Disp_DrawCircle)(uint16_t Xa, uint16_t Ya, uint16_t R, uint16_t Color);
- void (*Disp_FillInColor)(uint16_t Xa, uint16_t Ya, uint16_t Xe, uint16_t Ye, uint16_t Color);
- uint8_t (*ClearScreen)(uint16_t bgColor);
- void (*CutPicture)(uint16_t Pn, uint16_t Xa, uint16_t Ya, uint16_t Xb, uint16_t Yb, uint16_t Xs, uint16_t Ys);
- void (*DrawDot)(uint16_t Xa, uint16_t Ya, uint16_t Color);
- void (*DrawLine)(uint16_t Xa, uint16_t Ya, uint16_t Xe, uint16_t Ye, uint16_t Color);
- void (*BacklightControl)(uint8_t onOffState);
- uint8_t (*LoadPicById)(uint16_t Pn, uint16_t Xa, uint16_t Ya);
- void (*LoadPicture)(char * path, uint16_t posX, uint16_t posY);
- void (*DrawRactangle)(uint16_t Xa, uint16_t Ya, uint16_t Xb, uint16_t Yb, uint16_t Color);
- void (*GetScreenSize)();
- void (*DisplayAlphabeticString)(uint16_t Xa, uint16_t Ya, uint16_t Color, const char * str);
- uint8_t (*BuzzerControl)(uint16_t Tb, uint16_t Fb);
- TPCoords_Typedef (*getTouchPadData)(uint8_t * recBuffer, uint16_t bufferSize);
- }TFT_Display_TypedefStruct;
Teraz jej inicjalizacja podanymi wcześniej funkcjami:
- TFT_Display_TypedefStruct TFT_Display = {
- M7Axa_PrintString,
- M7Axa_PrintStringWithBg,
- M7Axa_Disp_DrawCircle,
- M7Axa_Disp_FillInColor,
- M7Axa_ClearScreen,
- M7Axa_CutPicture,
- M7Axa_DrawDot,
- M7Axa_DrawLine,
- M7Axa_BacklightControl,
- M7Axa_LoadPicById,
- M7Axa_LoadPicture,
- M7Axa_DrawRactangle,
- M7Axa_GetScreenSize,
- M7Axa_DisplayAlphabeticString,
- M7Axa_BuzzerControl,
- getTouchPadData
- };
Aby wywołać poszczególne funkcje należy podać nazwę struktury następnie wskaźnik do funkcji oraz parametry:
- TFT_Display.PrintStringWithBg(msg, sizeof(msg), FontSize_48, 40, 20, 0xFFFF, 0x0000);