如何使串口通信和按钮动作一起进行

2019-07-16 04:13发布

#include <REG52.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit K1=P1^0;
sbit K2=P1^1;
//延时子程序模块
//**********************************************
void mdelay(uint delay)
{ uchar i;
  for(;delay>0;delay--)
     {for(i=0;i<115;i++) //1ms延时.
         {;}
     }
}
//***********************************************

//***************************************
//串口通信模块
//***************************************
//**********************************
//串口初始化程序
//**********************************//
void uartint(void)
{
SCON=0x40;
PCON=0x00;
REN=1;
TI=0;
RI=0;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
//**********************************
//串口发送字符程序
//**********************************
void sendchar(uchar _data)
{
SBUF=_data;
while(TI==0);
TI=0;
}
//**********************************
//串口接收字符程序
//**********************************
uchar inceptchar(void)
{
uchar uart_data;
while(RI==0);
RI=0;
uart_data=SBUF;
return(uart_data);
}
//************************************
//主程序
//实现功能:串口接收字符03,LED1亮0.5秒后灭,LED2亮。
//串口接收字符04,LED2灭,0.5秒后,LED3亮。
//按下按钮K1,LED1、LED2灯亮,按下按钮K2,LED3灯亮。
//*************************************
void main( )
{
  uartint();
  if((inceptchar()==0x03))
      {
   LED1=0;
   mdelay(500);
   LED1=1;
   LED2=0;
   }  
  
  else if((inceptchar()==0x04))
      {
   LED2=1;
   mdelay(500);
   LED3=0;
   }
  else if(K1==0)
   {
   mdelay(15);
    if(K1==0)
    {
    LED1=LED2=0;
    }
   while(!K1);
   }
  
  else if(K2==0)
   {
   mdelay(15);
    if(K2==0)
    {
    LED3=0;
    }
   while(!K2);
   }
  

}
问题:串口可以正常接收数据并有相应的LED闪亮,但是按钮却不起任何作用?盼各位大虾指导一二。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。