找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2365|回复: 6
收起左侧

单片机对两路开关信号先后顺序计数问题,编程思想如何设计?

[复制链接]
ID:34298 发表于 2017-12-6 23:13 | 显示全部楼层 |阅读模式
基本要求是这样的
1、开关1先闭合之后开关2闭合,计数器加1。
2、开关2先闭合之后开关1闭合,计数器减1.
请问用51单片机如何实现,主要是编程思想,望高手解惑,谢谢。


回复

使用道具 举报

ID:34298 发表于 2017-12-8 14:06 | 显示全部楼层
先按A按键,再按B按键,数码管计数加1;先按B按键,再按A按键,数码管计数减1;  if(keyA==0&&keyB==0)    I++;     if(keyB==0&&keyA==0)    I--;  
回复

使用道具 举报

ID:259049 发表于 2017-12-8 13:55 | 显示全部楼层
首先明确你说的闭合是一个动作还是一个结果。如果是一个动作,那么通过条件判断先后判断开关状态就可以,如果是结果,那么可能有2楼的疑惑。
就是说,你指的闭合是上升沿、下降沿,还是电平触发。这个确定了,自然就可以实现了。
回复

使用道具 举报

ID:259049 发表于 2017-12-8 13:51 | 显示全部楼层
明确你说的闭合是一个动作,还是一种结果。
回复

使用道具 举报

ID:34298 发表于 2017-12-8 11:05 | 显示全部楼层
while(KEY_SET==1)//
  {
    n_n_1=0;
    ls_js=sys_time1;
    while(KEY_UP==1&&KEY_DOWN==1&&n_n_1<10)
    {
     
      delay_1(2);
      n_n_1++;
      if(KEY_UP==0&&KEY_DOWN==1&&sys_time1<80)
      {
        sys_time1++;
      
      }
      if(KEY_UP==1&&KEY_DOWN==0&&sys_time1>10)
      {
        sys_time1--;

}
    }
  
    if(ls_js!=sys_time1)
    {
      zh_time1(sys_time1);
      lcd_TIME_CS_SCC();
    }
    write_com(0x0d);
    write_com(0x80+11);
   }
回复

使用道具 举报

ID:164602 发表于 2017-12-7 09:34 | 显示全部楼层
你这个问题,就是一个判断的问题。
我的经验是这样的:
第一、分析现象可能性。你有两个开关,相当于二进制两位,共四种情况
1、开关1没闭合,开关2没闭合,00
2、开关1闭合,开关2没闭合,   01
3、开关1没闭合,开关2闭合,   10
4、开关1闭合,开关2闭合,      11
第二:结合你的要求,以上的情况分为两组,一个先,一个后。
第三:编程设计:两组判断(你的开关闭合先后时间差有没有规定?),每组类似,如:
判断开关1是否闭合?没闭合则跳出判断;闭合,则等待一会(延时),判断开关2是否闭合?没闭合,一直等待(看你的先后时间差的规定),或者跳出判断;闭合,则+1;

写到这里,我发现问题了!!!!!
如果两开关已经闭合,例如:我先断开开关1,此时算不算开关2闭合了?再闭合开关1,是不是可以认为是先闭合开关2,后闭合开关1,结果为—1呢?

所以,你给的条件是不够的!!!!!逻辑不够判断哦。

体会一下我的思考过程,算不算编程思想的一种体现呢?
但愿对你有帮助。
回复

使用道具 举报

ID:7485 发表于 2017-12-7 08:29 | 显示全部楼层
这个是非常简单的“if”判断语句,按条件转向。是最基础的。自己再熟悉熟悉“if”语句吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表