#include <reg51.h>
#define uint unsigned int //对数据类型进行声明定义
#define uchar unsigned char
sbit LSA=P2^2; //定义数码管端口
sbit LSB=P2^3; //
sbit LSC=P2^4;
sbit HW=P1^4;
sbit Beep=P2^5;
sbit K1=P3^0;
uchar smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //0~9,,0x40显示第三,第六的一横。
uchar code smgduan2[]={ 0,0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c}; // code表示寄存于flash中 数码管位置
uchar miao1,miao2,fen1,fen2,shi1,shi2;
uint a,b,c,n,m=0; //
void Delay(unsigned int n)
{
unsigned int i=0,j=0; //
for(i; i<n; i++)
for(j=0;j<123;j++); //在该芯片上for(j=0;j<123;j++);的执行时间刚好是1ms,这样的话这个函数就会延时int毫秒。
}
void delay() //
{
uint i,j;
for(i=0;i<1;i++)
for(j=0;j<100;j++); //
}
void time() // //中断初始化,
{
TMOD=0X01; //使用定时器T0的方式1
TL0=(65536-10001)/256; //
TH0=(65536-10001)%256; //
EA=1; //CPU所有中断(IE最高位MSB)
TR0=1; //开定时器T0
ET0=1; //开定时器T0中断
}
void time0() interrupt 1 //我删了time0(void)
{
TL0=(65536-10004)/256; // -越大,越慢 //10004
TH0=(65536-10004)%256; //
if(HW==0)
{ Beep=1; //我加入
Delay(100); //100
if(HW==1) //还没按K1的电位
{
m=1;
}
}
if(m==1) //第一次按下k1
{
n++;
}
if(n==2)
{ a++;
n=0; // n=0;
}
if(a==100) //分秒
{b++;
a=0;
}
if(b==60) //秒
{c++;
b=0;
}
if(c==60) //时
{
c=0;
}
if(m==1)
{
if(HW==0)
{
Delay(200); //300
if(HW==1)
{
m=0;
EA=0; // //去掉EA=0; 可实现暂停
}
}
}
}
void dis()
{
miao1=a/10; //定义数据类型
miao2 =a%10;
fen1=b/10;
fen2=b%10;
shi1=c/10;
shi2=c%10;
P0=smgduan[miao2];
P2=smgduan2[1];//第1个数码管
delay();
P0=0;
P0=smgduan[miao1];
P2=smgduan2[2];//第2个数码管
delay();
P0=0;
P0=smgduan[fen2];
P2=smgduan2[4]; //第4个数码管
delay();
P0=0;
P0=smgduan[fen1];
P2=smgduan2[5]; //第5个数码管
delay();
P0=0;
P0=smgduan[shi2];
P2=smgduan2[7]; //第7个数码管
delay();
P0=0;
P0=smgduan[shi1];
P2=smgduan2[8]; //第8个数码管
delay();
P0=0;
P0=smgduan[10];
P2=smgduan2[3];//第3个数码管
delay();
P0=0;
P0=smgduan[10];
P2=smgduan2[6];//第6个数码管
delay();
P0=0;
}
void main()
{
time();
while(1)
{
dis();
if(HW==0){ a=0;b=0;c=0;time(); } // 自动清零
}
}
|