找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机按键松手后就灭了,为什么

  [复制链接]
跳转到指定楼层
楼主
单片机按键松手后就灭了,为什么
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2014-12-10 01:51 | 只看该作者
程序贴上来看看
回复

使用道具 举报

板凳
ID:65770 发表于 2014-12-10 06:39 | 只看该作者
admin 发表于 2014-12-10 01:51
程序贴上来看看

#include<reg52.h>
sbit key=P3^0;
sbit led1=P2^0;
sbit key1=P3^1;
sbit led3=P2^2;
void main()
{
unsigned int i;
unsigned char a;
         
         while(1)
         {        a=1;
                 if(key==0)
                 {
                  
                 for(i=0;i<100;i++);
                 if(key==0)
                 {
                   led1=0;
                  a++;               
                 }
                 {
                if(key1==0)
                  for(i=0;i<100;i++);
                                  if(key==2)  led1=1;


                   }
                 
                  
                }
          
        }
}
回复

使用道具 举报

地板
ID:67992 发表于 2014-12-10 10:37 | 只看该作者
提问题之前要说明程序要实现的功能,才好帮你分析。
回复

使用道具 举报

5#
ID:223443 发表于 2017-7-31 19:26 | 只看该作者
应该是循环问题吧!
回复

使用道具 举报

6#
ID:223443 发表于 2017-7-31 19:27 | 只看该作者
admin 发表于 2014-12-10 01:51
程序贴上来看看

应该是连续循环问题吧
回复

使用道具 举报

7#
ID:223667 发表于 2017-7-31 21:21 | 只看该作者
董亚伟 发表于 2014-12-10 06:39
#include
sbit key=P3^0;
sbit led1=P2^0;

没看懂 key为什么可以等于2呢不是只有0和1吗 条件都不成立  还有if语句可以这样嵌套的吗
回复

使用道具 举报

8#
ID:221453 发表于 2017-8-1 18:38 | 只看该作者
加一个while循环程序就好了
回复

使用道具 举报

9#
ID:223988 发表于 2017-8-2 08:26 | 只看该作者
因为你 没有 保持 。
回复

使用道具 举报

10#
ID:219921 发表于 2017-8-2 10:10 | 只看该作者
判断key==2? 还有   为什么要判断两次key==0啊
回复

使用道具 举报

11#
ID:224024 发表于 2017-8-2 10:21 | 只看该作者
程序没有挂起
回复

使用道具 举报

12#
ID:224028 发表于 2017-8-2 10:34 | 只看该作者
#include<reg52.h>
sbit key=P3^0;
sbit led1=P2^0;
sbit key1=P3^1;
sbit led3=P2^2;
void main()
{
unsigned int i;
unsigned char a;
         
         while(1)
         {        a=1;
               
                 if(key==0)
                 {
                   led1=0;
                   for(i=0;i<100;i++);
                  a++;               
                 }
                 {
                if(key1==0)
                  for(i=0;i<100;i++);
                                  if(key==2)  led1=1;


                   }
                 
                  
                }
         
        }
}
回复

使用道具 举报

13#
ID:221909 发表于 2017-8-2 11:08 | 只看该作者
董亚伟 发表于 2014-12-10 06:39
#include
sbit key=P3^0;
sbit led1=P2^0;

LED加电阻了吗,好像不能直接接正极。再有就是好像还要加入去抖动吧,我也是刚学,前几天看杜洋的视频了好像有讲这个,你可以看看
回复

使用道具 举报

14#
ID:224096 发表于 2017-8-2 14:08 | 只看该作者
同求解,谢谢各位
回复

使用道具 举报

15#
ID:224086 发表于 2017-8-2 14:13 | 只看该作者
key==2怎么会亮?
回复

使用道具 举报

16#
ID:137261 发表于 2017-8-5 11:18 | 只看该作者
你这个程序key=2是啥?
回复

使用道具 举报

17#
ID:225017 发表于 2017-8-5 16:52 | 只看该作者
董亚伟 发表于 2014-12-10 06:39
#include
sbit key=P3^0;
sbit led1=P2^0;

没有松手检测把
回复

使用道具 举报

18#
ID:224474 发表于 2017-8-6 11:28 | 只看该作者
应为你设置的是检测一次,如果连续检测的话可以用眼石判断来实现。
回复

使用道具 举报

