我觉得这个程序按键和串口通信的问题不好解决,请帮忙.....
时间:10-02
整理:3721RD
点击:
#include <REG52.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
//延时子程序模块
//**********************************************
void mdelay(uint delay)
{ uchar i;
for(;delay>0;delay--)
{for(i=0;i<115;i++) //1ms延时.
{;}
}
}
//***********************************************
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
sbit LED5=P1^4;
sbit LED6=P1^5;
sbit K1=P1^7;
sbit K2=P3^3;
sbit K3=P3^4;
sbit K4=P3^5;
//***************************************
//串口通信模块
//***************************************
//**********************************
//串口初始化程序
//**********************************//
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);
}
//************************************
//主程序
//实现功能:K1为状态按钮,共有9种状态。第一种状态下,接收串口信号,
//产生不同的现象,然后依次进入第2,第3,……第9种状态。
//状态9向上位机发送串口//信号。
//*************************************
main( )
{
uartint();
while(1)
{
if(K1==0){
mdelay(15);
if(K1==0){
num++;
while(!K1); //等待按键释放
}
}
switch(num)
{
case 0: //状态1
LED1=0;
if(inceptchar()==0x11)
{
LED2=0;
}
if(inceptchar()==0x22)
{
LED3=0;
}
if((inceptchar()==0x44))
{
LED4=0;
LED5=0;
LED6=0;
mdelay(1000);
LED1=1;
LED2=1;
LED3=1;
LED4=1;
LED5=1;
LED6=1;
}
break;
case 1: //状态2
LED1=LED2=LED3=0;
break;
case 2: //状态3
LED2=LED3=0;
break;
case 3: //状态4
LED4=0;
break;
case 4: //状态5
LED5=LED6=0;
break;
case 5: //状态6
LED1=LED3=0;
break;
case 6: //状态7
LED2=LED4=0;
break;
case 7: //状态8
LED2=LED3=0;
break;
case 8: //状态9
sendchar('A');
LED1=0;
if(inceptchar()==0x55)
{
LED6=0;
mdelay(800);
LED1=1;
LED6=1;
break;
}
}
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
//延时子程序模块
//**********************************************
void mdelay(uint delay)
{ uchar i;
for(;delay>0;delay--)
{for(i=0;i<115;i++) //1ms延时.
{;}
}
}
//***********************************************
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
sbit LED5=P1^4;
sbit LED6=P1^5;
sbit K1=P1^7;
sbit K2=P3^3;
sbit K3=P3^4;
sbit K4=P3^5;
//***************************************
//串口通信模块
//***************************************
//**********************************
//串口初始化程序
//**********************************//
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);
}
//************************************
//主程序
//实现功能:K1为状态按钮,共有9种状态。第一种状态下,接收串口信号,
//产生不同的现象,然后依次进入第2,第3,……第9种状态。
//状态9向上位机发送串口//信号。
//*************************************
main( )
{
uartint();
while(1)
{
if(K1==0){
mdelay(15);
if(K1==0){
num++;
while(!K1); //等待按键释放
}
}
switch(num)
{
case 0: //状态1
LED1=0;
if(inceptchar()==0x11)
{
LED2=0;
}
if(inceptchar()==0x22)
{
LED3=0;
}
if((inceptchar()==0x44))
{
LED4=0;
LED5=0;
LED6=0;
mdelay(1000);
LED1=1;
LED2=1;
LED3=1;
LED4=1;
LED5=1;
LED6=1;
}
break;
case 1: //状态2
LED1=LED2=LED3=0;
break;
case 2: //状态3
LED2=LED3=0;
break;
case 3: //状态4
LED4=0;
break;
case 4: //状态5
LED5=LED6=0;
break;
case 5: //状态6
LED1=LED3=0;
break;
case 6: //状态7
LED2=LED4=0;
break;
case 7: //状态8
LED2=LED3=0;
break;
case 8: //状态9
sendchar('A');
LED1=0;
if(inceptchar()==0x55)
{
LED6=0;
mdelay(800);
LED1=1;
LED6=1;
break;
}
}
说你的问题
又是一个猜问题的家伙
问题是第一个状态完成之后,再按状态按钮,不能进入下一个状态了。请各位大虾指点一下。