微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > led光立方与上位机通信程序问题,求大神帮忙!

led光立方与上位机通信程序问题,求大神帮忙!

时间:10-02 整理:3721RD 点击:
我用的上位机是:
上位机不断给单片机发数据,单片机接收到数据后,存到一个二维数组中,再调用二维数组,送给573锁存器数据端,可是出问题了,光立方能动,但是不是按照我想要的图案来动,显示乱的,毫无规律的乱动。是怎么回事?求大神帮忙!
我写的接收数据的程序是:
串口中断程序:
void rxd() interrupt 4   
{   
     uchar temp=0;
     ES=0;     
  RI=0;
  rxcnt++;    //前面有一个地址码0xf2,要去掉,>=2时才能接收数据
  if(rxcnt>=2)
  {   
   temp=SBUF;  
   display[xx][yy]=temp;
   yy++;
   if(yy>=8)   
   {
    yy=0;
    xx++;
    if(xx>=8)
    xx=0;
   }
  }
  if(rxcnt>=65)
  rxcnt=0;
  ES=1;  
}
处理程序 ,进定时器中断送给锁存器:
void timer0_isr(void) interrupt 1
{
       uchar i=0;
   for (i=0;i<7;i++)
  {
   P2|=(0x01<<i);  
   P0=~(display[layer][i]);
   P2&=~(0x01<<i);
  }
   P3=(0x01<<layer);
  if(layer<7)
   layer++;
  else
   layer=0;     
}



整个程序为:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar xx=0,yy=0,layer=0,icnt,rxcnt;
uchar display[8][8];
/*uchar display[8][8]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
};        */

void delay(uint z)
{
   uint x,y;
   for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
void init()
{
        TMOD=0x22;
        TH1=0Xff;  
        TL1=0Xff;
        TH0=0xff;
        TL0=0xff;
        TR1=1;       
        TR0=1;
        SCON=0X50;
        PCON|=0x80; //波特率加倍
        EA=1;               
        ES=1;               
        ET0=1;                //开定时器0中断
        PS=1;                //配置串口中断优先
}
void main()
{         
          
    //P3=0x01;
        rxcnt=0;
        init();
        while(1)
        {          
        }
       
   }
void rxd() interrupt 4                  
{                  
            uchar temp=0;
                   ES=0;                         
                RI=0;
                rxcnt++;                         //前面有一个地址码0xf2,要去掉,>=2时才能接收数据
                if(rxcnt>=2)
                {                       
                        temp=SBUF;               
                        display[xx][yy]=temp;
                        yy++;
                        if(yy>=8)                               
                        {
                                yy=0;
                                xx++;
                                if(xx>=8)
                                xx=0;
                        }
                }
                if(rxcnt>=65)
                rxcnt=0;
                ES=1;         
}
void timer0_isr(void) interrupt 1
{
              uchar i=0;
          for (i=0;i<7;i++)
                {
                        P2|=(0x01<<i);               
                        P0=~(display[layer][i]);
                        P2&=~(0x01<<i);       
                }
                 P3=(0x01<<layer);       
                if(layer<7)
                        layer++;
                else
                        layer=0;     
}
                     

void timer0_isr(void) interrupt 1
{
              uchar i=0;
          for (i=0;i<7;i++)
                {
                        P2|=(0x01<<i);               
                        P0=~(display[layer][i]);
                        P2&=~(0x01<<i);        
                }
                 P3=(0x01<<layer);        
                if(layer<7)
                        layer++;
                else
                        layer=0;     
}
把  P0=~(display[layer][i]);
P3=(0x01<<layer);
改为   P0=(display[layer][i]);
P3=~(0x01<<layer);
可能是硬件连接的不一样吧,我的刚开始也是乱的
         

如何获取自封呢

不错不错,赞一个

谢谢小编分享好资料,先收藏了,方便学习交流,我正在收集这方面资料。

我十初学者  帮不了你,

接收到的数据顺序是不对的  要做数据顺序处理

小编的上位机是什么软件啊?我要用labview传送数据,单片机程序压根不会编啊,可以分享下吗?

上位机就是俗说的电脑,下位机就是俗说的单片机,上位机软件就是利用电脑来控制单片机,实现更绚丽的效果.,目前网上有各种上位机软件,还有取模软件.上位机的好处就是你画出你想要的图形,软件自己就会编译成2进制的代码.@牛萍萍1号

正在做, 观望观望

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

网站地图

Top