那位大侠帮忙看下这个程序那里出问题了,为什么在延时的时候多定义一个变量就可以

#include <reg52.h>//包含头文件
sbit duanma=P2^1;
sbit weima=P2^0;//定义锁存使能端
#define pa P0//定义数据端口,程序中遇到pa用P0代替
#define pb P1
unsigned char code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};//段码0~F
unsigned char code table2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//对应的位码
unsigned char temp[10];//存储显示值的全局变量
unsigned char code mima[]={1,2,3,4,5,6,7,8};//密码,存储于ROM
void delayms(unsigned char);//延时函数声明
unsigned char scan(void);//扫描函数声明
unsigned char duanzi(void);//段码显示数据函数声明
void xianshi(unsigned char kaishi,unsigned char zongg);//显示函数声明
void stop0(void);//中断初始化声明
void main(void)
{
unsigned char i,j,num;
unsigned char tem[8];
bit flag;
stop0();
while(1)
{
num=duanzi();
if(num!=0xff)
{
if(i==0)
{
for(j=0;j<8;j++)
temp[j]=0;
}
if(i<8)//此时,i的值为多少。前面好像没有给i赋值。??
{
tem[i]=table1[num];//将扫描到的数据存入临时数组中
for(j=0;j<8;j++)
temp[7-i+j]=tem[j];
}
i++;
if(i==9)
{
i=0;
flag=1;
for(j=0;j<8;j++)
flag=flag&(temp[j]==table1[mima[j]]);
for(j=0;j<8;j++)
temp[j]=0;
if(flag)
{
temp[0]=0x3f;
temp[1]=0x73;
temp[2]=0x79;
temp[3]=0x54;
}
else
{
temp[0]=0x79;
temp[1]=0x50;
temp[2]=0x50;
}
}
}

}
}
/*中断0开启*/
void stop0()
{
TMOD |=0X01;
EA=1;
ET0=1;
TR0=1;
}
void delayms(unsigned char t)
{
unsigned int x;//为什么这里加个,j就可以运行,而不加不行进行按键扫描呢?????????、
while(t--)
{
for(x=0;x<245;x++);
for(x=0;x<245;x++);
}
}
unsigned char duanzi(void)
{
switch(scan())
{
case 0x7e:return 0;break;
case 0x7d:return 1;break;
case 0x7b:return 2;break;
case 0x77:return 3;break;
case 0xbe:return 4;break;
case 0xbd:return 5;break;
case 0xbb:return 6;break;
case 0xb7:return 7;break;
case 0xde:return 8;break;
case 0xdd:return 9;break;
case 0xdb:return 10;break;
case 0xd7:return 11;break;
case 0xee:return 12;break;
case 0xed:return 13;break;
case 0xeb:return 14;break;
case 0xe7:return 15;break;
default:return 0xff;break;
}
}
unsigned char scan(void)
{
unsigned char val;
pb=0xf0;
if(pb!=0xf0)
{
delayms(10);
if(pb!=0xf0)
{
pb=0xf0;
val=pb|0x0f;
pb=val;
val=pb;
pb=0xf0;
while(pb!=0xf0);
delayms(10);
while(pb!=0xf0);
return val;
}
}return 0xff;
}
void stop(void) interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
xianshi(0,8);
}
void xianshi(unsigned char kaishi,unsigned char zongg )
{
static unsigned char i=0;

pa=0;
duanma=1;
duanma=0;
pa=table2[i+kaishi];
weima=1;
weima=0;
pa=temp[i];
duanma=1;
duanma=0;
i++;
if(i==zongg)
i=0;
}

第1个回答  2013-11-08
这些后缀解释数字常量的类型。
如果const的无符号

LL说明了很长很长的int常量
ULL说明无符号长长的int常量
相似回答
大家正在搜