微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 如何使串口通信和按钮动作一起进行

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

时间:10-02 整理:3721RD 点击:
#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闪亮,但是按钮却不起任何作用?盼各位大虾指导一二。

你的按键函数是否正确,或者你的逻辑表达是否有问题,按照正常来讲不会有什么太大的问题

你在中断里面傻等,按键是不起作用,中断里读数据,没有就需要立即跳出来

程序是不是没有贴完啊?

没有WHILE循环,上电后串口没接受到数据,MAIN函数在你还没来得及按按键就很快就执行完啦!可以试下把初始化以后的程序放到while(1)中!

谢谢大家!

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

网站地图

Top