c51运行16*16的点阵显示器,但显示器仅仅显示一行的问题

问题遇到的现象和发生背景

用uxision5按照学校给的代码写下,然后没有报错,但在proteus里边运行出错
任务是16*16的led点阵显示器,led灯只在一行运行,不运行到下一行

用代码块功能插入代码,请勿粘贴截图

#include
#define uchar unsigned char
#define uint unsigned int
#define out0 P0
#define out1 P1
#define out2 P2
void delay(uchar j)
{
uchar i=250;
for(;j>0;j--)
{
while(--i);
i=100;
}
}
uchar code string[]=
{
// 字符:李
// UNICODE编码: 0x674E
// 当前取模方式为:1、先横后纵 左往右取 高位在左 依次向下
// 点阵宽度:16
// 点阵高度:16
0xFF,0xFF,
0xFE,0xFF,
0xFE,0xFF,
0x80,0x03,
0xFA,0xBF,
0xF6,0xDF,
0xEE,0xEF,
0x9F,0xF3,
0xF0,0x3F,
0xFF,0x7F,
0xFE,0xFF,
0x80,0x03,
0xFE,0xFF,
0xFE,0xFF,
0xF8,0xFF,
0xFF,0xFF,

// 字符:平
// UNICODE编码: 0x5E73
// 当前取模方式为:1、先横后纵 左往右取 高位在左 依次向下
// 点阵宽度:16
// 点阵高度:16
0xFF,0xFF,
0xC0,0x07,
0xFE,0xFF,
0xFE,0xFF,
0xEE,0xEF,
0xF6,0xEF,
0xF6,0xDF,
0xFE,0xFF,
0x80,0x03,
0xFE,0xFF,
0xFE,0xFF,
0xFE,0xFF,
0xFE,0xFF,
0xFE,0xFF,
0xFE,0xFF,
0xFF,0xFF,

// 字符:运
// UNICODE编码: 0x8FD0
// 当前取模方式为:1、先横后纵 左往右取 高位在左 依次向下
// 点阵宽度:16
// 点阵高度:16
0xFF,0xFF,
0xFF,0xFF,
0xDC,0x0F,
0xEF,0xFF,
0xEF,0xFF,
0xFF,0xFF,
0xF8,0x03,
0x8F,0x7F,
0xEF,0x7F,
0xEE,0xDF,
0xED,0xEF,
0xE8,0x07,
0xEF,0xF7,
0xD7,0xFF,
0xB8,0x03,
0xFF,0xFF,

};
void main()
{
uchar i,j,n;
while(1)
{
for(j=0;j<3;j++)
{
for(n=0;n<40;n++)
{
for(i=0;i<16;i++)
{
out1=1%16;
out0=string[i2+j32];
out2=string[12+1+j32];
delay(4);
out0=0xff;
out2=0xff;
}
}
}
}
}

运行结果及报错内容

在Proteus 8 Professional里卡bug了

我的解答思路和尝试过的方法

崩溃了

我想要达到的结果

能够完美运行出自己静态下的名字。

img

img

img


就是这样的运行结果