找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2318|回复: 3
收起左侧

STM32 ILI9325 TFT驱动代码 多级菜单程序

  [复制链接]
ID:302293 发表于 2022-5-10 15:13 | 显示全部楼层 |阅读模式
  ILI9325驱动代码,可以测试

单片机源程序如下:
  1. /******************** STM32模板 ***************************
  2. * 文 件 名                : main.c
  3. * 作        者           : 伟哥
  4. * 创建日期          : 2012.8.3
  5. * 描        述                : 主文件
  6. * 版        本                : V1.0
  7. * 历史记录          : 暂无
  8. ***********************************************************/
  9. /*--------------------------- 头文件包含 --------------------------------------*/
  10. /********************************************************************************

  11.              A_Item1                                           A_Item2
  12.            /         \                                                          /                \
  13.         B_Item1       B_Item2(B1Item)                        B_Item3       B_Item4(B2Item)
  14.         /    \                          |                                   /      \              |
  15. C_Item1 C_Item2          C_Item3                                 C_Item4   C_Item5    C_Item6
  16.   (C1_Item)                 (C2_Item)                               (C3_Item)            (C4_Item)

  17. ********************************************************************************/
  18. #include "systeminit.h"

  19. int main(void)
  20. {
  21.         
  22.         SystemInit();                                        //配置系统主频为72MHz
  23.         ILI9325_Init();                                        //彩屏初始化
  24.         ILI9325_Clear(WHITE);                         //将屏刷为白色
  25.         ConfigExtInterrupt();                        //配置中断
  26.         ConfigKeyPort();                                //配置按键端口
  27.         
  28.            DispCrtMenu(A_Item);                        //显示初级菜单

  29.         while(1)                                                   
  30.         {
  31.                 DelayMs(2000);                                //--演示效果
  32.         }
  33. }
