发新帖我要提问
12
返回列表
打印
[51单片机]

求高手,程序调试一下午了,好奇怪

[复制链接]
楼主: samsunghellome
手机看帖
扫描二维码
随时随地手机跟帖
21
创隆电子| | 2013-8-17 20:47 | 只看该作者 回帖奖励 |倒序浏览
传上代码文件文件

使用特权

评论回复
22
创隆电子| | 2013-8-17 20:58 | 只看该作者
这网页,文字咋还不让复制

使用特权

评论回复
23
samsunghellome|  楼主 | 2013-8-17 21:02 | 只看该作者
创隆电子 发表于 2013-8-17 20:46  诶呀!!!用了软件调试功能了吗(这程序不用硬件一调就出来了,看看程序运行到哪里了)。再有你写的程序层 ...

谢谢你!我的程序已经调试出来了!刚开始写程序,手生,没领会编程思想!程序功能:1,按下按键1再按下按键2,led亮,;2,按下按键2再按下按键1,led灯熄灭!师傅,你能不能帮我编写一个层次话好的程序!我自己也是转了好几圈才转出来的!

使用特权

评论回复
24
创隆电子| | 2013-8-17 21:04 | 只看该作者
加我QQ;429525683,把文件给我,我帮你看看,你上面的代码太乱

使用特权

评论回复
25
samsunghellome|  楼主 | 2013-8-17 21:05 | 只看该作者
创隆电子 发表于 2013-8-17 20:47  传上代码文件文件

师傅,我在路上,一会回去把资料传给你,哈哈!

使用特权

评论回复
26
林志财| | 2013-8-17 21:10 | 只看该作者
另外你这个delay你是怎么知道他的具体延时时间的呢。
keil中可以调试

使用特权

评论回复
27
创隆电子| | 2013-8-17 21:38 | 只看该作者
没办法,给你编一个吧
#include<reg52.h>

bit a ;
sbit   k1=P3^0;
sbit   k2=P3^1;
sbit   led=P1^0;
void Delay20ms()                //@11.0592MHZ延时
{
        unsigned char i, j;

        i = 36;
        j = 217;
        do
        {
                while (--j);
        }
   while (--i);
}

void main()
{
        if(k1==0&&a==0)
     {
        Delay20ms();
             if(k1==0&&a==0)
         {
           a=1;
           while(a==1||k2==0)
                   {
                 if(k2==0)
                  {
                           Delay20ms();
                      if(k2==0)
                        {
                                 led=0;
                           a=0;
                        }
                  }
                   }
         }   
     }
//////////////////////////////////////////以上是K1
if(k2==0&&a==0)
     {
        Delay20ms();
             if(k2==0&&a==0)
         {
           a=1;
           while(a==1||k1==0)
               {
                 if(k1==0)
                  {
                      Delay20ms();
                      if(k1==0)
                        {
                                 led=1;
                           a=0;
                          
                        }
                  }
                   }
         }   
     }
////////////////////////////////////////K2
}
啊粘贴出来层次杂变了,嘿嘿将就用吧

使用特权

评论回复
28
samsunghellome|  楼主 | 2013-8-18 00:08 | 只看该作者
创隆电子 发表于 2013-8-17 21:38
没办法,给你编一个吧
#include

好的,谢谢您!

使用特权

评论回复
29
samsunghellome|  楼主 | 2013-8-18 00:24 | 只看该作者
创隆电子 发表于 2013-8-17 21:04
加我QQ;429525683,把文件给我,我帮你看看,你上面的代码太乱

相关文件已发送qq离线文件,:)

使用特权

评论回复
30
创隆电子| | 2013-8-18 07:32 | 只看该作者
#include<reg52.h>
sbit KEY1=P3^0;
sbit KEY2=P3^1;
sbit LED1=P1^0;
int Flag=0;//向下滑动时Flag=0,向上滑动时Flag=1
void DelayUs2x(unsigned char t);
void DelayMs(unsigned char t);
void main (void)
{
    KEY1=1;
    KEY2=1;
    while(1)
    {
        if(Flag==0&&KEY1==0)
        {
            DelayMs(10);
            if(Flag==0&&KEY1==0)//按键1延时去抖
                while(1)
                {
                    if(Flag==0&&KEY2==0)
                    {
                        DelayMs(10);
                        if(Flag==0&&KEY2==0)
                        {
                            LED1=0;
                        }
                        while(!KEY2)//等待按键2释放
                        {
                            Flag=1;
                        }
                        break;// 跳出while(1)循环
                    }
                }
            while(Flag)
            {
                if(Flag==1&&KEY2==0)
                {
                    DelayMs(10);
                    if(Flag==1&&KEY2==0)//按键1延时去抖
                        while(1)
                        {
                            if(Flag==1&&KEY1==0)
                            {
                                DelayMs(10);
                                if(Flag==1&&KEY1==0)
                                {
                                    LED1=1;
                                }
                                while(!KEY1)//等待按键1释放
                                {
                                    Flag=0;
                                }
                                break;//跳出while(1)循环
                            }
                        }
                }
            }
        }
    }
}
void DelayUs2x(unsigned char t)
{
    while(--t)
    {
        ;
    }
}
void DelayMs(unsigned char t)
{
    while(t--)
    {
        //大致延时1mS
        DelayUs2x(245);
        DelayUs2x(245);
    }
}

使用特权

评论回复
31
创隆电子| | 2013-8-18 07:37 | 只看该作者
刚你改好的程序,其他地方没有动,只是分了一下层次。再有好像在关闭时,如果K2不松手在按下K1时会相应一个循环。(LED亮与灭)

使用特权

评论回复
32
oldzhang| | 2013-8-18 12:05 | 只看该作者
本帖最后由 oldzhang 于 2013-8-18 12:25 编辑
KEY1=1;
KEY2=1;
while(1)
{if(Flag==0&&KEY1==0)   

这个大括号,扩住了全部呀

还有,Flag只有两个0,1两个值,为什么要用int型而不用bit型呢

使用特权

评论回复
33
samsunghellome|  楼主 | 2013-8-18 13:52 | 只看该作者
oldzhang 发表于 2013-8-18 12:05  这个大括号,扩住了全部呀   还有,Flag只有两个0,1两个值,为什么要用int型而不用bit型呢 ...

对,flag应该是bit类型的,呵呵,谢了!

使用特权

评论回复
34
lanchong1980| | 2013-8-21 11:43 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则