[匠人手记] 50分请教匠人个被困扰很久摸不着头脑的按键问题,先谢过啦

[复制链接]
 楼主| wangzk 发表于 2010-7-20 15:33 | 显示全部楼层 |阅读模式
本帖最后由 wangzk 于 2010-7-20 15:57 编辑

“小”按键。“大”问题。不怕匠人笑话,这个按键我想了很久都没什么思路。怕被人笑话,身边有没什么高手,发帖请教都不敢了:L   匠人的《按键漫谈》我也看了  只怪自己笨额   匠人提供一种思路就行了  
  匠人gg先听偶慢慢道来
2009072810182066.gif
 楼主| wangzk 发表于 2010-7-20 15:41 | 显示全部楼层
本帖最后由 wangzk 于 2010-7-20 16:09 编辑

4×4矩阵键盘  那本单片机教科书都会有的接法   俗的要死
先说我想要用这些按键的功能:
1:0~9,10个阿拉伯数字按键。系统是12864液晶显示。 若无按键按下,界面显示0000.这个是没有疑问的。“设置”键按下,液晶界面要接收数字,怎么去接收呀??
例如数字按键“1”键按下。液晶显示1000。然后如果是数字键“2”键(当然也有可能是其他键)按下,液晶显示“1200”.依次接收4位阿拉伯数字。
困惑我的就是这么个简单的功能了。
2:“左”“右”方向键  
3:“确认”,“清零”,“设置”键
4×4键盘怎么去实现这些功能按键,我同样也是摸不着头脑。幸好单片机IO口够用,我就接了几个独立式按键当作功能键。避开4×4键盘(现在一看见这个字眼心里就发毛:funk: ,惹不起还躲不起)。4*4键盘常用的是 行列扫描法。我也是采用的这种方法。
系统中需要多次用到“确认”键,那么就用到一次“确认”键,查询一次扫描程序吗。总觉得这样还不如把它单拉出来  给他“独立”起来
程序匠人 发表于 2010-7-20 17:44 | 显示全部楼层
这个很好实现,大概思路如下:

首先,每个按键都编个号,我们称为“键值”或“键号”。对于数字键盘,键号最好是与键盘数字相互关联,比如,“1”键的键号就是1,“2”键的键号就是2。这样是为了后续程序的方便性。至于如何读键,这个大概不需要我教吧?所以这一步略过。

读到了键号后,如何实现你说的功能。其实关键在于你的心中要有一个“状态机”(这也是我曾经在一些手记中介绍过的)。用状态机的思路去解析这个问题,将非常简单。

1、在RAM中设立一个状态字(变量),意义如下:

  0=不可调节
  1=调节千位
  2=调节百位
  3=调节十位
  4=调节个位

2、程序开始时,未按键,状态=0,也就是说这个时候不可设置

3、“设置”键按下,令状态=1

4、任意数字键(0~9)按下,把该数字传递给当前激活的调节位;然后令状态+1,并判断状态是否>4,如是,则令状态=0(退出设置)

5、“左”“右”方向键,其实就是选择调节位吧?如是,则只要令状态+1或-1即可;

6、“确认”键,直接保存设置内容,并令状态=0

7、“清零”键,直接清除设置内容,并令状态=1
 楼主| wangzk 发表于 2010-7-20 17:52 | 显示全部楼层
谢匠人  感觉可以结贴了
程序匠人 发表于 2010-7-20 17:53 | 显示全部楼层
补充:请参阅《匠人手记》(纸版)第49页  《基于状态机思路的程序调度机制》。并重点理解第50页的那个流程图。
 楼主| wangzk 发表于 2010-7-20 17:55 | 显示全部楼层
本帖最后由 wangzk 于 2010-7-20 17:56 编辑

哈哈  《匠人手记》明天到货   刚刚在taobao 拍下的!  花了30大洋,还包运费 希望能帮上一点忙:loveliness:  

做实验去   有结论了  再总结一下
程序匠人 发表于 2010-7-20 17:55 | 显示全部楼层
啊,就这样捞了50分?盛情难却!盛情难却啊……:victory::);P:lol:D
 楼主| wangzk 发表于 2010-7-20 17:58 | 显示全部楼层
啊,就这样捞了50分?盛情难却!盛情难却啊……:victory::);P:lol:D
程序匠人 发表于 2010-7-20 17:55
  还卖了 一本《匠人手记》 :lol
程序匠人 发表于 2010-7-20 18:00 | 显示全部楼层
   还卖了 一本《匠人手记》 :lol
wangzk 发表于 2010-7-20 17:58


呵呵,我以为你本来已经有了呢。倒没想到要推销。。。。
 楼主| wangzk 发表于 2010-7-20 18:07 | 显示全部楼层
呵呵,我以为你本来已经有了呢。倒没想到要推销。。。。
程序匠人 发表于 2010-7-20 18:00
期待  《匠人笔记》。。。。。明天应该能到。。。
jiabin1024 发表于 2010-7-21 09:02 | 显示全部楼层
匠人讲的通俗易懂!!!!
seabada 发表于 2010-7-21 09:29 | 显示全部楼层
也学习了,以前的实验做的是数码管显示
ylsiw 发表于 2010-7-21 10:00 | 显示全部楼层
学习了
zhiyonghe 发表于 2010-7-21 10:55 | 显示全部楼层
《匠人笔记》笔记???
他老人家都是用手,拿笔多麻烦,直接用手蘸墨水写;P
《 匠人手记》
xuyiyi 发表于 2010-7-21 11:33 | 显示全部楼层
呵呵!
祝LZ又上了层楼!
程序匠人 发表于 2010-7-21 11:35 | 显示全部楼层
《匠人笔记》笔记???
他老人家都是用手,拿笔多麻烦,直接用手蘸墨水写;P
《 匠人手记》
zhiyonghe 发表于 2010-7-21 10:55


哥蘸的不是墨水,是血水……
 楼主| wangzk 发表于 2010-7-21 16:20 | 显示全部楼层
to  匠人gg:
在您指导下  今天终于 做出来了!     谢谢 匠人gg !
看来编程还是思想最重要呀!
程序匠人 发表于 2010-7-21 17:36 | 显示全部楼层
to  匠人gg:
在您指导下  今天终于 做出来了!     谢谢 匠人gg !
看来编程还是思想最重要呀!
wangzk 发表于 2010-7-21 16:20


如此一来,我那50分也就拿得心安理得了。:victory: :lol :D :) :P ;P
 楼主| wangzk 发表于 2010-7-22 11:55 | 显示全部楼层
《匠人手记》到啦 嘎嘎
0722114600.jpg
xuyiyi 发表于 2010-7-22 13:43 | 显示全部楼层
恭喜恭喜!
恭喜LZ, 熟读三遍《匠人手记》,再加上活学活用。
这世上第二个匠人将诞生了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:[url=http://huiqianxi.taobao.com]http://huiqianxi.

91

主题

680

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部