求助,关于51单片机的自锁开关C程序。

我是个单片机初学者,现在;利用51单片机做个多路自锁开关,参照书籍写了个C程序,对于P1.0那一路没问题,但是要控制六路的话不知道如何衔接代码,求会的朋友帮忙指点一下。
程序如下:端口定义已经写上了,K1~K6是六路微动开关输入,D1~D6是六路的输出。只写出来了一路,对于K1可以正常工作,但是下面不知如何衔接代码了。

#include <reg51.>"
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit K5=P1^4;
sbit K6=P1^5;
sbit D1=P0^0;
sbit D2=P0^1;
sbit D3=P0^2;
sbit D4=P0^3;
sbit D5=P0^4;
sbit D6=P0^5;
void DelayMS(n)
{
unsigned char i, j;
i = 5*n;
j = 218;
do
{
while (--j);
} while (--i);
}

void main()
{ P0=0xff;
P1=0xff;
while(1)
{
if(K1==1)
{
DelayMS(1);
if(K1==0)
{
D1=!D1;
}
}
}
}

你的意思是K1按下,D1输出低电平,再按一次K1,D1输出高电平?

这……这里的按键检测就不需要使用延时了,使用while不用怕会阻塞后面的程序执行。事实在公司写程序,在检测按键时我从来不用延时,当然也不是使用这种while等待按键松开的方式。有兴趣可以一起研究一下,呵呵

#include <reg51.h>
#define KEY1 ( 1 << 0 )
#define KEY2 ( 1 << 1 )
#define KEY3 ( 1 << 2 )
#define KEY4 ( 1 << 3 )
#define KEY5 ( 1 << 4 )
#define KEY6 ( 1 << 5 )

sbit D1 = P0 ^ 0;
sbit D2 = P0 ^ 1;
sbit D3 = P0 ^ 2;
sbit D4 = P0 ^ 3;
sbit D5 = P0 ^ 4;
sbit D6 = P0 ^ 5;

void main( void )
{
while(1)
{
P1 = 0xff;
if( !(P1&KEY1) )
{
D1 = ~D1;
while( !(P1&KEY1) );
}
if( !(P1&KEY2) )
{
D2 = ~D2;
while( !(P1&KEY2) );
}
if( !(P1&KEY3) )
{
D3 = ~D3;
while( !(P1&KEY3) );
}
if( !(P1&KEY4) )
{
D4 = ~D4;
while( !(P1&KEY4) );
}
if( !(P1&KEY5) )
{
D5 = ~D5;
while( !(P1&KEY5) );
}
if( !(P1&KEY6) )
{
D6 = ~D6;
while( !(P1&KEY6) );
}
}
}

温馨提示:答案为网友推荐,仅供参考