打印

单片机做LED菜单

[复制链接]
9487|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
有三个按键,SET,UP,DOWN.第一次按SET键进入主菜单,显示TH_N,然后可以按UP或DOWN键选择子菜单,按一次UP,TH_N加一,按一次DOWN键TH_N减一,
TH_N=1(通过按SET键进入)进入第1级子菜单,第1级子菜单又有13个子子菜单(通过判断SET键的按键次数决定进入第几个子子菜单),每个子子菜单又需要通过UP或DOWN键调参数,参数从负数到9999不等;
TH_N=2进入第2级子菜单(通过按SET键进入),第2级子菜单又有5个子子菜单(通过判断SET键的按键次数决定进入第几个子子菜单),每个子子菜单又需要通过UP或DOWN键调参数,参数从负数到9999不等;
TH_N=3进入第3级子菜单(通过按SET键进入),第3级子菜单又有3个子子菜单(通过判断SET键的按键次数决定进入第几个子子菜单),每个子子菜单又需要通过UP或DOWN键调参数,参数从负数到9999不等;
TH_N=19进入第4级子菜单(通过按SET键进入),第4级子菜单又有1个子子菜单(通过判断SET键的按键次数决定进入第几个子子菜单),每个子子菜单又需要通过UP或DOWN键调参数,参数从负数到9999不等;
TH_N=9进入第5级子菜单(通过按SET键进入),第5级子菜单又有7个子子菜单(通过判断SET键的按键次数决定进入第几个子子菜单),每个子子菜单又需要通过UP或DOWN键调参数,参数从负数到9999不等;
LED是双窗的,上窗四个,下窗四个。段选P0口,位选由P2口低三位经三八译码器选通。
请问一下用C语言,如何编写程序比较简洁?我想写一个通用的程序,以后情况变了只需稍作改动就能用。显示部分该怎么写比较好,字母和数字混在一起,能不能做个通用的显示子函数?参数的调校范围不一,能不能也写一个通用子函数?该怎么写。我是新手,今年刚毕业,请尽量说得详细一点,如果有类似功能的程序,请上传一下,我拜读一下,谢谢了!!请各位大虾多多指教!!

相关帖子

沙发
ljolove| | 2010-1-14 11:00 | 只看该作者
个人感觉这3个按键可以分为SET UP ENTER,这样设计起来比较方便,逻辑也比较清楚,不过要是就要求这样的话那也没办法了,最近刚做了一个LED的菜单,给你说说大概思路吧,在主程序里进行扫描按键和判断主机状态两件事,扫描按键可以使用状态机处理,判断哪个按键按下以后然后进入到按键处理函数,然后主程序里进行判断主机状态,如果是第一个状态你需要做什么事,一般就是在这里送显示或者进行一些条件判断,SET键来改变主机的状态,不过像你这个可能还比较麻烦,因为set键还有ENTER键的功能,所以你需要设置一个变量来判断现在在第几级菜单,大概就是这样一个思路

使用特权

评论回复
板凳
ljolove| | 2010-1-14 11:00 | 只看该作者
本帖最后由 ljolove 于 2010-1-14 11:02 编辑

其实感觉DOWN没有啥必要,UP到9直接归0比较好吧?个人建议,呵呵

使用特权

评论回复
地板
linfuchi|  楼主 | 2010-1-14 11:23 | 只看该作者
呵呵,我是按照公司的使用手册做的。不管他合不合理。他们的这个产品批量生产了,我只有先按照原来的使用说明做出来,才有资格考虑合不合理的事了。他们原来有一套汇编代码,现在让我升级成C。不过我不能看原来的代码,我是试用期,这是我试用期的课题。哈哈,谢谢你的建议!

使用特权

评论回复
5
zljzlj| | 2010-1-14 11:27 | 只看该作者
1. 先画好流程图
2. KEY + LED drv
3. message 调度事件,

这个东东对于有一点水平的人来说不算什么;但是如果没经验的往往会搞得很混乱,所以先画图!!!

使用特权

