本帖最后由 maxj5633 于 2013-7-3 22:37 编辑
用keil调试下面程序,个人感觉程序乱执行,从“
*************(1)“直接跳到
” **************(2)“行,实在理解不了,帮忙看一下?我没有手动使P3.3置零。
#include <reg51.h>
char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf} ;
sbit k1=P3^2;
sbit k2=P3^3;
char sec100,min,sec,hour;
void delay(int k)
{
int m,n;
for(m=0;m<k;m++)
{for(n=0;n<120;n++) ; }
}
char buffer[8];
void dsy_handle()
{
buffer[7]=hour/10;
buffer[6]=hour%10;
buffer[5]=16;
buffer[4]=min/10;
buffer[3]=min%10;
buffer[2]=16;
buffer[1]=sec/10;
buffer[0]=sec%10;
}
char display()
{
P2=0x80;
P0=tab[buffer[0]];
delay(2);
P2=0x40;
P0=tab[buffer[1]];
delay(2);
P2=0x20;
P0=tab[buffer[2]];
delay(2);
P2=0x10;
P0=tab[buffer[3]];
delay(2);
P2=0x08;
P0=tab[buffer[4]];
delay(2); *************(1)
P2=0x04;
P0=tab[buffer[5]];
delay(2);
P2=0x02;
P0=tab[buffer[6]];
delay(2);
if(hour>9)
{
P2=0x01;
}
else
{
P2=0x00;
}
P0=tab[buffer[7]];
delay(2);
}
void INC_hour()
{
hour++;
if(hour>23)
{hour=0;}
}
void INC_min()
{
min++;
if(min>59)
{min=0;
INC_hour();
}
}
void INC_sec()
{
sec++;
if(sec>59)
{sec=0;
INC_min();}
}
void int0 () interrupt 0
{
delay(100);
if(INT0==0)
{INC_hour();}
}
void int1 () interrupt 1
{
delay(100); **************(2)
if(INT1==0)
{INC_min(); }
}
void
time0() interrupt 2
{
TH0=0xDC;
TL0=0x00;
sec100++;
if(sec100>=100)
{sec100=0;
INC_sec();}
}
void init ()
{
TMOD=0x01;
TH0=0xDC;
TL0=0x00;
TR0=1;
ET0=1;
IT0=0;
EX0=1;
EX1=1;
IT1=0;
EA=1;
}
void main ()
{
init ();
P0=0xff;
P2=0x00;
hour=9;
min=58;
sec=0;
sec100=0;
while (1)
{
dsy_handle();
display();
}
}
一周热门 更多>