|
#include "reg51.h"
unsigned char seg_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //數(shù)碼管字模
unsigned char time=0;
unsigned char sec=20;
unsigned char min=60;
sbit P3_0=P3^0; //定義位變量
sbit P3_1=P3^1;
sbit key1=P1^0; //清零
sbit key2=P1^1; //暫停
sbit key3=P1^2; //啟動(dòng)
unsigned char wei1;
unsigned char wei2;
void delay(unsigned int a) //誤差 0us
{
unsigned int j;
for(;a>0;a--)
for(j=0;j<122;j++);
}
void timer0() interrupt 1 //T0中斷函數(shù)
{
TH0=0x3c; //計(jì)數(shù)初值
TL0=0xb0;
if(++time==sec) //1s
{
time=0;
if(min==60) //60s循環(huán)
min=0;
wei1=min%10; //個(gè)位
wei2=min/10; //十位
min++;
}
}
void main()
{
TMOD=0x01; //T0方式一
TH0=0x3c;
TL0=0xb0;
TR0=0; //定時(shí)器打開(kāi)
EA=1; //開(kāi)中斷
ET0=1;
while(1)
{
if(key3==0) //啟動(dòng)
{
TR0=1;
}
if(key2==0) //暫停
{
TR0=0;
}
if(key1!=0) //清零
{
P3_1=1;
P2=seg_mod[wei2]; //個(gè)位顯示
P3_0=0;
delay(5);
P3_0=1;
P2=seg_mod[wei1]; //十位顯示
P3_1=0;
delay(5);
}
else
{
TH0=0x3c; //計(jì)數(shù)初值
TL0=0xb0;
min=0;
wei1=wei2=0;
P3_1=1;
P2=seg_mod[wei2];; //個(gè)位顯示
P3_0=0;
delay(5);
P3_0=1;
P2=seg_mod[wei1]; //十位顯示
P3_1=0;
delay(5);
}
}
} |
|