请各位大哥帮小弟看看这个程序
#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)有没有接电源?