19#
ID:225341 发表于 2017-8-7 06:47 | 只看该作者
因为你没有保存到上一个值,,它只要低电平就亮,高电平就灭,所以必须先保存到这个之后,按下就会亮
回复

使用道具 举报

20#
ID:225626 发表于 2017-8-7 23:00 | 只看该作者
少了一个松手检测吧
回复

使用道具 举报

21#
ID:220121 发表于 2017-8-8 08:50 | 只看该作者
定义两个状态 bit  按下为1,抬起为0 当抬起时将状态取反
回复

使用道具 举报

22#
ID:225669 发表于 2017-8-8 10:35 | 只看该作者
   if(key==2)  led1=1;   按键只有01 状态,怎么是2啊 ,
回复

使用道具 举报

23#
ID:204589 发表于 2017-8-8 10:50 | 只看该作者
少了松手检测吧
回复

使用道具 举报

24#
ID:225682 发表于 2017-8-8 10:52 | 只看该作者
定义一个变量,按下取反。
回复

使用道具 举报

25#
ID:225017 发表于 2017-8-8 20:16 | 只看该作者
加个松手检测或者消抖不行。
回复

使用道具 举报

26#
ID:226857 发表于 2017-8-11 10:23 | 只看该作者
增加一个记录状态的变量
回复

使用道具 举报

27#
ID:226896 发表于 2017-8-11 11:11 | 只看该作者
加一个标志位看看
回复

使用道具 举报

28#
ID:111634 发表于 2017-8-12 20:34 | 只看该作者
程序有问题
回复

使用道具 举报

29#
ID:78850 发表于 2017-8-12 23:03 | 只看该作者
加个延时,把key==2改成key==1试试
回复

使用道具 举报

30#
ID:218870 发表于 2017-8-13 05:59 | 只看该作者
要达到的要求是什么?
回复

使用道具 举报

31#
ID:218870 发表于 2017-8-13 05:59 | 只看该作者
触发方式
回复

使用道具 举报

32#
ID:111634 发表于 2017-8-13 08:39 | 只看该作者
本帖最后由 zl2168 于 2017-8-16 17:23 编辑

实例5  4种不同键控方式


单片机应用系统中,根据按键闭合和释放状态,有多种不同的键控方式,可编写不同的程序予以实现。本例要求按以下4种不同方式分别键控VD0~ VD3



① 无锁按键:S0按下,VD0亮;S0释放,VD0暗;

② 无锁按键(前沿有效):S1按下,VD1亮;S1释放,VD1延时2s后暗。

③ 无锁按键(后沿有效):S2按下,VD2不亮;S2释放,VD2亮,并延时2s后暗。

模拟有锁按键:S3按第一次,VD3亮,并继续保持;按第二次,VD3才暗。



Proteus仿真一下,确认有效。
实例5 不同方式键控灯.rar (31.72 KB, 下载次数: 15)
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1.书中电路和程序设计有详细说明,程序语句条条有注解。


回复

使用道具 举报

33#
ID:223097 发表于 2017-8-13 15:16 | 只看该作者
没消抖吧
回复

使用道具 举报

34#
ID:226108 发表于 2017-8-13 18:46 | 只看该作者
我也是同样的问题
回复

使用道具 举报

35#
ID:219008 发表于 2017-8-14 18:11 | 只看该作者
少了一个去抖动程序
回复

使用道具 举报

36#
ID:227635 发表于 2017-8-14 20:24 | 只看该作者
你用两个if只是去抖,并不能挂起程序,应该用while语句
回复

使用道具 举报

37#
ID:208108 发表于 2017-8-15 12:04 | 只看该作者
  if(key==2)  led1=1; 这个没看明白,假如条件成立等同于if(key==1)  led1=1;
你这个并没有嵌套在上一个for循环里,是和第一个if同级的,当然松手会灭了。
回复

使用道具 举报

38#
ID:227744 发表于 2017-8-15 15:39 | 只看该作者
不会的,肯定没问题
回复

使用道具 举报

39#
ID:227750 发表于 2017-8-15 16:19 | 只看该作者
用一个变量记录按键状态就可以了,按一下亮,按一下灭,相应的状态也要改变
回复

使用道具 举报

40#
ID:227792 发表于 2017-8-15 20:14 | 只看该作者
帮你顶吧!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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