单片机
返回首页

为OLED屏增加GUI支持4:文本框控件

2016-12-18 来源:eefocus

环境:

主机:WIN10

开发环境:MDK5.13

MCU:STM32F103


说明:

本文定义了文本框控件。在gui中增加了字库支持后,就可以用文本框来显示字符。



源代码:

gui_widget_text.h


  1. /** 

  2. * Copyright (c), 2015-2025 

  3. * @file gui_widget_text.h 

  4. * @brief 文本控件头文件 

  5. * @author jdh 

  6. * @date 2015/9/8 

  7. */  

  8.   

  9. #ifndef _GUI_WIDGET_TEXT_H_  

  10. #define _GUI_WIDGET_TEXT_H_  

  11.   

  12. /********************************************************************* 

  13. *                           头文件 

  14. **********************************************************************/  

  15.   

  16. #include 'gui_interface.h'  

  17.   

  18. /********************************************************************* 

  19. *                           宏定义 

  20. **********************************************************************/  

  21.   

  22. /** 

  23. * @brief 文本长度.单位:字节 

  24. */  

  25.   

  26. #define LEN_WIDGET_TEXT             32  

  27.   

  28. /********************************************************************* 

  29. *                           数据结构 

  30. **********************************************************************/  

  31.   

  32. /** 

  33. * @brief 文本框数据结构 

  34. */  

  35.   

  36. typedef struct _Widget_Text  

  37. {  

  38.     //x轴位置  

  39.     uint16_t x;  

  40.     //y轴位置  

  41.     uint16_t y;  

  42.     //水平尺寸  

  43.     uint16_t xsize;  

  44.     //垂直尺寸  

  45.     uint16_t ysize;  

  46.     //字体  

  47.     uint8_t font;  

  48.     //文本  

  49.     char s[LEN_WIDGET_TEXT];  

  50. }*Widget_Text_Handle;  

  51.   

  52. /********************************************************************* 

  53. *                           函数 

  54. **********************************************************************/  

  55.   

  56. /** 

  57. * @brief 创建控件text 

  58. * @param x:左上角x坐标 

  59. * @param y:左上角y坐标 

  60. * @param xsize:水平尺寸 

  61. * @param ysize:垂直尺寸 

  62. * @param font:字体 

  63. * @param s:文本 

  64. * @retval 控件句柄 

  65. */  

  66.   

  67. Widget_Text_Handle gui_widget_text_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize,uint8_t font,char *s);  

  68.   

  69. /** 

  70. * @brief 设置文本 

  71. * @param s:文本 

  72. */  

  73.   

  74. void gui_widget_text_set_text(Widget_Text_Handle handle,uint8_t font,char *s);  

  75.   

  76. #endif  



gui_widget_text.c


  1. /** 

  2. * Copyright (c), 2015-2025 

  3. * @file gui_widget_text.c 

  4. * @brief 文本控件主文件 

  5. * @author jdh 

  6. * @date 2015/9/8 

  7. */  

  8.   

  9. /********************************************************************* 

  10. *                           头文件 

  11. **********************************************************************/  

  12.   

  13. #include 'gui_widget_text.h'  

  14. #include 'gui_2d_lib.h'  

  15. #include 'gui_text_lib.h'  

  16. #include 'stdlib.h'  

  17. #include 'string.h'  

  18.   

  19. /********************************************************************* 

  20. *                           静态函数 

  21. **********************************************************************/  

  22.   

  23. /** 

  24. * @brief 控件显示 

  25. * @param handle:控件句柄 

  26. */  

  27.   

  28. static void show(Widget_Text_Handle handle);  

  29.   

  30. /********************************************************************* 

  31. *                           函数 

  32. **********************************************************************/  

  33.   

  34. /** 

  35. * @brief 创建控件text 

  36. * @param x:左上角x坐标 

  37. * @param y:左上角y坐标 

  38. * @param xsize:水平尺寸 

  39. * @param ysize:垂直尺寸 

  40. * @param font:字体 

  41. * @param s:文本 

  42. * @retval 控件句柄 

  43. */  

  44.   

  45. Widget_Text_Handle gui_widget_text_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize,uint8_t font,char *s)  

  46. {  

  47.     Widget_Text_Handle handle;  

  48.       

  49.     //控件初始化  

  50.     handle = malloc(sizeof(*handle));  

  51.     handle->x = x;  

  52.     handle->y = y;  

  53.     handle->xsize = xsize;  

  54.     handle->ysize = ysize;  

  55.     handle->font = font;  

  56.     strcpy(handle->s,s);  

  57.       

  58.     //显示  

  59.     show(handle);  

  60.       

  61.     return handle;  

  62. }  

  63.   

  64. /** 

  65. * @brief 设置文本 

  66. * @param s:文本 

  67. */  

  68.   

  69. void gui_widget_text_set_text(Widget_Text_Handle handle,uint8_t font,char *s)  

  70. {  

  71.     handle->font = font;  

  72.     strcpy(handle->s,s);  

  73.       

  74.     //显示  

  75.     show(handle);  

  76. }  

  77.   

  78. /** 

  79. * @brief 控件显示 

  80. * @param handle:控件句柄 

  81. */  

  82.   

  83. static void show(Widget_Text_Handle handle)  

  84. {  

  85.     //清除区域  

  86.     gui_fill_rect(handle->x,handle->y,handle->x + handle->xsize,handle->y + handle->ysize,0);  

  87.     //显示  

  88.     gui_disp_string_at(handle->x,handle->y,handle->font,handle->s);  

  89. }  



使用示例:


  1. Widget_Text_Handle Widget_Text_State;  

  2. Widget_Text_State = gui_widget_text_create(93,40,30,20,GB18030_20X20,'正常');  



进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章