C语言程序,求大神看看那里错了

这是一个数字时钟程序:我运行了一遍,有7个错误说

cnt_Buff和Val_ADJ 无法识别身份,,,怎么改???大神求帮忙!本人菜鸟
#include <reg51.h>
unsigned char code DSY_CODE[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
//数字 0 1 2 3 4 5 6 7 8 9
0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff };
// A b C d E F 全灭16
unsigned char code DSY_WEI[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80} ;
//位置代码,编号0 全熄灭,1、2、3、…… 对应自左至右的数码管
unsigned char DSY_BUFFER[]={0,0,0xBF,0,0,0xBF,0,0}; //0xBF 显示 “ - ”

unsigned char DSY_IDX,Key_State,hh,mm,ss,s20;

sbit K1=P1^0;

sbit K2=P1^1;
sbit K3=P1^2;

void delayms(unsigned char ms)
{
unsigned char i;
while(ms--) for(i=0;i<120;i++) ;
}
void Increase_Hour()
{
if(++hh>23)
{
hh=0;
}
DSY_BUFFER[0]=DSY_CODE[hh/10];
DSY_BUFFER[1]=DSY_CODE[hh%10];
}

void Increase_Minute()
{
if(++mm>59)
{
mm=0;
Increase_Hour();
}
DSY_BUFFER[3]=DSY_CODE[mm/10];
DSY_BUFFER[4]=DSY_CODE[mm%10];
}
void Increase_Second()

{
if(++ss>59)
{
ss=0;
Increase_Minute();
}
DSY_BUFFER[6]=DSY_CODE[ss/10];
DSY_BUFFER[7]=DSY_CODE[ss%10];

if(cnt_Buff<12)cnt_Buff++;
}

void T0_INT() interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
P2=DSY_WEI[0];
P0=DSY_BUFFER[DSY_IDX];
P2=DSY_WEI[DSY_IDX+1];
DSY_IDX++;
DSY_IDX%=8;
}

void T1_INT() interrupt 3
{
TH1=(65536-(50000-Val_ADJ))/256;
TL1=(65536-(50000-Val_ADJ))%256; //Val_ADJ 时间校正 无符号数
if(++s20==20)
{
s20=0;
Increase_Second();
}
}

void main()
{
unsigned char i;
TMOD=0x11;
TH1=(65536-50000-Val_ADJ)/256;
TL1=(65536-50000-Val_ADJ)%256;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TCON=0x01; //IT0=1,外部中断 0下降沿触发
EA=1;
ET0=1;
ET1=1;
hh=12;
mm=0;
ss=0;

DSY_BUFFER[0]=DSY_CODE[hh/10];
DSY_BUFFER[1]=DSY_CODE[hh%10];
DSY_BUFFER[3]=DSY_CODE[mm/10];
DSY_BUFFER[4]=DSY_CODE[mm%10];
DSY_BUFFER[6]=DSY_CODE[ss/10];
DSY_BUFFER[7]=DSY_CODE[ss%10];

DSY_IDX=0;
TR0=1;
TR1=1;

Key_State=0xff;
while(1)
{
if(P1^Key_State)
{
delayms(10);
if(P1^Key_State)
{
//EA=0;
Key_State=P1;
if(!K1)
{
Increase_Hour();
}
if(!K2)
{
if(++mm>59) mm=0;
DSY_BUFFER[3]=DSY_CODE[mm/10];
DSY_BUFFER[4]=DSY_CODE[mm%10];
}

if(!K3)
{
if(++ss>59) ss=0;
DSY_BUFFER[6]=DSY_CODE[mm/10];
DSY_BUFFER[7]=DSY_CODE[mm%10];
}
}
EA=1;
}

if(cnt_Buff==10)
{
DSY_BUFFER[0]=DSY_CODE[hh/10];
DSY_BUFFER[1]=DSY_CODE[hh%10];
DSY_BUFFER[3]=DSY_CODE[mm/10];
DSY_BUFFER[4]=DSY_CODE[mm%10];
DSY_BUFFER[6]=DSY_CODE[ss/10];
DSY_BUFFER[7]=DSY_CODE[ss%10];
}
}
}

这程序是我之前回答的一个程序。
Val_ADJ 是用来 调整时钟快慢的。

cnt_Buff 是用来计数的,原来的程序中 用作 调整状态的倒计时。当时秒钟没有按键动作时,始终回到正常显示走时状态。

程序中使用的 P2 和 P0 口,你画的图使用了 P3 和 P0 口,注意 数码管是共阳极追问

unsigned char DSY_IDX,Key_State,hh,mm,ss,s20;

后面加上

unsigned char Val_ADJ=200;

  unsigned char cnt_Buff=0;

运行了一遍,,有的数字显示不完整!一开始是12:00:00,,怎么改成00:00:00啊?并且让他完整了呢

追答

hh=12;
mm=0;
ss=0;
这是初始时间设置。

三个按键是调整时分秒的。

检查此段 有没错误?
P2=DSY_WEI[0];
P0=DSY_BUFFER[DSY_IDX];
P2=DSY_WEI[DSY_IDX+1];

追问

错误是这样的

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-15
不知道这两个变量是哪里来的,不过Val_ADJ从位置上可以看出来,它等于:定时时长/指令周期,这个数你可以自己拿捏,声明这个变量,这个值越大定时时间越长,你可以先试个数看看效果,再改一下,cnt_Buff应该是个计数变量,你可以赋个0试一下:在
unsigned char DSY_IDX,Key_State,hh,mm,ss,s20;
后面加上
unsigned char Val_ADJ=200;
unsigned char cnt_Buff=0;
两句看看效果吧~51爱好者追问

按照你改的运行了一遍,,有的数字显示不完整!一开始是12:00:00,,怎么改成00:00:00啊

第2个回答  2013-12-15
把错误代码贴出来