找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1487|回复: 2
打印 上一主题 下一主题
收起左侧

单片机双联开关按键轻触检测程序的分析

[复制链接]
跳转到指定楼层
楼主
我用的的是双联开关有个轻触功能,1和2接  P1.6输出高电平,P1.7输出低电平,1和3接  全部关闭,1和2接时  轻触一下,1和2断开然后松开闭合,,状态改变 P1.6输出低电平,P1.7输出高电平,但是只有在轻按着不松手时输出状态会 改变,能帮我分析一下吗
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2019-9-27 09:33 | 只看该作者
楼主这个开关相当于有3种状态:1.A-B通稳态,2.A-B-C都互不通暂态,3.A-C通稳态,给你写个示例。
程序功能:加电判断开关初始状态确定输出状态
          轻按一下,开关状态1-2-1,输出状态取反。再轻按一下,开关状态1-2-1,输出状态恢复。
          重按一下,开关状态1-2-3,输出清0。再重按一下,开关状态3-2-1,输出恢复到第一次重按之前状态。
  1. #include <reg51.h>

  2. sbit k1=P3^1;
  3. sbit k2=P3^0;
  4. sbit p16=P1^6;
  5. sbit p17=P1^7;

  6. bit flag=0;//声明开关状态标志

  7. void main()
  8. {
  9. //加电识别开关初始状态
  10.         if(!k1)
  11.         {
  12.                 p16=1;
  13.                 p17=0;
  14.         }
  15.         if(!k2)
  16.         {
  17.                 p16=0;
  18.                 p17=0;
  19.         }
  20. //主循环
  21.         while(1)
  22.         {
  23.                 if(k1==1&&k2==1)//判断开关有操作动作
  24.                 {
  25.                         flag=~flag;        //记忆操作状态,
  26.                         while(1)                //等待操作结果
  27.                         {
  28.                                 if(k1==0&&flag==1)
  29.                                 {
  30.                                         p16=0;
  31.                                         p17=1;
  32.                                         break;                //跳出循环
  33.                                 }
  34.                                 if(k1==0&&flag==0)
  35.                                 {
  36.                                         p16=1;
  37.                                         p17=0;
  38.                                         break;                //跳出循环
  39.                                 }
  40.                                 if(k2==0)
  41.                                 {
  42.                                         p16=0;
  43.                                         p17=0;
  44.                                         break;                //跳出循环
  45.                                 }
  46.                         }
  47.                 }
  48.         }
  49. }
复制代码
回复

使用道具 举报

板凳
ID:586438 发表于 2019-9-27 17:06 | 只看该作者
wulin 发表于 2019-9-27 09:33
楼主这个开关相当于有3种状态:1.A-B通稳态,2.A-B-C都互不通暂态,3.A-C通稳态,给你写个示例。
程序功能 ...

非常感谢  完美实现了我需要的现象,这种逻辑思维真的好清晰,我在这逻辑里经常把自己绕混。再次感谢   
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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