51単片機タイマー中断によるストップウォッチの作成
21257 ワード
モノリシックマシンタイマー中断によるストップウォッチの作成
#include
#define LED P0
sbit LA=P2^4; // 138 C,B,A
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; //led 0~4
unsigned char Display[10]= {0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //led
void show(char j0,char j1,char j2,char j3); //
void TransfromData(unsigned int sec); // ,
void Delay10ms(); //
void main()
{
EA=1; //
ET0=1;// 0
TMOD=0x01;// 1
TH0=(65536-50000)/256;// 50ms
TL0=(65536-50000)%6;// 50ms
while(1)
{
show(0,0,0,0);// 0000
if(start==0 )
{
Delay10ms();//
if(start==0)
{
TR0=1; //
while(pulse!=0 && end!=0) // pulse
{
TransfromData(sec);
show(i0,i1,i2,i3);
}
if(end==0)// end
{
TR0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
sec=0;
count=0;
// start , start ,
// start ,
while(start != 0)
{
show(0,0,0,0);
}
}
if(pulse==0)// pulse
{
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) // switch
{
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);
}