#include <reg51.h>
#define unit unsigned int
#define uchar unsigned char
bit BT0;
void delay(unit n);
main()
{
unit b[10]={0x0C0,0x0F9,0x0A4,0x0B0,0x99,0x92,0x82,0x0F8,0x80,0x90};
unit a,d,timecount;
uchar x;
TMOD=0X01;//T0工作方式1
TH0=0X0B1;
TL0=0X0E0;
TR0=1;//开启T0
EA=1;//开启总中断
ET0=1;//开启T0中断
timecount=25;
d=10;
a=0;
while (1)
{
x=a/d;//把A的十位分离
P2=b[x];//查数组表
P3=0X01;//开十位片选
delay(1);//动态扫描
P3=0X00;//关十位片选
x=a%d;//把A的个位分离
P2=b[x];//查数组表
P3=0X02;//开个位片选
delay(1);//动态扫描
P3=0X00;//关十位片选
if (BT0==1)//等待中断的到来
BT0=1;
if (timecount==0)//如果到了0.5S,A加1
{a=a+1;
timecount=25;
}
else
timecount--;
}
}
void delay(unit n)//延时程序
{ unit y;
unit j;
for (y=n;y>0;y--)
for(j=5000;j>0;j--)
{;}
}void T0SER (void) interrupt 1 using 1//T0重新赋初植
{
TH0=0X0B1;
TL0=0X0E0;
BT0=1;
}
类似这样的定时器中断设计00-99的启动停止及清除
|