如何使串口通信和按钮动作一起进行
时间: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闪亮,但是按钮却不起任何作用?盼各位大虾指导一二。
#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)中!
谢谢大家!