打印

寻找“XWJ”如何写组合按键程序

[复制链接]
4425|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xzhenggen|  楼主 | 2007-7-6 13:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
(直控按键,加速键带进位,退位功能)。
我现在用四个独立的按键(P1.6,P1.7,P3.6,P3.7)组合,完成编码器功能(暂定)。要求实现功能如下:
1,    输入数值范围是0----10000,即输入电流为0mA-----10A。为了方便我在12232LCD上只做四位数字显示0.000------9.999(也许这样做不合理,但如果键盘处理功能做好了,就显示五位).
2,    我需要对每一位数值操作都需有进位和退位功能;我的思路是四个按键完成四个功能:加键,减键,设置键,左移键。
3,    我还需要使用长按(加速键)功能。比如我现在的LCD显示是:2.500A,须修改为1.7A.我左移键已经设置在”5”数字这个位置,我只需要在此长按减键就可以输出显示1.7A了.
4,    再比如我现在的LCD显示是0.000A,我需输入显示2.000A的数值,如果我的左移设置功能现在在个位,或者十位,百位.我长按加(减)键,能达到我所要的数值.
5,    同样的方式,现在LCD上显示的是2.400A,需输入900mA的电流,此时左移按键移到“4”数字位置,长按长按减 (加)键,就可以得到900mA的电流输入显示。所以说需加速键。
6,    因LCD需换屏显示,所以换屏后,前面所操作好的数值显示不能因换屏而改变。
7,    我前面

相关帖子

沙发
xzhenggen|  楼主 | 2007-7-6 13:42 | 只看该作者

7,我前面参考几个程序,

7,我前面参考几个程序,都没成功,不能实现进位,退位。没有长按功能。

使用特权

评论回复
板凳
农民讲习所| | 2007-7-6 13:56 | 只看该作者

看俺的培训教材

只要你能看得明白

使用特权

评论回复
地板
ayb_ice| | 2007-7-6 14:06 | 只看该作者

别人只能给思路,关键还是靠自己...

使用特权

评论回复
5
xzhenggen|  楼主 | 2007-7-6 14:21 | 只看该作者

所长的培训教材在哪里?我看看。

使用特权

评论回复
6
xzhenggen|  楼主 | 2007-7-6 14:30 | 只看该作者

我前面写了几个程序,现在头脑一片混乱。

前面的程序只能单独调整,不能进位,退位。没有加速功能。
搞了好几天了,看样子这种情况我又要找电脑圈圈帮忙了。

使用特权

评论回复
7
hotpower| | 2007-7-6 19:26 | 只看该作者

xwj的方块很好玩~~~

使用特权

评论回复
8
kjb_1209| | 2007-7-7 11:18 | 只看该作者

方式

这其实是两个功能而已。按键扫描是个独立的模块,显示是一个模块。两个模块之间只有显示的变量联系而已。应该不难吧。加速度键也不难哟

使用特权

评论回复
9
一无所知| | 2007-7-9 15:26 | 只看该作者

说说自己的理解

按照我的想法:按键的模块实际是两个
    一个是常说的键驱动,这个模块完成的是键位的设定(可以灵活的根据I/O口的实际情况设定,按键状态的识别(能够识别长按、短按等常见状态)
    另外一个是键功能,根据你的功能,对不同的已识别的按键状态,进行功能设计。这即需要识别按键状态,还需要对屏幕状态进行记录,以及各种显示之间的相对关系。

    第三个,是LCD的驱动,他和其他的代码应该是无关的,比如说,给它个0x30,它就在LCD的某个位置上显示“0”,这样不管你换什么LCD显示屏,最多只要换一个驱动就可以了

使用特权

评论回复
10
fsaok| | 2007-7-9 17:03 | 只看该作者

按键,本来就和屏无关

使用特权

评论回复
11
yewuyi| | 2007-7-9 17:15 | 只看该作者

你用短消息告诉我是怎么在签名上帖动画和图片的?

我就告诉你是怎么做这个按键的(只是不要太笨,包教包会,如果不好意思,可以考虑来请俺吃饭,如果还不好意思,就来交拜师费……)

使用特权

评论回复
12
yewuyi| | 2007-7-9 17:24 | 只看该作者

长击,短击,连击

单击,双击,任何组合击,变速击……


哈哈,想怎么击就怎么击

使用特权

评论回复
13
gyt| | 2007-7-9 20:18 | 只看该作者

11楼

很有意思:)

