查看: 3223|回复: 7

[经验] Cookie实现的菜单系统

  [复制链接]
  • TA的每日心情
    郁闷
    21 小时前
  • 签到天数: 1599 天

    连续签到: 22 天

    [LV.Master]伴坛终老

    发表于 2013-3-28 18:22:41 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 nemon 于 2013-3-27 19:49 编辑


    最近 这几天利用一点时间在Cookie上做了个菜单系统的框架,用的东西很常见——12864,然后拿几个电阻串起来,在cookie的一个模拟口上弄了4个按键。先看效果吧:

    做这个的过程做了3件事:
    一是修改、补充了u1701的库。u1701的库在http://www.coocox.org/driver_comp/uc1701-single-lcd-controller-driver-c636.html?mc=4&sc=48,用它驱动12864时注意到左边总是少2列像素,后来看驱动代码,把所有的129都改成了127,解决了这个问题。另外,菜单需要用反显的方式表示获得焦点,而u1701库中只有反显1个字符的函数,因此补充了UC1701InverseDispalyStr用于在指定行列显示一串反显字符,定义如下:

    1. void UC1701InverseDispalyStr
    2. (
    3. unsigned char ucLine,
    4. unsigned char ucRow,
    5. char *pcChar
    6. )
    复制代码
    第二是用1个模拟口来实现4个按键。这个做了个驱动,这样大家都可以用了,地址在http://www.coocox.org/driver_comp/analogbuttons-c684.html?mc=1&sc=8。注意头文件里定义的analogButtons_Resistances_Number、analogButtons_Resistances_Array分别是电阻个数和电阻值的数组,用法和算法原理见下图:

    用的时候先用analogButtonsInit初始化模拟口,然后把前边提到的2个参数喂给函数analogButtonsGetPressedIndex(unsigned int resistances_amount,unsigned int *resistances),就可以取到按下的按键的序号了,注意没有按键按下的话,返回-1。

    第三就是做字符菜单的控制,在这里:http://www.coocox.org/driver_comp/charmenu-c685.html?mc=4&sc=24。核心是头文件里的定义,基本能做到代码自明,就不多说了。用法也简单——先准备好存菜单的空间、菜单的结构变量、以及自定义的处理函数:
    1. struct stCosnoleMenu st_CosnoleMenu_buff[13];

    2. struct stCosnoleMenuRoot stMenu;

    3. void show_current_menu(struct stCosnoleMenuRoot *stRt);
    4. void my_command_event(struct stCosnoleMenuRoot *stRt,unsigned int ui_ID);
    5. void my_submenu_event(struct stCosnoleMenuRoot *stRt,unsigned int ui_ID);
    6. void my_selected_event(struct stCosnoleMenuRoot *stRt,unsigned int ui_ID);
    复制代码
    然后初始化:
    1. Cosnole_Menu_Init(&stMenu,st_CosnoleMenu_buff,"back up",my_selected_event,my_command_event,my_submenu_event);//root,id=0
    复制代码
    再用这个形式向里面添上菜单项:
    1. iCnt=Cosnole_Add_A_Menu(&stMenu,0,0x8,"the 1st menu",MENU_TYPE_COMMAND,MENU_CHECK_TRUE,'1');//1
    复制代码
    在按下按钮的时候调用对应的菜单函数:
    1. switch(n){
    2.             case -1:
    3.                     //do nothing
    4.                     break;
    5.             case 0:
    6.                     break;
    7.             case 1:
    8.                     //key 1
    9.                     Cosnole_MenuScorllDown(&stMenu);
    10.                     show_current_menu(&stMenu);
    11.                     break;
    12.             case 2:
    13.                     //key 2
    14.                     Cosnole_MenuScorllUp(&stMenu);
    15.                     show_current_menu(&stMenu);
    16.                     break;
    17.             case 3:
    18.                     //key 3
    19.                     Cosnole_MenuOnSelected_by_Focus(&stMenu);
    20.                     show_current_menu(&stMenu);
    21.                     break;
    22.             case 4:
    23.                     //key 4
    24.                     Cosnole_MenuBackUp(&stMenu);
    25.                     show_current_menu(&stMenu);
    26.                     break;
    27.             default:
    28.                     //do nothing
    29.                     break;
    30.             }
    复制代码
    最后,再补充个福利,为了能比较直观的做好点阵的数组,写了个头文件,不过由于是集成在例子里面的,所以需要安装CoIDE之后,选中了前文提到的3个组件后,在example里才能看到。



    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-1-19 22:39
  • 签到天数: 303 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-3-28 22:17:57 | 显示全部楼层
    学习参考了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-8-15 09:30
  • 签到天数: 162 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-4-17 09:09:41 | 显示全部楼层
    nemon大神涉及面真广,学习!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-5-20 10:01
  • 签到天数: 41 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-4-27 14:01:19 | 显示全部楼层
    学习学习,CooCox用的舒服不?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-5-3 09:01:22 | 显示全部楼层
    向nemon大神学习!!!顶一个~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-7-28 09:42
  • 签到天数: 292 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-8-19 09:46:19 | 显示全部楼层
    不错                 顶了 嘿嘿不错                 顶了 嘿嘿
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-2-12 10:49
  • 签到天数: 150 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-9-17 09:10:45 | 显示全部楼层
    就喜欢原创的内容,总是怀着敬佩之情看文章,楼主威武!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-11-7 15:28:12 | 显示全部楼层
    就看看,不说话。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-3-28 21:41 , Processed in 0.185224 second(s), 30 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.