复制代码
  1. #include "menu.h"
  2. /**********************************************
  3. struct MenuItem
  4. {
  5.         char MenuDpth;                                         //当前菜单深度
  6.         unsigned char *str;                                  //菜单字符串数组
  7.         unsigned int x;                                         //字符串显示的X轴坐标
  8.         unsigned int y;                                         //字符串显示的Y轴坐标
  9.         char  MenuCount;                                 //当前菜单索引数目
  10.         char  MenuIdex;                                         //当前菜单索引
  11.         void(*Subs)();                                     //菜单确定时需要执行的功能的函数指针(可以为空)
  12.         void(*Back)();                                         //菜单返回时需要执行的功能的函数指针(可以为空)
  13. //        void(*Run)();                                         //在菜单的某层一直要运行的函数指针
  14.         struct MenuItem *ChildrenMenus;  //孩子指针(表明选择该菜单项后,跳转到哪个子菜单去)
  15.         struct MenuItem *ParentMenus;    //父指针(表明选择返回后,跳转到哪个菜单去)
  16. };
  17. **********************************************/
  18. /*全局变量声明*/
  19. char ListCount = 1;
  20. char br;

  21. struct MenuItem A_Item[] =
  22. {
  23.         {1,"A_Item1",10,20,2,1,Go_MenuB1,NULL,B1_Item,NULL},
  24.         {1,"A_Item2",10,60,2,1,Go_MenuB2,NULL,B2_Item,NULL}
  25. };

  26. struct MenuItem B1_Item[] =
  27. {
  28.         {2,"B_Item1",10,20,2,1,Go_MenuC1,Go_MenuA,C1_Item,A_Item},
  29.         {2,"B_Item2",10,60,2,1,Go_MenuC2,Go_MenuA,C2_Item,A_Item}
  30. };

  31. struct MenuItem B2_Item[] =
  32. {
  33.         {2,"B_Item3",10,20,2,1,Go_MenuC3,Go_MenuA,C3_Item,A_Item},
  34.         {2,"B_Item4",10,60,2,1,Go_MenuC4,Go_MenuA,C4_Item,A_Item}
  35. };


  36. struct MenuItem C1_Item[] =
  37. {
  38.         {3,"C_Item1",10,20,2,1,NULL,Go_MenuB1,NULL,B1_Item},
  39.         {3,"c_Item2",10,60,2,1,NULL,Go_MenuB1,NULL,B1_Item}

  40. };

  41. struct MenuItem C2_Item[] =
  42. {

  43.         { 3,"C_Item3",10,20,1,1,NULL,Go_MenuB1,NULL,B1_Item}

  44. };

  45. struct MenuItem C3_Item[] =
  46. {
  47.         { 3,"C_Item4",10,20,2,1,NULL,Go_MenuB2,NULL,B2_Item},
  48.         { 3,"C_Item5",10,60,2,1,NULL,Go_MenuB2,NULL,B2_Item}
  49. };

  50. struct MenuItem C4_Item[] =
  51. {
  52.         { 3,"C_Item6",10,20,1,1,NULL,Go_MenuB2,NULL,B2_Item}
  53. };


  54. void Go_MenuA(void)
  55. {
  56.         LCD_DispStr(A_Item[0].str,A_Item[0].x,A_Item[0].y,LARGE,BLACK,WHITE);        
  57.         LCD_DispStr(A_Item[1].str,A_Item[1].x,A_Item[1].y,LARGE,BLACK,WHITE);

  58. }

  59. void Go_MenuB1(void)
  60. {
  61.         LCD_DispStr(B1_Item[0].str,B1_Item[0].x,B1_Item[0].y,LARGE,BLACK,WHITE);        
  62.         LCD_DispStr(B1_Item[1].str,B1_Item[1].x,B1_Item[1].y,LARGE,BLACK,WHITE);
  63. }

  64. void Go_MenuB2(void)
  65. {
  66.         LCD_DispStr(B2_Item[0].str,B2_Item[0].x,B2_Item[0].y,LARGE,BLACK,WHITE);        
  67.         LCD_DispStr(B2_Item[1].str,B2_Item[1].x,B2_Item[1].y,LARGE,BLACK,WHITE);
  68. }

  69. void Go_MenuC1(void)
  70. {
  71.         LCD_DispStr(C1_Item[0].str,C1_Item[0].x,C1_Item[0].y,LARGE,BLACK,WHITE);        
  72.         LCD_DispStr(C1_Item[1].str,C1_Item[1].x,C1_Item[1].y,LARGE,BLACK,WHITE);
  73. }

  74. void Go_MenuC2(void)
  75. {
  76.         
  77.         LCD_DispStr(C2_Item[0].str,C2_Item[0].x,C2_Item[0].y,LARGE,BLACK,WHITE);        

  78. }

  79. void Go_MenuC3(void)
  80. {
  81.         
  82.         LCD_DispStr(C3_Item[0].str,C3_Item[0].x,C3_Item[0].y,LARGE,BLACK,WHITE);        
  83.         LCD_DispStr(C3_Item[1].str,C3_Item[1].x,C3_Item[1].y,LARGE,BLACK,WHITE);

  84. }

  85. void Go_MenuC4(void)
  86. {
  87.         LCD_DispStr(C4_Item[0].str,C4_Item[0].x,C4_Item[0].y,LARGE,BLACK,WHITE);
  88. }


  89. //显示当前菜单函数
  90. void DispCrtMenu(struct MenuItem* menu)           //传递的是结构体指针
  91. {
  92.     char i;
  93.         unsigned int color = WHITE;                                //color初始化为白色

  94.         br = (*menu).MenuCount;

  95.         (*menu).MenuIndex = ListCount;

  96.         ClearScreen(WHITE);                                                //将屏刷为白色

  97.         LCD_Fill_Rect(0, 12 + 32*((*menu).MenuIndex-1), 239, 44+32*((*menu).MenuIndex-1), BLUE);
  98.         
  99.         for(i=0;i<br;i++)                                                //显示出所有菜单
  100.         {
  101.                 if((*menu).MenuIndex == i+1)
  102.                 {
  103.                         
  104.                         color = BLUE;                                        //颜色变为蓝色
  105.                 }

  106.                 LCD_DispStr((*(menu+i)).str,10,20+32*i,LARGE,BLACK,color);
  107.                 color = WHITE;

  108.         }
  109.                
  110. }
复制代码

Keil代码下载,仅供参考:
多级菜单.7z (434.05 KB, 下载次数: 89)

评分

参与人数 1黑币 +40 收起 理由
admin + 40 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:82944 发表于 2022-7-20 20:14 | 显示全部楼层
感谢楼主,正愁控制不知道怎么去做
回复

使用道具 举报

ID:250090 发表于 2022-11-4 13:46 | 显示全部楼层

感谢楼主,正愁控制不知道怎么去做
回复

使用道具 举报

ID:77589 发表于 2022-12-6 11:13 | 显示全部楼层
还可以,继续
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表