找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1446|回复: 12
收起左侧

51单片机按键程序问题求助

[复制链接]
ID:261451 发表于 2018-7-18 09:53 | 显示全部楼层 |阅读模式
  1. if(key3==0)
  2.       {
  3.           delay_ms(50);        
  4.                   if(key3==0)
  5.                         {
  6.                              if(yi<9)
  7.                                  {
  8.                                    yi++;
  9.                                   }
  10.                         while(!key3);
  11.                        }
  12.         }
  13.   if(key2==0)
  14.        {
  15.            delay_ms(50);        
  16.                  if(key2==0)
  17.                       {
  18.                           if(yi>0)
  19.                                 {
  20.                                  yi--;
  21.                                  }
  22.                        while(!key2);
  23.                       }
  24.        }
复制代码

回复

使用道具 举报

ID:261451 发表于 2018-7-18 10:02 | 显示全部楼层
本帖最后由 一袋天骄 于 2018-7-19 08:34 编辑
  1. if(key3==0)
  2.     {
  3.     delay_ms(50);        
  4.            if(key3==0)
  5.                {                                 
  6.                   if(er<9)
  7.                        {
  8.                          er++;
  9.                        }
  10.                      while(!key3);
  11.                  }
  12.    }
复制代码


回复

使用道具 举报

ID:261451 发表于 2018-7-18 10:06 | 显示全部楼层
程序里面有多个地方需要按键函数,怎样做一个按键子函数,可以对yi,er,san,si……进行按键加减呢
回复

使用道具 举报

ID:84765 发表于 2018-7-18 14:51 | 显示全部楼层
这个简单只要void打包好就行了,看下面程序就知道了

void anjian1()
{
if(key3==0)
    {
    delay_ms(50);        
           if(key3==0)
               {                                 
                  if(yi<9)

                       {

                         yi++;

                       }

                    while(!key3);

                }
   }


if(key2==0)
   {
         delay_ms(50);        
         if(key2==0)
              {
               if(yi>0)
                    {
                      yi--;
                     }
                while(!key2);
              }
   }

}
void anjian2()
{
if(key3==0)
    {
    delay_ms(50);        
           if(key3==0)
               {                                 
                  if(san<9)

                       {

                         san++;

                       }

                    while(!key3);

                }
   }


if(key2==0)
   {
         delay_ms(50);        
         if(key2==0)
              {
               if(san>0)
                    {
                      san--;
                     }
                while(!key2);
              }
   }
}

void main()
{

  while(1)
  {
  anjian1();
  anjian2();
  }
}
回复

使用道具 举报

ID:261451 发表于 2018-7-18 15:35 | 显示全部楼层
13976778401 发表于 2018-7-18 14:51
这个简单只要void打包好就行了,看下面程序就知道了

void anjian1()

谢谢,我在想能不能只写一个按键函数,
void  anjian(x)
{  
(按键加减)
},

然后需要写yi时用anjian(yi),需要写er用anjian(er),不知道我的想法有没有错误
回复

使用道具 举报

ID:261451 发表于 2018-7-18 16:28 | 显示全部楼层
还有一个疑问就是如何给yi设定一个变量初值,然后在这个初值上加减
void  anjian()
{
if(key3==0)
      {
          delay_ms(50);        
                  if(key3==0)
                        {
                             if(yi<9)
                                 {
                                   yi++;
                                  }
                        while(!key3);
                       }
        }
  if(key2==0)
       {
           delay_ms(50);        
                 if(key2==0)
                      {
                          if(yi>0)
                                {
                                 yi--;
                                 }
                       while(!key2);
                      }
       }
}
回复

使用道具 举报

ID:84765 发表于 2018-7-18 17:38 | 显示全部楼层
一袋天骄 发表于 2018-7-18 15:35
谢谢,我在想能不能只写一个按键函数,
void  anjian(x)
{  

不明确,要告诉单片机步骤教他走路!
回复

使用道具 举报

ID:84765 发表于 2018-7-18 17:41 | 显示全部楼层
一袋天骄 发表于 2018-7-18 16:28
还有一个疑问就是如何给yi设定一个变量初值,然后在这个初值上加减
void  anjian()
{

void main()
{
可以在这里设置变量初级
yi=0;或等于多少自己定,初始化后就是你自己设定的变量初级!
while(1)
{
.....................
}
}

评分

参与人数 1黑币 +70 收起 理由
admin + 70 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:374361 发表于 2018-7-18 20:47 | 显示全部楼层
将while(!key2)写到if条件判断外面就OK了
回复

使用道具 举报

ID:261451 发表于 2018-7-19 08:13 | 显示全部楼层
13976778401 发表于 2018-7-18 17:38
不明确,要告诉单片机步骤教他走路!

谢谢,因为定义的yi,er,san,si....,比较多,所以想需要哪个时用哪个
回复

使用道具 举报

ID:261451 发表于 2018-7-19 08:33 | 显示全部楼层
13976778401 发表于 2018-7-18 17:41
void main()
{
可以在这里设置变量初级

谢谢,是我没说清楚,不能在外面赋值,不过最后用了一个标志位g实现,用的4楼的子函数
void main()
{
while(1)
    {
   if(g=0)
        {
        yi=guang%10;
        g=1;
        }
    anjian_yi();
      ......
   if(key1==0)
     {
   g=0;
       }

   if(g=0)
        {
        yi=wen%10;
        g=1;
        }
    anjian_yi();
     ......
     }
}
回复

使用道具 举报

ID:261451 发表于 2018-7-19 08:35 | 显示全部楼层
goldfatherzuo 发表于 2018-7-18 20:47
将while(!key2)写到if条件判断外面就OK了

不太理解怎么做
回复

使用道具 举报

ID:261451 发表于 2018-7-19 09:28 | 显示全部楼层
goldfatherzuo 发表于 2018-7-18 20:47
将while(!key2)写到if条件判断外面就OK了

是这样么,在里面会有什么影响呢
if(key2==0)
       {
           delay_ms(50);
                 if(key2==0)
                      {
                          if(yi>0)
                                {
                                 yi--;
                                 }
                      }
                       while(!key2);
       }
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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