单片机利用定时器中断制作秒表
#include
#define LED P0
sbit LA=P2^4;
sbit LB=P2^3;
sbit LC=P2^2;
sbit start=P3^1;
sbit pulse=P3^0;
sbit end=P3^2;
char count;
unsigned int sec;
char i0,i1,i2,i3;
unsigned char Display[10]= {0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
void show(char j0,char j1,char j2,char j3);
void TransfromData(unsigned int sec);
void Delay10ms();
void main()
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
while(1)
{
show(0,0,0,0);
if(start==0 )
{
Delay10ms();
if(start==0)
{
TR0=1;
while(pulse!=0 && end!=0)
{
TransfromData(sec);
show(i0,i1,i2,i3);
}
if(end==0)
{
TR0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
sec=0;
count=0;
while(start != 0)
{
show(0,0,0,0);
}
}
if(pulse==0)
{
TR0=0;
while(start != 0)
{
TransfromData(sec);
show(i0,i1,i2,i3);
}
TR0=1;
}
}
}
}
}
void TransfromData(unsigned int s) {
i3=(s/1000);
i2=(s-i3*1000)/100;
i1=(s-i3*1000-100*i2)/10;
i0=s;
}
void int_T0() interrupt 1 {
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
count++;
if(count==20)
{
sec++;
count=0;
}
}
void show(char j0,char j1,char j2,char j3)
{
char i;
char j;
for(i=0; i<4; i++)
{
switch(i)
{
case(0):LA=0;LB=0;LC=0;LED=Display[j0];break;
case(1):LA=0;LB=0;LC=1;LED=Display[j1];break;
case(2):LA=0;LB=1;LC=0;LED=Display[j2];break;
case(3):LA=0;LB=1;LC=1;LED=Display[j3];break;
}
j=10;while(j--) ;
LED=0x00;
}
}
void Delay10ms()
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}