用定时器做一个秒表,精确到0.1,S7按下,开始计时,S6按下清零
#include <stc15f2k60s2.h>
#include <intrins.h>
void Timer0Init();
void Timer1Init();
unsigned char abile[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
unsigned char saomiao[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
void Delay100us();
void shumaguan();
void anjian();
sbit S7=P3^0;
sbit S6=P3^1;
unsigned int y;
void main()
{
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;
Timer0Init();
Timer1Init();
while(1)
{
shumaguan();
anjian();
Delay100us();
}
}
void Timer0Init() //[email protected]
{
AUXR |= 0x80;
TMOD &= 0xF0;
TL0 = 0xAE;
TH0 = 0xFB;
TF0 = 0;
TR0 = 1;
EA=1;
ET0=1;
}
void weixuan() interrupt 1
{
unsigned char i;
P2=0XE0;
P0=0XFF;
P2=0X1F;
P2=0XC0;
P0=1<<i;
P2=0X1F;
P2=0XE0;
P0=saomiao[i];
P2=0X1F;
i++;
if(i==8)
i=0;
}
void shumaguan()
{
saomiao[0]=abile[y/100];
saomiao[1]=abile[y%100/10]&0x7f;
saomiao[2]=abile[y%10];
saomiao[3]=0xff;
saomiao[4]=0xff;
saomiao[5]=0xff;
saomiao[6]=0xff;
saomiao[7]=0xff;
}
void Delay100us() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 2;
j = 15;
do
{
while (--j);
} while (--i);
}
void Timer1Init(void) //[email protected]
{
AUXR |= 0x40; //?????1T??
TMOD &= 0x0F; //???????
TL1 = 0xCD; //??????
TH1 = 0xD4; //??????
TF1 = 0; //??TF1??
TR1 = 1; //???1????
EA=1;
}
void jishu() interrupt 3
{
unsigned char i;
i++;
if(i==100)
{i=0;
y++;}
}
void anjian()
{
if(S7==0)
{
Delay100us();
if(S7==0)
{
ET1=~ET1;
}
while(!S7);
}
if(S6==0)
{
Delay100us();
if(S6==0)
{
y=0;
}
while(!S7);
}
}