#include "reg52.h"
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit beep=P1^5;
sbit a=P2^0 ;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[10]={
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f, //9
};
void delay(u16 i)
{
while(i--); //延时函数,i=1时,大约延时10us
}
void main()
{
u16 L0=0,L1=0,L2=0,L3=0,d,n=0,w=0;
TMOD|=0X01; // 01定时 04计数 选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0X3C; //给定时器赋初值,定时1ms
TL0=0XB0;
TR0=1; //打开定时器
if(w==0)
{
delay(100);
if(a==1)
{
L0++;
while(1)
{
if(L0==10)
{
L0=0;
L1++;
}
if(L1==10)
{
L1=0;
L2++;
}
if(L2==10)
{
L2=0;
L3++;
}
if(L3==10)
{
L3=0;
L0=0;L1=0;L2=0;
}
for(d=0;d<4;d++)
{
switch(d)
{
case(0):
LSA=0;LSB=0;LSC=0;P0=smgduan[L0]; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0;P0=smgduan[L1]; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0;P0=smgduan[L2]; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0;P0=smgduan[L3]; break;//显示第3位
}
delay(100);
P0=0x00; //消隐
}
if(a==1)
delay(1000);
L0++;
if(TF0==1)
{
TF0=0;
TH0=0X3C; //重置定时常数
TL0=0XB0;
n++;
if(n>200)
{
n=0;
w=1;
}
if(w==1)
a=0;
}
}
}
}
}
|