• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STC15F101W单片机独立按键程序跑飞

zzgege 2020-12-21 浏览量:560
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key=P3^5;
sbit shuchu=P3^3;
void delay(uint n)
{
    uint i=0j=0;
    for(i=0;i<n;i++)
        for(j=0;j<123;j++);
}
void main()
{
        uchar i;
        while(1)
        {
                        if(key==0)
                                                        delay(100);
                                                if(key==0)
                                                {
                                                        i++;
                                                        if(i==2)
                                                        {
                                                                i=0;
                                                                shuchu=1;
                                                        }
                                                        while(!key);
                                                }
                                                if(i<2)
                  
                        shuchu=0;
        }
}
上面的的程序仿真时正常下载到单片机中就不行了,程序思路是独立按键按动两次才有一次输出,可是实际按动按键时有时候三次才有输出,有时候连着两次输出,延时函数应该没有问题,请教各位大师指点一下
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 代码问题。

    while(1)里面的代码

    你的delay(100)的作用,应该是用于按键消抖的。但是却少了一对{}。

    在你的第一个if(key==0)后面加一对{},把后面的代码扩进去。


    另外,delay(100)的延时实际是多少时间,个人目测应该是长了些,按键消抖,延时一般要控制在5-15ms之间就可以了。你可以用示波器看测量一下这个延时时间,用过高低电平就可以了。

    • 发布于 2020-12-23
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:3
  • 程序没有问题,你可以换个按键试试,有可能按键不好
    • 发布于2020-12-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的程序的逻辑问题,可能是由于少了一对大括号吧
    • 发布于2021-01-07
    • 举报
    • 评论 0
    • 0
    • 0

  • 这里的if(key==0),在执行的语句后面加上一个

    else 
      continue;

    就行

    • 发布于2021-01-25
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STC15F101W单片机独立按键程序跑飞