微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请各位大哥帮小弟看看这个程序

请各位大哥帮小弟看看这个程序

时间:10-02 整理:3721RD 点击:

#include<reg52.h>
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit K1=P2^0;
sbit K2=P2^1;
unsigned int K3=0;
void main()
{
        while(1)
        {
                P1_0=1;
                P1_1=0;
                if(K1==0&&K2==0){K3=1;}
                while(K3==1)
                {
                        P1_0=0;
                        P1_1=1;
                        if(K1==1||K2==1){K3=0;}
                }       
        }
}
目的就是当两个按键同时按下时红灯亮,否则绿灯亮。我烧写了这个程序,上电后红灯一直亮着,按键按下都没反应,复位按键也没用,啥原因呢?这个程序要怎么改呢?


试试这个
#include<reg52.h>
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit K1=P2^0;
sbit K2=P2^1;
void main()
{
        while(1)
        {
                P1_0=1;
                P1_1=0;
                if(K1==0&&K2==0)
                 {
                       P1_0=0;
                        P1_1=1;
                  }
               
        }
}

能看出我那个有什么问题吗?

#include<reg52.h>
sbit P1_0=P1^0;
sbit p1_1=P1^1;
sbit K1=P2^0;
sbit K2=P2^1;
unsigned char k3=0;
void delay(unsigned char)
main()
{
     K1=1;
     K2=1;
     P1_0=1;
     P1_1=0;
     if((K1==0)&&(K2=0))
     {delay(10);
     if((K1==0)&&(K2==0))
     K3=1;}
     while(K3==1)
     {
      P1_0=0;
      P1_1=1;
      if((K1==1)||(K2==1))
      K3=0;
     }
}
void delay(unsigned char s)
{
     unsigned i,j;
     for(i=s;j>0;i--)
         for(j=100;j>0;j--);
}
试一下这个程序,你没有去抖,检测按键的时候先要给端口置位。

我是觉得你这个开关应该改为自锁开关,不然就算你按下去了,瞬时状态是达到了,但时间很短又恢复原来状态了。

嗯,好的,我试试,谢谢。

嗯是的,我如果是一直按着效果也一样的吧!

是一样的,难道不行?

是的,红灯亮,绿灯怎么也不亮。

你这个程序编译了好多错误呀!

把错误发上来我看看

这个应该是缺少了一个延时吧

试试这个吧,我仿真过了,可行。但要把按键换成自锁开关。你先按住不放试试。把我程序的脚位换下。
#include"reg52.h"
#define uchar unsigned char
#define uint  unsigned int
sbit ledred  =P3^6;
sbit ledgreen=P3^7;
sbit key1    =P2^3;
sbit key0    =P2^2;//换成你的脚位
uchar i;
void main()
{  
  ledred=1;
  ledgreen=1;
   while(1)
    {           
      if((key0==0)&&(key1==0))         //同时按下开关绿灯亮
          {                        
                    ledred=1;
                        ledgreen=0;
                 }              
       if((key0==0||key1==0)&&(key0!=key1))
            {
                  ledred=0;
                  ledgreen=1;
                  while((key1==1)&&(key0==1))
                    {ledred=1;ledgreen=1;}  
                }
                          
}
}

好的 我再试试,谢谢。

还是不行,以上每个程序都一样,红灯亮,绿灯不亮的。是不是的电路有问题呢?


#include<reg52.h>
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit K1=P2^0;
sbit K2=P2^1;
unsigned int K3=0;
void main()
{
        while(1)
        {
                P1_0=1;
                P1_1=0;
                if(K1==0||K2==0){K3=1;}
                while(K3==1)
                {
                        P1_0=0;
                        P1_1=1;
                        if(K1==1||K2==1){K3=0;}
                }        
        }
}

电路这么接有问题吗?

这个程序还是不行哦。我想是不是电路的问题呢?

你板子上的31脚(EA)有没有接电源?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top