大神门们帮我看看,在AT89S51的开发板上为什么实现不了程序如下:#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P2^0;
sbit k2=P2^1;
sbit k3=P2^2;
sbit k4=P2^3;
bit ldelay;//长定时溢出标志,预置为0
uchar speed=10;//设置一个变量,保默认的跑马灯的移动速度
uchar t=0;
/ar code dx516[3]=_at_0x003b;//为了仿真设置的
void main()
{
uchar code ledp[12]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff};
uchar code ledp1[12]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef};
uchar ledi;//指示显示顺序
TMOD = 0x10; TH1 = 0x0FF;TL1 = 0x0EC;
EA=1;
ET1=1;
TR1=1;
while(1)
{
if(ldelay)//发现有时间溢出标志进入处理
{
ldelay=0;//清楚标记
P0=ledp[ledi];
P2=ledp1[ledi];
ledi++;
if(ledi==12)
{
ledi=0;
}
}
if(!k1)speed=50;if(!k2)speed=25;if(!k3)speed=10;if(!k4)speed=5;
}
}
time1() interrupt 3
{
t++;
if((t==speed)||(t>=50))//比较一个变量的数值 以实现变量的溢出 同时限制的最慢速度
{
t=0;
ldelay=1;//每次长时间的溢出,就置一个标记 以便主程序处理
}
TH1 = 0x0FF;TL1 = 0x0EC; |