评论回复
6
linfuchi|  楼主 | 2010-1-14 11:28 | 只看该作者
其实DOWN键也是要的,他们的参数在出场的时候不是最小值,往往是中间的值,如果少一键的话,有可能逻辑会更复杂一点。

使用特权

评论回复
7
zljzlj| | 2010-1-14 11:31 | 只看该作者
ps:  要引入 “字库”的概念,只要能显示出来的符号,什么都可以了,最基本的ASCII上半部分、
有意思的是:我们公司新人也要做这种类似的作业。呵呵!

使用特权

评论回复
8
linfuchi|  楼主 | 2010-1-14 11:32 | 只看该作者
我是菜鸟,高手能不能说明白一点?谢谢了

使用特权

评论回复
9
wanglan1985| | 2010-1-14 11:32 | 只看该作者
学生在此受教了!

使用特权

评论回复
10
linfuchi|  楼主 | 2010-1-14 11:35 | 只看该作者
Nren,能不能给段示例代码,我拜读一下。谢谢!!!

使用特权

评论回复
11
tyrone3000| | 2010-1-14 12:46 | 只看该作者
可以采用链接的方式做菜单程序,既然是试用期,好好学吧!
自己好好钻研,这里只能给你提供思路。
不要把他想的太难

使用特权

评论回复
12
LIU_XF| | 2010-1-14 12:49 | 只看该作者
楼主可看看这个,参考一下

任意结构菜单设计

http://blog.**/liu_xf/279635/message.aspx

使用特权

评论回复
13
inter_zhou| | 2010-1-14 13:04 | 只看该作者
假如你有5个数码管:

配置一个5Ms级的定时器,在定时中断里面做显示的刷新和按键的检测

u8 disp_buf[5];                /*LED 显示缓冲区*/
void int_timer(void) interrupt xxx
{
    static u8 counter = 0;
    keyscan();
    counter++;
    if(counter >= 5)
    counter = 0;

P0 = disp_buf[counter];
        if(counter == 1)
        {
                选中第一个数码管               
        }
        else if(counter == 2)
        {
                选中第二个数码管               
        }
        else if(counter == 3)
        {
                选中第三个数码管               
        }
        else if(counter == 4)
        {
                选中第四个数码管               
        }
        else
                选中第五个数码管               
   
   
}

使用特权

评论回复
14
inter_zhou| | 2010-1-14 13:07 | 只看该作者
按键处理程序在主函数里面做,
通过按键显示不同的菜单的时候只需要更改disp_buf里面的内容。在中断里面会自动刷新的



希望你能顺利通过试用期!!!

使用特权

评论回复
15
liyinchao| | 2010-1-14 13:09 | 只看该作者

使用特权

评论回复
16
inter_zhou| | 2010-1-14 13:15 | 只看该作者
又不是LCD,还坐标都出来了
低价位的单片机显示数码管怎么承受得了 LED_Printf()那庞大的代码

使用特权

评论回复
17
liyinchao| | 2010-1-14 13:17 | 只看该作者
哈哈 上面的是我从我的LCD驱动改过来的

使用特权

评论回复
18
liyinchao| | 2010-1-14 13:24 | 只看该作者

上面的代码需要编写
//1.LED_PutC(char C)函数
//2.LED_PutStr(char *Str)函数
//3.LED_PutNum(int Num)函数
使用方法//
ATLineY为选中LED窗  StartX 为起始位置
LED_Printf(0,1,"THN %d",THN);

使用特权

评论回复
19
linfuchi|  楼主 | 2010-1-14 13:52 | 只看该作者
我思考一个星期了,可以做,但觉得自己的方案很不好,等调通了我会把之前的程序发上来,让大家指点,这样进步比较快。老板让我两星期搞定,包括上位机软件,还有下位机的通信了,然后就是别的模块了,对我这个菜鸟来说,时间比较紧,所以上来求大家帮忙了。楼上楼下的,谢谢您们的指点了!!感激啊!!!

使用特权

评论回复
20
linfuchi|  楼主 | 2010-1-14 13:59 | 只看该作者
谢谢您了,感激啊!!

使用特权

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

本版积分规则

43

主题

474

帖子

1

粉丝