微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 我觉得这个程序按键和串口通信的问题不好解决,请帮忙.....

我觉得这个程序按键和串口通信的问题不好解决,请帮忙.....

时间: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;
   }
}

说你的问题

又是一个猜问题的家伙

问题是第一个状态完成之后,再按状态按钮,不能进入下一个状态了。请各位大虾指点一下。

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

网站地图

Top