以实测,满足计时要求
#include<reg52.h>
sbit wela=P1^6;
sbit dula=P1^7;
#define uChar8 unsigned char //8bit,0~255
#define uint unsigned int // 16bit, 0 ~ 65,535
#define uint32 unsigned long int
uint32 c=0;
uint m,m1,f,f1,s,s1,num;
uChar8 nums,numf;
uChar8 code Bit_Tab[] =
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位选数组位码1~8
unsigned char DISP_smg[10] =
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9数字显示编码数组
void delayms(uint m) // 11.0592MHz 晶振ms延时,偏差小于1%
{
uint i, j;
for(i=m; i>0; i--)
for(j=114; j>0; j--);
}
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0DC;
TL0 = 0x00;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void xiaoying()
{
dula=1;
P0=0x00;
dula=0;
}
void SMG()
{
xiaoying();
wela=1;
P0=Bit_Tab[2];
wela=0;
dula=1;
P0=0x40;
delayms(2);
xiaoying();
wela=1;
P0=Bit_Tab[5];
wela=0;
dula=1;
P0=0x40;
delayms(2);
xiaoying();
wela=1;
P0=Bit_Tab[6];
wela=0;
dula=1;
P0=DISP_smg[m1];
delayms(2);
xiaoying();
wela=1;
P0=Bit_Tab[7];
wela=0;
dula=1;
P0=DISP_smg[m];
delayms(2);
xiaoying();
wela=1;
P0=Bit_Tab[4];
wela=0;
dula=1;
P0=DISP_smg[f];
delayms(2);
xiaoying();
wela=1;
P0=Bit_Tab[3];
wela=0;
dula=1;
P0=DISP_smg[f1];
delayms(2);
xiaoying();
wela=1;
P0=Bit_Tab[1];
wela=0;
dula=1;
P0=DISP_smg[s];
delayms(2);
xiaoying();
wela=1;
P0=Bit_Tab[0];
wela=0;
dula=1;
P0=DISP_smg[s1];
delayms(2);
}
void main(void)
{
InitTimer0();
while(1)
{
SMG();
}
}
void time0_interrupt() interrupt 1
{
TH0 = 0x0DC;
TL0 = 0x00;
c++;
if(c==100)
{
c=0;
num++;
m=num%10;
m1=num/10;
f=numf%10;
f1=numf/10;
s=nums%10;
s1=nums/10;
if(num==59)
{
num=0;
numf++;
if(numf==59)
{
numf=0;
nums++;
}
if(num==24)
num=0;
}
}
} |