当前位置: 代码迷 >> 嵌入开发 >> 单片机有关问题,求来看看
  详细解决方案

单片机有关问题,求来看看

热度:185   发布时间:2016-04-25 08:34:00.0
单片机问题,求大虾来看看
我在用STC12C5A16S2单片机做一个肺活量测试仪器,但是当按下压力传感器的时候,单片机外接的显示器不显示数据或者只显示一个数据,都不正确。正确的应该是在按下的那一刻不停的显示数据,并且数据逐渐增大,直到放开手,数据保留最后的值,不变。

这是我的串口中断函数,用来接收数据:
void uart1_receive() interrupt  4  //中断接受函数    
{  
  uchar d1,RXFHK;//用于提取缓冲器的字符   m之前定义的是全局变量

       
   if(RI==1)
 { 
     d1=SBUF;  //提取字符
if((d1==0x4a)) { G1=1; } //收到J
else if((d1==0x4b)) { G1=0;} //收到K    if((d1==0x4b))
RI=0;// 接受中断标志位为0
if(flag1==0)  //判断是否接收到起始字符
 { if(RXFHK)  //如果接收到起始字符,继续接收后面的
   { uart1_buff[m]=d1&0x0f; // 字符存入数组
     if((m>1)&&(uart1_buff[m-1]==0x0d)&&(uart1_buff[m]==0x0a)) //判断是否接收完一帧数据
   { 
                  flag1=1; // 如果接收完,置位flag1
         RXFHK=0;//L1(uart1_buff); //清零开始标志位RXFHK   
   // if(G1) { f11++;G1=0; }
   }
m++;
   }
   if(!RXFHK&&((d1==0x3a))) //如第一个是开始标志if(!RXFHK&&((d1==0x4b)||(d1==0x4a)))
     {
  RXFHK=1;  //表示接收到开始标志
      m=0;  //计数清零
     
     }
 }
 }

  SBUF=d1; //SBUF=d1; 
      while(!(TI)); // while(!TI);
TI=0;

}


这是主函数里,当传感器传来数据后,显示在显示器上:
 while(flag1)
 { 
        flag1=0;
          L1(uart1_buff);mode1();  
}  
------解决方案--------------------
你把数据通过串口读出,看看具体数据是什么样的,是不是满足你的那个设想。
再看是不是显示驱动的问题
------解决方案--------------------
你的RXFHK是局部变量而且没有初始化,用来判断肯定是一塌糊涂了
  相关解决方案