打印

倒计数器

[复制链接]
3983|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cyc200267|  楼主 | 2011-11-12 12:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人想做一个倒计数器,功能是开机预设一个任意5位数的值(如8800),三个按键控制,设置键选位码,增、减键改变每一位数的大小,设置完成后按一下设置键开始工作,检测到外面的高电平之后开始递减,到0时停机。请高手能提供输入预设置的思路。谢谢!

相关帖子

沙发
NE5532| | 2011-11-12 13:15 | 只看该作者
随便找个单片机,写吧。

使用特权

评论回复
板凳
cyc200267|  楼主 | 2011-11-12 13:41 | 只看该作者
2# NE5532

使用特权

评论回复
地板
cyc200267|  楼主 | 2011-11-12 13:49 | 只看该作者
2# NE5532
我现在有51单片机的学习板,主要是不知道如何来处理这个预设值(包括如何输入),并显示出来

使用特权

评论回复
5
NE5532| | 2011-11-12 13:51 | 只看该作者
楼主离能完成这个项目还差很远,建议不要老虎吃天,从单片机的基本程序开始写起吧。

使用特权

评论回复
6
xyz549040622| | 2011-11-12 14:00 | 只看该作者
直接赋值,通过数码管显示,然后通过外部中断的值改变数的大小,了解数码管显示原理即可。

使用特权

评论回复
7
cyc200267|  楼主 | 2011-11-12 14:16 | 只看该作者
谢谢两位,显示部份和按键部份我可以搞定,但我要的不是直接显示一个数据,是通个外接的三个按键输入一个任意思的数据。所以不能直接赋值。

使用特权

评论回复
8
NE5532| | 2011-11-12 14:30 | 只看该作者
学习电子表的设置方式就可以了。

使用特权

评论回复
9
ningling_21| | 2011-11-12 17:38 | 只看该作者
三个按键控制五个变量的值...

使用特权

评论回复
10
NE5532| | 2011-11-12 17:45 | 只看该作者
三个按键控制五个变量的值...
ningling_21 发表于 2011-11-12 17:38


不稀奇,鼠标也才3个键。

使用特权

评论回复
11
xyz549040622| | 2011-11-13 08:19 | 只看该作者
10# NE5532 他如何控制,要直接输入的。。。

使用特权

评论回复
12
DownCloud| | 2011-11-13 08:34 | 只看该作者
11# xyz549040622 位选,增减。

使用特权

评论回复
13
frlop| | 2011-11-13 09:26 | 只看该作者
10楼
+1

使用特权

评论回复
14
NE5532| | 2011-11-13 09:43 | 只看该作者
不可能直接输入,除非你用鼠标的方式做GUI,学电子表是最方便的了。

使用特权

评论回复
15
何工| | 2011-11-13 10:18 | 只看该作者
本帖最后由 何工 于 2011-11-13 10:24 编辑

一个+1设数键,0-9循环,
一个选数位键,4 位数从左往右循环选,
一个设置/确定键.

操作: 按一下设置/确定,,左边第一位闪,可以调+1设数键调数值,完了可以按数位键选左边第二位,同第一位一样调好,,......完后按设置/确定键 完成,,计数开始

使用特权

评论回复
16
yirongfu| | 2011-11-13 10:45 | 只看该作者
本人想做一个倒计数器,功能是开机预设一个任意5位数的值(如8800),三个按键控制,设置键选位码,增、减键改变每一位数的大小,设置完成后按一下设置键开始工作,检测到外面的高电平之后开始递减,到0时停机。请高 ...
cyc200267 发表于 2011-11-12 12:06


这是最基本的人机交互设计了,建议您可以找一本早期的智能仪表类的书参考参考,尤其是用51汇编的代码做示例的,现在新出版的书不知道还有没有介绍,很多年没去书店了。
按键复杂的情况下,最好采用状态表的方法,不容易出错,而且代码效率高,把状态表和流程图拟好了,就只剩下翻译成代码的工作量了。

简单描述一个方案,仅供参考:
     开机后,按设置键进入预置初值状态,此时三个按键的功能分别定义成位选、循环增值、确认,数码管可以闪烁显示左边最高位,提示操作者修改第1位数值,通过“循环增值”键可以在当前示值基础上递增循环显示0-9,当然也可以递减,“位选”键用于在5位数之间任意的依次切换,切换到哪个位,哪个位闪烁提示编辑状态,其他位不闪烁。都修改完毕,按“确认”键,保存设置的参数,进入正常工作状态,按键功能变为:“确认”->“设置”,“位选”->"减值",“循环增值”-“增值”。

使用特权

评论回复
17
zhang@long| | 2011-11-13 12:10 | 只看该作者
学习!

使用特权

评论回复
18
wangxinaaa| | 2011-11-13 13:50 | 只看该作者
2# NE5532

使用特权

评论回复
19
杨立业yly| | 2011-11-13 17:16 | 只看该作者
我用1602写过电子表的时间调节,但是没用数码管试过,原理应该差不多。

使用特权

评论回复
20
cyc200267|  楼主 | 2011-11-13 22:31 | 只看该作者
非常感谢大家的意见,下面是我写的按键程序,但下载到实验板里按按键时无反应,
我现在用的两个按键,S1为设置键和位选键,S2是增加键。
             void keycan()
           {
           s1num=0;
           s2num=0;
                   if(s1==0)
                {
                delay(5);
                {if(s1==0)
                s1num++;
                while(!s1);
                if(s1num==1)
                { P2=0xef;                 
                 if(s2==0)
                 {
                  delay(5);
                  if(s2==0);
                  {
                   wan++;
                   while(!s2);
                   P0=table[wan];
                   P2=0xff;
                   if(wan==9)
                      wan=0;
          }
                 }                 
                }
                if(s1num==2)
                {P2=0xf7;               
                 if(s2==0)
                 {
                  delay(5);
                  if(s2==0);
                  {
                   s2num++;
                   while(!s2);
                   P0=table[s2num];
                   P2=0xff;
                   if(s2num==9)
                      s2num=0;
                  }
                 }                 
                }         
         }
                 if(s1num==3)
                 {                 
                 P2=0xef;                 
                 if(s2==0)
                 {
                  delay(5);
                  if(s2==0);
                  {
                   s2num++;
                   while(!s2);
                   P0=table[s2num];
                   P2=0xfe;
                   if(s2num==9)
                   s2num=0;
                  }
                 }                 
                }        
                 }
                 if(s1num==4)
                 {P2=0xfd;                 
                 if(s2==0)
                 {
                  delay(5);
                  if(s2==0);
                  {
                   s2num++;
                   while(!s2);
                   P0=table[s2num];
                   P2=0xff;
                   if(s2num==9)
                     s2num=0;

                  }
                 }                 
                }
         }

使用特权

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

本版积分规则

5

主题

51

帖子

1

粉丝