使用特权

评论回复
14
hotpower| | 2007-7-9 20:20 | 只看该作者

倒塌了~~~想法也收费~~~若成我早富起来了~~~

使用特权

评论回复
15
yewuyi| | 2007-7-9 22:30 | 只看该作者

14楼老犯晕……

想法收费才是应该,具体的代码收费反到是要向后靠靠了……



这是授人以鱼和授人以渔的区别嘛……



哈哈哈哈……

使用特权

评论回复
16
xzhenggen|  楼主 | 2007-7-10 08:06 | 只看该作者

喝茶,吃饭。我可以请你,但交拜师费,就不好意思,免谈

使用特权

评论回复
17
xzhenggen|  楼主 | 2007-7-10 08:07 | 只看该作者

我还真得没拜过师,一切都是自学得来。

使用特权

评论回复
18
yewuyi| | 2007-7-10 08:33 | 只看该作者

呵呵,不交就不交把……

有喝有吃也不赖……


你上次帖出的那程序我早就瞄过几眼了,你的问题表象是解决按键的问题,但真正的原因还是你程序结构的问题;


所以,所长告诉你的是最正确的方法,不妨先看看所长的教材……

当然,所长的方法肯定不是唯一的解决问题的方法,但如果你看懂了所长的方法,别的方法讲起来就比较简单,你理解起来也会比较快……

讲了这么多,还不赶快给俺来杯水?

使用特权

评论回复
19
xzhenggen|  楼主 | 2007-7-10 08:42 | 只看该作者

多谢你指点,但所长的教材看上去过于繁琐。

我只是用了单独四个按键。完成一个简单的滚轮编码器功能。但是我现在困难是针对每一位数字操作时要有进位,退位功能。也即是要有加速键功能(长,短按功能)。

使用特权

评论回复
20
yewuyi| | 2007-7-10 08:56 | 只看该作者

帖一点再说

void        keyscan(void){
            if(keyval){
              keypresscnt++;
              if(keypresscnt<pdot2){}
              else{
                  exitbuzzer=on;
                  switch(menucase){
                  case  0:
                          switch(keyval){
                          case  up:   
                                      break;
                          case  down: 
                                      break;
                          case  set:  
                                      break;
                          default:    keypresscnt=0x00;
                                      break;
                                        }
                          break;
                  case  1:
                          switch(keyval){
                          case  up:   if(keycontinue){fcase++;keypresscnt=0;}
                                      else{
                                          if(keypresscnt>p1s){keycontinue=on;keypresscnt=0;}
                                          else{
                                              if(keysingle==0){fcase++;keysingle=on;}
                                              }
                                          }
                                      break;
                          case  down: if(keycontinue){fcase--;keypresscnt=0;}
                                      else{
                                          if(keypresscnt>p1s){keycontinue=on;keypresscnt=0;}
                                          else{
                                              if(keysingle==0){fcase--;keysingle=on;}
                                              }
                                          }
                                      break;
                          case  set:  if(setOneclick){}
                                      else{
                                          menucase=2;
                                          setOneclick=on;
                                          disval(f[fcase]);
                                          }
                                      break;
                          case  rst:  exitset();
                                      break;
                          default:    keypresscnt=0x00;
                                      break;
                                        }
                          break;
                       ...........
                       ...........
                       ...........

使用特权

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

本版积分规则

55

主题

529

帖子

1

粉丝