OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10158|回复: 17

TFTLCD显示菜单问题

[复制链接]

71

主题

183

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2013-1-29
在线时间
1 小时
发表于 2013-4-23 10:34:26 | 显示全部楼层 |阅读模式
我现在用TFTLCD显示一个菜单 通过按键控制菜单选项(被选中的项反白显示)  按键按一下 则选中菜单下一项 (也就是对应菜单下一行反白) 
现在 通过下面的方法实现了 不过我感觉这样写程序太过冗长 请问高手有没有什么好的解决方案:
/*******显示程序如下**********/
 switch(Key1_Value)
 { case 1: //第一次按下按键
  {  BackColor=BLUE;  //字体的背景颜色
   LCD_Show_Word32(0,10+47,"通道参数设置",6);  //背景延时为蓝色
    BackColor=GREEN;
   LCD_Show_Word32(0,10+47*2,"记录参数设置",6); //其他选项背景颜色正常(为绿色)
   LCD_Show_Word32(0,10+47*3,"日期时间设置",6); 
   LCD_Show_Word32(0,10+47*4,"基本参数设置",6);
   LCD_Show_Word32(255,10+47*4,"退出",2);
  }break;
  case 2:   //第二次按下按键
  { LCD_Show_Word32(0,10+47,"通道参数设置",6);   //第一行恢复正常
   BackColor=BLUE;
   LCD_Show_Word32(0,10+47*2,"记录参数设置",6);  //第二行背影颜色为蓝色
   BackColor=GREEN;
   LCD_Show_Word32(0,10+47*3,"日期时间设置",6); 
   LCD_Show_Word32(0,10+47*4,"基本参数设置",6);
   LCD_Show_Word32(255,10+47*4,"退出",2);
  }break;
  case 3:
  {   LCD_Show_Word32(0,10+47,"通道参数设置",6);
   LCD_Show_Word32(0,10+47*2,"记录参数设置",6);
   BackColor=BLUE;
   LCD_Show_Word32(0,10+47*3,"日期时间设置",6);//第三行背景延时是蓝色 
   BackColor=GREEN; 
   LCD_Show_Word32(0,10+47*4,"基本参数设置",6);
   LCD_Show_Word32(255,10+47*4,"退出",2);
  }
  break;
  case 4:
  {  LCD_Show_Word32(0,10+47,"通道参数设置",6);
   LCD_Show_Word32(0,10+47*2,"记录参数设置",6);
   LCD_Show_Word32(0,10+47*3,"日期时间设置",6);
   BackColor=BLUE;  
   LCD_Show_Word32(0,10+47*4,"基本参数设置",6);
   BackColor=GREEN;
   LCD_Show_Word32(255,10+47*4,"退出",2);
  }break;
  case 5:
  { LCD_Show_Word32(0,10+47,"通道参数设置",6);
   LCD_Show_Word32(0,10+47*2,"记录参数设置",6);
   LCD_Show_Word32(0,10+47*3,"日期时间设置",6); 
   LCD_Show_Word32(0,10+47*4,"基本参数设置",6);
   BackColor=BLUE;
   LCD_Show_Word32(255,10+47*4,"退出",2);
   BackColor=GREEN;
  }break;
  default :break; 


这个程序可以实现我想要的功能 但是程序太过繁琐 请高手指点指点 有没有什么方法能让程序变的简洁点
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2015-1-29 13:57:16 | 显示全部楼层
楼主辛苦了。谢谢分享,做菜单不用GUI吗?
回复 支持 1 反对 0

使用道具 举报

2

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-3-14
在线时间
0 小时
发表于 2013-4-23 11:36:06 | 显示全部楼层
将LCD_Show_Word32 函数添加一个参数  表示正显或反显,将一屏幕要显示数据封装进一个刷页函数, 每次只需要调用该函数(包含反显行参数),即可实现代码简化, 要更改菜单也容易实现
回复 支持 反对

使用道具 举报

2

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-3-14
在线时间
0 小时
发表于 2013-4-23 11:36:47 | 显示全部楼层
将LCD_Show_Word32 函数添加一个参数  表示正显或反显,将一屏幕要显示数据封装进一个刷页函数, 每次只需要调用该函数(包含反显行参数),即可实现代码简化, 要更改菜单也容易修改
回复 支持 反对

使用道具 举报

71

主题

183

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2013-1-29
在线时间
1 小时
 楼主| 发表于 2013-4-23 16:29:57 | 显示全部楼层
回复【3楼】SevenFly:
---------------------------------
非常感谢 我按照你的方法试验 成功了 代码量减小了不少.
回复 支持 反对

使用道具 举报

2

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-3-14
在线时间
0 小时
发表于 2013-4-23 16:51:40 | 显示全部楼层
回复【4楼】langwanglx:
---------------------------------
呵呵。。。  共同学习!
回复 支持 反对

使用道具 举报

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2013-4-9
在线时间
0 小时
发表于 2013-5-8 20:19:08 | 显示全部楼层
回复【楼主位】langwanglx:
---------------------------------
LCD_Show_Word32这个函数在哪里,,最近也在研究这个功能
回复 支持 反对

使用道具 举报

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2013-4-9
在线时间
0 小时
发表于 2013-5-9 14:43:23 | 显示全部楼层
回复【3楼】SevenFly:
---------------------------------
请问下,, LCD_Show_Word32这个函数在哪里,,我最近在研究TFTLCD菜单显示的问题,,卡在这边
回复 支持 反对

使用道具 举报

71

主题

183

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2013-1-29
在线时间
1 小时
 楼主| 发表于 2013-5-9 16:33:28 | 显示全部楼层
回复【7楼】Lsoxi2013:
---------------------------------兄弟 这个函数是我自己写啊...
回复 支持 反对

使用道具 举报

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2013-4-9
在线时间
0 小时
发表于 2013-5-9 17:18:51 | 显示全部楼层
回复【8楼】langwanglx:
---------------------------------
能不能发给我看看,,我也刚开始学习,,
回复 支持 反对

使用道具 举报

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2013-4-9
在线时间
0 小时
发表于 2013-5-9 17:20:44 | 显示全部楼层
回复【8楼】langwanglx:
---------------------------------
贴上来看看,,或者发我邮箱也可以181361175@qq.com
回复 支持 反对

使用道具 举报

71

主题

183

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2013-1-29
在线时间
1 小时
 楼主| 发表于 2013-5-10 08:35:21 | 显示全部楼层
void LCD_Show_Word32(u16 x, u16 y,u8 *p,u8 Len,u8 BK)
{ u16 temp;
    u8 i=0,j=0;
Width=32; High=32;    //被显示汉字的高度和宽度
for(i=0;i<Len;i++,p=p+2)
{ temp=*p;
temp><<=8;
temp|=*(p+1);
for(j=0;j<LENGTH(hzIndex);j++)
{
if(temp==hzIndex[j])  
{ /*显示汉字  break;*/
Ptr=DotTbl32[j];  //指向二维数组某一维的首地址  汉字字模数组
LCD_ShowChar(x,y,BK);
x+=32;
if(x>287)
{ y+=32;
}
break;
}
}
}
}


void LCD_ShowChar(u16 x, u16 y,u8 BK)
{  
 u8 pos=0,temp=0,t=0;
 /**********************   
 这四句 只是用于限定区域 并不决定其扫描方向
 满足如下条件 R80<R81-4  R82><R83
 具体看ili9320Datasheet R50-R53寄存器描述
 **************************/
 if((BK)&&(Ptr!=DotTbl32[84]))  //空格的背光是GREEN 特殊  背光标志
 BackColor=BLUE;
 else
 BackColor=GREEN;
 LCD_WriteReg(0x03,0x1018);
 LCD_WriteReg(R80,y);   
     LCD_WriteReg(R81,y+High-1);
 LCD_WriteReg(R82,319-x-Width+1);  
 LCD_WriteReg(R83,319-x);
     LCD_SetCourse(x,y);
 LCD_WriteRAM_Prepare();
 for(pos=0;pos<((Width*High)/8);pos++)
 {  
 temp=*(Ptr+pos); //在上一个函数Ptr已经指向该行的首地址
 for(t=0;t<8;t++)
 {  if(temp&0x80)
 LCD_WriteRAM(PointColor);
 else
 LCD_WriteRAM(BackColor);
       temp><<=1;
 }
 }
 LCD_WriteReg(R80,0); //这个区域 限定了LCD清屏区域 
 LCD_WriteReg(R81,239); //没有这个区域的限定 那么LCD凊屏时不能只丢数据
 LCD_WriteReg(R82,0);  //要先确定坐标 在丢数据 这样做MCU会很累!!
 LCD_WriteReg(R83,319);
 BackColor=GREEN;       
}
回复 支持 反对

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2014-5-28 14:08:56 | 显示全部楼层
回复【5楼】SevenFly:
---------------------------------
能分享一个你写的TFTLCD菜单工程吗?mini板的,学习学习呀
合肥-文盲
回复 支持 反对

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2014-6-24 14:13:48 | 显示全部楼层
楼主分享一下做菜单的经验呀
合肥-文盲
回复 支持 反对

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2016-3-22
在线时间
23 小时
发表于 2016-4-28 14:55:11 | 显示全部楼层
langwanglx 发表于 2013-4-23 16:29
回复【3楼】SevenFly:
---------------------------------
非常感谢&nbsp;我按照你的方法试验&nbsp;成功了& ...

你好:你用彩屏的多级菜单实现了吗
回复 支持 反对

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-7-15
在线时间
2 小时
发表于 2017-4-6 17:18:09 | 显示全部楼层
本帖最后由 efei789 于 2017-4-6 17:21 编辑

我也很想知道做多级菜单用不用gui或别的实时系统
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2016-10-27
在线时间
46 小时
发表于 2020-4-14 20:09:23 | 显示全部楼层
学习中,谢谢楼主
回复 支持 反对

使用道具 举报

3

主题

52

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2020-2-10
在线时间
48 小时
发表于 2020-4-26 10:13:18 | 显示全部楼层
受用!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 04:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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