遇到这个情况有可能是某一个数组太大,然后单片机内部数据存储区不够用,
所以可以把这个数据存在单片机外例如
int led[8][8]={
{1,1,1,1,1,1,1,1},//1
{1,0,0,0,0,0,0,1},//2
{1,0,0,0,0,0,0,1},//3
{1,0,0,0,0,0,0,1},//4
{1,0,0,0,0,0,0,1},//5
{1,0,0,0,0,0,0,1},//6
{1,0,0,0,0,0,0,1},//7
{1,1,1,1,1,1,1,1}//8
}
解决的办法是在变量前面加前缀xdata.改为
xdata int led[8][8]={
{1,1,1,1,1,1,1,1},//1
{1,0,0,0,0,0,0,1},//2
{1,0,0,0,0,0,0,1},//3
{1,0,0,0,0,0,0,1},//4
{1,0,0,0,0,0,0,1},//5
{1,0,0,0,0,0,0,1},//6
{1,0,0,0,0,0,0,1},//7
{1,1,1,1,1,1,1,1}//8
}
这样就可以了,如果是直接修改keil的配置,后面会发生另外的意外,如果使用这个办法不会发生那样的事情。所以这个方法应该更好,例如把数据全部存在外部,那么访问速度会更慢
因为使用如果要使用上面的方法,或者把keil的设置更改为large,最后在Proteus仿真的时候都要外接一个RAM才能够模拟,而初学者是没有学习怎么外接RAM的,所以最好可以这么改
unsiged char code led[8][8]={
{1,1,1,1,1,1,1,1},//1
{1,0,0,0,0,0,0,1},//2
{1,0,0,0,0,0,0,1},//3
{1,0,0,0,0,0,0,1},//4
{1,0,0,0,0,0,0,1},//5
{1,0,0,0,0,0,0,1},//6
{1,0,0,0,0,0,0,1},//7
{1,1,1,1,1,1,1,1}//8
}
这个code的意思:表示要把数据粗存在程序储存区,AT89C51单片机有64K之多,远远大于128B
足够用了。