led光立方与上位机通信程序问题,求大神帮忙!
上位机不断给单片机发数据,单片机接收到数据后,存到一个二维数组中,再调用二维数组,送给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号
正在做, 观望观望