#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LS138A = P2^0;
sbit LS138B = P2^1;
sbit LS138C = P2^2;
sbit s1=P3^2;
sbit s2=P3^3;
sbit s3=P3^4;
uint tt,num0,num1,num2,num3,s1num=0,s2num=0;
void delay(uint);
void Show();
void Button();
void init();
uchar code Disp_Tab0[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0,0xff};
uchar code Disp_Tab1[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0xc0,0xff};
uchar code Disp_Tab2[] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x40,0x7f};
void main() //主函数
{
init(); //调用初始函数
Show();//调用显示函数
}
void init()// 初始函数
{
num0=1;
num1=1;
num2=1;
num3=1;
P0=0xc0;
P2=0x00;
P2=0x01;
P2=0x03;
P2=0x04;
P0=0x40;
P2=0x02;
tt=0;
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;//定时器0高8位初值
TL0=(65536-50000)%256;// 定时器0低8位初值
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}
void Show()//显示函数
{
while(1)
{
if(s1==0)//判断第一个按钮是否按下
{
delay(5);
if(s1==0)//第一个按键去抖
{
s1num++;
s2num=0;
while(!s1);
}
}
if(s1num==1)
{
tt=0;
Button();//调用按键函数
}
else //进入时钟运行状态
{
s1num=0;
if(tt==20)
{
tt=0;
if(num0<11)
{
P2=0x04;
P0=Disp_Tab0[num0];//时钟的秒个位
P2=0x00;
num0++;
}
if(num0==11)
{
num0=1;
if(num1<7)
{
P2=0x04;
P0=Disp_Tab1[num1];//时钟的秒十位
P2=0x01;
num1++;
}
if(num1==7)
{
num1=1;
if(num2<11)
{
P2=0x04;
P0=Disp_Tab2[num2];//时钟的分个位
P2=0x02;
num2++;
}
if(num2==11)
{
num2=1;
if(num3<7)
{
P2=0x04;
P0=Disp_Tab1[num3];//时钟的分十位
P2=0x03;
num3++;
}
if(num3==7)
num3=1;
}
}
}
}
}
}
}
void Button()//按键函数
{
P2=0x04;
if(s2==0)//判断第二个键是否按下
{
delay(5);
if(s2==0)//去抖动
{
s2num++;
while(!s2);
}
}
if(s2num<5)
{
if(s2num==0)
{s2num++;};
if(s2num==1)
{
P0=Disp_Tab0[11];//数码管闪烁中的变暗
P2=0x00;
delay(100);
P0=Disp_Tab0[num0-1];//数码管闪烁中的变亮
delay(100);
P2=0x04;
if(s3==0)//判断第三个按钮是否按下
{
delay(5);
if(s3==0)//去抖动
{
while(!s3);
num0++;
if(num0<11)
{
P1=Disp_Tab0[num0];
P2=0x00;
P1=0xff;
}
else
num0=1;
}
}
}
if(s2num==2)
{
P0=Disp_Tab0[11];
P2=0x01;
delay(100);
P0=Disp_Tab1[num1-1];
delay(100);
P2=0x04;
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!s3);
num1++;
if(num1<7)
{
P1=Disp_Tab1[num1];
P2=0x01;
P1=0xff;
}
else
num1=1;
}
}
}
if(s2num==3)
{
P0=Disp_Tab2[11];
P2=0x02;
delay(100);
P0=Disp_Tab2[num2-1];
delay(100);
P2=0x04;
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!s3);
num2++;
if(num2<11)
{
P1=Disp_Tab2[num2];
P2=0x02;
P1=0xff;
}
else
num2=1;
}
}
}
if(s2num==4)
{
P0=Disp_Tab0[11];
P2=0x03;
delay(100);
P0=Disp_Tab1[num3-1];
delay(100);
P2=0x04;
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!s3);
num3++;
if(num3<7)
{
P1=Disp_Tab1[num3];
P2=0x03;
P1=0xff;
}
else
num3=1;
}
}
}
}
else
s2num=0;
}
void delay(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void time0() interrupt 1 //定时器0函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
} |