打印
[匠人手记]

匠人师傅,能不能讲讲LCD和按键的程序规划

[复制链接]
3862|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kbgyzp|  楼主 | 2008-11-26 01:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   有好多的界面,每个界面又要面对不同的参数设置,有逐位设置的,有上翻下翻直接设置的,每个参数位数又可能不一样,还有的参数设置后需要保存到24CXX,有的参数设置后需要执行某个动作,有的参数设置后要调用某个初始化操作,比如改变串口波特率,或时间等;还有每个参数设置还有可能存在上限和下限...
   迄今位置还没发现在单片机中有关于KEY和LCD结合的比较好用的程序框架和结构,匠人大侠有什么高招?
   我本来规划的感觉还不错,可后来越来越发现当初的设计满足不了设置的要求,结果越写越乱,在这地方怎么做到模块化设计呢?

相关帖子

沙发
程序匠人| | 2008-11-26 08:31 | 只看该作者

方法是有的,就是状态机

象这种一键多义型键盘+LCD/LED。最佳解决方案应该就是状态机方法。建议你看看《匠人手记》中关于规划的部分。

使用特权

评论回复
板凳
kbgyzp|  楼主 | 2008-11-26 09:26 | 只看该作者

谢谢您

书在家里,今天回家一定好好研究

使用特权

评论回复
地板
kbgyzp|  楼主 | 2008-11-26 21:10 | 只看该作者

您的这个图对我很有启发,可脑子还很乱

继续拜读您的大作中。。。

使用特权

评论回复
5
程序匠人| | 2008-11-26 21:57 | 只看该作者

建议


看看 匠人手记网络版:从零开始玩转PIC 之 旋转时钟 
里面关于显示的部分,相当于一个实际例子。虽然是LED的,但和LCD是相通的。

使用特权

评论回复
6
kbgyzp|  楼主 | 2008-12-4 18:42 | 只看该作者

今天终于想通了,谢谢匠人大师!

状态机的思路真是好啊!

使用特权

评论回复
7
starlite_jason| | 2008-12-8 09:12 | 只看该作者

LZ的这种情况,还是用菜单结构比较好,

使用特权

评论回复
8
kbgyzp|  楼主 | 2008-12-18 19:02 | 只看该作者

菜单结构是用大量的Case吗?

用大量的Case在这里并不适合,楼上能细说下吗?
用状态机程序相对原来的这部分减少了60%的程序量,而且更清晰了

使用特权

评论回复
9
xwj| | 2008-12-18 19:06 | 只看该作者

不是用Case,而是用函数指针 + 状态机

使用特权

评论回复
10
avocationA| | 2008-12-29 20:59 | 只看该作者

和楼主碰到相同的问题!!

而是用函数指针 + 状态机!!!!!!1 对 状态机 还是比较迷糊

使用特权

评论回复
11
starlite_jason| | 2009-1-5 11:43 | 只看该作者

当然不是用CASE

如XWJ所说,主要应用函数指针,举个例子:
typedef struct {
    BYTE CurrentItem;
    BYTE PrevItem;
    BYTE NextItem;
    BYTE FatherItem;
    BYTE ChildItem;
    void (*DisplayOperate)(void);    
    void (*LeftOperate)(void);
    void (*RightOperate)(void);
    void (*UpOperate)(void);
    void (*DownOperate)(void);
    void (*EnterOperate)(void);
}MENULIST;
根据这个结构体,建立一个大的菜单数组,那么你的所有操作,显示,都变的很清晰

使用特权

评论回复
12
baiyunfei.k.f| | 2011-12-4 16:56 | 只看该作者
:victory:

使用特权

评论回复
13
雁舞白沙| | 2012-2-28 09:14 | 只看该作者
定义显示数组

判断数组位置

提取执行数组

结果判断数组

使用特权

评论回复
14
gool| | 2012-3-8 14:42 | 只看该作者
学习中

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

473

帖子

1

粉丝