发表于:2012/2/24 21:56:09
#0楼
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code led_code[]={0x88,0xbe,0xc4,0x94,0xb2,0x91,0x81,0xbc,0x80,0x90,0xa0,0x83,0xc7,0x86,0xc1,0xe1};//LED七段码
uchar code *pc;
uchar data zancun[4]={0x00,0x00,0x00,0x00}; //反复调试已经找到,就是这里的数组zancun 问题 但就是看不出程对其内部元素zuncun【1】的存取操作有什么问题。
key_panduan(uchar data x,uchar data y);
sm_key();
main()
{
uchar data i;
SP=0xcf;
P0=0xf0;
TMOD=0x22;
TL0=(256-250)%256;
TH0=(256-250)%256;
IE=0x82;
TR0=1;
pc=led_code;
for(i=0;i<=4;i++)
zancun[i]=3;
while(1)
{
P2=*pc;
sm_key();
;
}
}
void enter0() interrupt 1
{
TH0=(256-250)%256;
TL0=(256-250)%256;
if(P0==0xff)P0=0x00;
else P0++;
pc=led_code;
pc=pc+zancun[1];//这个位置的数组元素zancun【1】
if(pc>=&led_code[16])pc=led_code;
}
key_panduan(uchar data x,uchar data y)
{
uchar data z=0;
switch(y)
{
case 0xe0: z=0x00+x;break;
case 0xd0: z=0x10+x;break;
case 0xb0: z=0x20+x;break;
case 0x70: z=0x30+x;break;
default: break;
}
return z;
}
sm_key()
{
uchar data mm,nn;
mm=P0;
nn=mm&0xf0;
if(nn!=0xf0&&zancun[0]!=mm)
{
zancun[0]=mm;
mm=mm&0x0f;
zancun[1]=key_panduan(mm,nn);//这个位置的数组元素zancun【1】
}
;
}
//以上代码编译没有任何错误与警告,编译很成功。它是一个数码显示程序,但一旦在试验板上调试,所有数码管出现全亮闪烁,不能稳定输出
//反复测试程序,发现一旦把以上两个引用到的数组元素zancun【1】其中一个改为zancun【2】或其他,程序就能正常输出,数码管显示3;
//但这样就不能实现数组元素变量的传递。
//以上程序就是看不出数组元素引用,问题出来 在哪里。?求各位老师傅帮忙解析。
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code led_code[]={0x88,0xbe,0xc4,0x94,0xb2,0x91,0x81,0xbc,0x80,0x90,0xa0,0x83,0xc7,0x86,0xc1,0xe1};//LED七段码
uchar code *pc;
uchar data zancun[4]={0x00,0x00,0x00,0x00}; //反复调试已经找到,就是这里的数组zancun 问题 但就是看不出程对其内部元素zuncun【1】的存取操作有什么问题。
key_panduan(uchar data x,uchar data y);
sm_key();
main()
{
uchar data i;
SP=0xcf;
P0=0xf0;
TMOD=0x22;
TL0=(256-250)%256;
TH0=(256-250)%256;
IE=0x82;
TR0=1;
pc=led_code;
for(i=0;i<=4;i++)
zancun[i]=3;
while(1)
{
P2=*pc;
sm_key();
;
}
}
void enter0() interrupt 1
{
TH0=(256-250)%256;
TL0=(256-250)%256;
if(P0==0xff)P0=0x00;
else P0++;
pc=led_code;
pc=pc+zancun[1];//这个位置的数组元素zancun【1】
if(pc>=&led_code[16])pc=led_code;
}
key_panduan(uchar data x,uchar data y)
{
uchar data z=0;
switch(y)
{
case 0xe0: z=0x00+x;break;
case 0xd0: z=0x10+x;break;
case 0xb0: z=0x20+x;break;
case 0x70: z=0x30+x;break;
default: break;
}
return z;
}
sm_key()
{
uchar data mm,nn;
mm=P0;
nn=mm&0xf0;
if(nn!=0xf0&&zancun[0]!=mm)
{
zancun[0]=mm;
mm=mm&0x0f;
zancun[1]=key_panduan(mm,nn);//这个位置的数组元素zancun【1】
}
;
}
//以上代码编译没有任何错误与警告,编译很成功。它是一个数码显示程序,但一旦在试验板上调试,所有数码管出现全亮闪烁,不能稳定输出
//反复测试程序,发现一旦把以上两个引用到的数组元素zancun【1】其中一个改为zancun【2】或其他,程序就能正常输出,数码管显示3;
//但这样就不能实现数组元素变量的传递。
//以上程序就是看不出数组元素引用,问题出来 在哪里。?求各位老师傅帮忙解析。