单片机编程 四个按键 K1=p1.1 K2=p1.2 k3=p1.3 k4=p1.4 p5 p6输出(k1 k3 控制p5,k2k4控制p6)

开机检测k1k2状态
(当k1=0时p5输出低电平;k3=0时p5回到高电平)
(当k2=0时p6输出低电平;k4=0时p6回到高电平)
回到程序顶部在循环
有点像电动车库 K1K2=开门关们 K3K4=到位开关
程序该怎么写呢 尽量简单点 C语言

#include "reg51.h"         //  试试

sbit k1 = P1^0;//按键1

sbit k2 = P1^1;//按键2

sbit k3 = P1^2;//按键3

sbit k4 = P1^3;//按键4

sbit p5 = P1^5; //输出1

sbit p6 = P1^6; //输出2

bit  t1, t2;

void main(void)

{

 while(1)

{

 if(k1==0 && t1==0) {t1=1; p5=1;}

 if(k2==0 && t1==0) {t1=1; p5=0;}

 if(k1==1 && k2==1) {t1=0;}

  if(k3==0 && t2==0) {t2=1; p6=1;}

  if(k4==0 && t2==0) {t2=1; p6=0;}

 if(k3==1 && k4==1) {t2=0;}

}}

追问

谢谢 就你的在实验板上成功了 但有时行有时不行 还有控制怎么是k2k4啊 而且按两个键的话 灯同时亮了 要放在电动门的话 不把门给拉成两块可啊 呵呵

追答

加个互锁条件 就可以了 如 这两句改一下
if(k2==0 && t1==0 && p6==1) {t1=1; p5=0;}
if(k4==0 && t2==0 && p5==1) {t2=1; p6=0;}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-13
看你连分都没有花五分钟给你写一个程序代码如下:

/************************************************************************************************************

#include <REG52.h> //通用89C52头文件 #include "INTRINS.H"
sbit Key_01 = P1^1;
sbit Key_02 = P1^2;
sbit Key_03 = P1^3;
sbit Key_04 = P1^4;

sbit MAIN_A = P1^5;sbit MAIN_B = P1^6;
/*
* 延时
*/
void Delay_1ms(unsigned int time)
{
int x, y;
for(x = time; x > 0; x--)
for(y = 110; y > 0; y--);
}

/*
* 按键扫描子函数
*/
void Key_ScangCmd(void)
{
//=====按键1======//
if(Key_01 == 0) //判断按键1是否等于0
{
Delay_1ms(10); //延时去抖动
if(Key_01 == 0) //判断按键1是否等于0
{
MAIN_A = 0; //P1.5 = 0低电平
}
while(Key01 == 0); //等待松手检测
}
//=====按键3======//
if(Key_03 == 0)
{
Delay_1ms(10);
if(Key_03 == 0)
{
MAIN_A = 1; //P1.5 = 1高电平
}
while(Key03 == 0);
}
//=====按键2======//
if(Key_02 == 0)
{
Delay_1ms(10);
if(Key_02 == 0)
{
MAIN_B = 0; //P1.6 = 0低电平
}
while(Key02 == 0);
}
//=====按键4======//
if(Key_04 == 0)
{
Delay_1ms(10);
if(Key_04 == 0)
{
MAIN_B = 1; //P1.6 = 1高电平
}
while(Key04 == 0);
}
}

/*
* 主函数
*/

int main(void)
{
while(1)
{
Key_ScangCmd(); //进入主程序一直扫描是否有按键按下
}
}

*****************************************************************************************************************/
第2个回答  2013-03-16
;
ORG 0000H
;-----------------------------------------
MOV C, P1.1 ;当k1=0时
MOV P5, C ;p5输出低电平
;-----------------------------------------
MOV C, P1.2 ;当k2=0时
MOV P6, C ;p6输出低电平
;-----------------------------------------
MOV C, P1.3 ;当k3=0时
CPL C
MOV P5, C ;p5回到高电平
;-----------------------------------------
MOV C, P1.4 ;当k4=0时
CPL C
MOV P6, C ;p6回到高电平
;-----------------------------------------
SJMP 0000H
END
第3个回答  2013-03-16
#include<reg51.h>
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;

sbit door1=P1^5;
sbit door2=P1^6;

void delay()
{
unsigned char i,j;
for(i=0;i<20;i++)
for(j=0;j<120;j++);
}
}

main()
{
unsigned char key;
while(1)
{
key=~(P1&0x0f);
if(key!=0)
{
delay();
if(key==~(P1&0x0f))
switch(key)
{
case 0x01:door1=0;break;
case 0x02:door2=0;break;
case 0x04:door1=1;break;
case 0x08:door2=1;break;
default:break;
}
}
}
}本回答被网友采纳