找回密码
 立即注册

QQ登录

只需一步,快速开始

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

一个C语言开关程序问题

  [复制链接]
跳转到指定楼层
楼主
ID:393245 发表于 2019-8-25 00:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一个开关问题:
    if(P1^0 == 0)
        {
            delayms(10);
            if(P1^0 == 0)
                {
                      P0^0 = 1 ;
                }
        }

我想在这个开关设置一个计数程序,计数10次。
就是说按下10次后,不管有没有按下,P0^0   都没有输出(P0^0 = 0)。
怎么编写?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:568565 发表于 2019-8-25 06:08 来自手机 | 只看该作者
定义一个p=0   if (p1^0==0)    delay..     if  p1..{p++;if  p=10{p0*0=0    p=0}else p0*0=1}
回复

使用道具 举报

板凳
ID:568565 发表于 2019-8-25 06:10 来自手机 | 只看该作者
p到底是9还是10我没仔细推,要是我编程序的话我会这样,没实际实验过不知道能不能行的通
回复

使用道具 举报

地板
ID:123289 发表于 2019-8-25 13:05 | 只看该作者
太笨,不适合选单片机行业。
回复

使用道具 举报

5#
ID:458699 发表于 2019-8-25 13:21 | 只看该作者
要计数就加一个计数标志位,判断标志位,满足条件就对应输出就行了
回复

使用道具 举报

6#
ID:393245 发表于 2019-8-26 22:18 | 只看该作者
chenyinhu 发表于 2019-8-25 06:08
定义一个p=0   if (p1^0==0)    delay..     if  p1..{p++;if  p=10{p0*0=0    p=0}else p0*0=1}

试过了,
没有效果
回复

使用道具 举报

7#
ID:393245 发表于 2019-8-26 22:19 | 只看该作者
aaaaabangw 发表于 2019-8-25 13:21
要计数就加一个计数标志位,判断标志位,满足条件就对应输出就行了

能不能举个例子呀
谢谢
回复

使用道具 举报

8#
ID:393245 发表于 2019-8-26 22:20 | 只看该作者
yzwzfyz 发表于 2019-8-25 13:05
太笨,不适合选单片机行业。

我知道我笨
不用你说
回复

使用道具 举报

9#
ID:592379 发表于 2019-8-27 10:01 | 只看该作者
if(pcount<10)  
{
  if(P1^0 == 0)
        {
            delayms(10);
pcount++;
            if(P1^0 == 0)
                {
                      P0^0 = 1 ;
                }
        }
}
else
{
P0^0 = 0;
}
回复

使用道具 举报

10#
ID:235200 发表于 2019-8-27 11:40 | 只看该作者
if(P1^0 == 0)                 //按键按下
        {
            delayms(10);       //消抖
            if(P1^0 == 0)     //再次判断按钮按下
                {
                      count++;       //计数
                      if (count==10)
                      {
                         P0^0 = ~P0^0 ;            //求反输出
                         count=0;
                       }
                }
        }
//注意P0口是否接了上拉电阻,如果未接,可能实现不了输出高电平
回复

使用道具 举报

11#
ID:603976 发表于 2019-8-27 16:09 | 只看该作者
if( P1^0 == 0)                 //按键按下
{
        delayms(10);       //消抖
        if(P1^0 == 0)     //再次判断按钮按下
          {
                if( keycount <10)
               {
                   keycount++;       //计数
                   P0^0 = 1;
                }
                else
                P0^0 = 0;
            }
        }
}
//说按下10次后,不管有没有按下,P0^0   都没有输出(P0^0 = 0)
回复

使用道具 举报

12#
ID:213173 发表于 2019-8-27 17:31 | 只看该作者
这段代码明显是楼主想当然写的。判断一个开关或按键不可能对P1全部端口测试,所以 if(P1^0 == 0)并不是异或运算表达式,而是楼主想判断P1.0端口的电平。要写成 sbit key = P1^0; if(key == 0)......
回复

使用道具 举报

13#
ID:604484 发表于 2019-8-27 21:20 | 只看该作者
你的计数呢
回复

使用道具 举报

14#
ID:389919 发表于 2019-8-29 15:48 | 只看该作者
小伙子们,这个功能函数如果不加松手检测可能会持续累加按键次数,根本不能正常计数
回复

使用道具 举报

15#
ID:529540 发表于 2019-8-31 16:29 | 只看该作者
14# 加一,应该在松手检测后计数位++
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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