单片机时钟显示程序

#include
sbit LED1=P2^5;
sbit LED2=P2^2;
sbit smg1=P2^7;
sbit smg2=P2^6;
sbit smg3=P2^4;
sbit smg4=P2^3;
sbit smg5=P2^1;
sbit smg6=P2^0;
char cflag=0;
unsigned char h_H,h_L,m_H,m_L,s_H,s_L,H,M,S,count;
unsigned char flag=0,countflag=0;
unsigned int countn;
unsigned char table[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f};
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
void ss();
void delay()
{
unsigned int count=320;
while(count--) ;
}
void yiwei()//位置移动
{
if(k1==0)
{
delay();
if(k1==0)
{
flag=++flag%7;
TR0=0;//关闭定时器
}
while(k1==0);//松手检测
}
}

void queren()//确认键
{
if(k3==0)
{
delay();
if(k3==0)
{
flag=0;
TR0=1;
cflag=0;
}
while(k3==0);

}
}

void jiashu()//数字加
{ if(k2==0)
{ delay();
if(k2==0)
{
switch(flag)
{
case 0:break;
case 1:S++;break;
case 2:S=S+10;if(S/10==6) S=0;break;
case 3:M++;break;
case 4:M=M+10;if(M/10==6) M=0;break;
case 5:H++;break;
case 6:H=H+10;if(H/10==3) H=0;if((h_H*10+h_L)>24) H=0;break;
default :break;
}
while(k2==0);
}
}
}
void smgdisplay(unsigned char wei,unsigned char f)
{

switch(wei)
{
case 6: smg2=1;smg3=1;smg4=1;smg5=1;smg6=1;if(f==1) smg1=0;else smg1=1;P0=table[h_H];break;
case 5: smg1=1;smg3=1;smg4=1;smg5=1;smg6=1;if(f==1) smg2=0;else smg2=1;P0=table[h_L];break;
case 4: smg1=1;smg2=1;smg4=1;smg5=1;smg6=1;if(f==1) smg3=0;else smg3=1;P0=table[m_H];break;
case 3: smg1=1;smg2=1;smg3=1;smg5=1;smg6=1;if(f==1) smg4=0;else smg4=1;P0=table[m_L];break;
case 2: smg1=1;smg2=1;smg3=1;smg4=1;smg6=1;if(f==1) smg5=0;else smg5=1;P0=table[s_H];break;
case 1: smg1=1;smg2=1;smg3=1;smg4=1;smg5=1;if(f==1) smg6=0;else smg6=1;P0=table[s_L];break;
}
}


void display()
{ delay();
smgdisplay(1,1);
delay();
smgdisplay(2,1);
delay();
smgdisplay(3,1);
delay();
smgdisplay(4,1);
delay();
smgdisplay(5,1);
delay();
smgdisplay(6,1);
delay();
}
void init_time0()
{
TMOD=0X01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
ET0=1;
TR0=1;
EA=1;
}


void main()
{ init_time0();

while(1)
{
h_H=H/10;h_L=H%10;
m_H=M/10;m_L=M%10;
s_H=S/10;s_L=S%10;
if(count==20)
{
S++;
count=0;
}


if((H==23)&&(M==59)&&(S==60))
{
H=0;
M=0;
S=0;
}
if((59==M)&&(S==60))
{
M=0;
S=0;
H++;
}
if(S==60)
{
S=0;
M++;
}
yiwei();
queren();
jiashu();

if(flag==0)
{
display();
}
else switch(flag)
{

case 1 : smgdisplay(1,1);break;//,smgdisplay(3,1),smgdisplay(4,1),smgdisplay(5,1),smgdisplay(6,1);
case 2 : smgdisplay(2,1);break;//,smgdisplay(3,1),smgdisplay(4,1),smgdisplay(5,1),smgdisplay(6,1);break;
case 3 : smgdisplay(3,1);break;//,smgdisplay(2,1),smgdisplay(4,1),smgdisplay(5,1),smgdisplay(6,1);break;
case 4 : smgdisplay(4,1);break;//,smgdisp

lay(2,1),smgdisplay(3,1),smgdisplay(5,1),smgdisplay(6,1);break;
case 5 : smgdisplay(5,1);break;//,smgdisplay(2,1),smgdisplay(3,1),smgdisplay(4,1),smgdisplay(6,1);break;
case 6 : smgdisplay(6,1);break;//,smgdisplay(2,1),smgdisplay(3,1),smgdisplay(4,1),smgdisplay(6,1);break;
}
//ss();
if(S%2)
{
LED1=1;
LED2=1;
}
else
{
LED1=0;
LED2=0;
}


}


}

void time0()interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
count++;

}
/*void ss()
{

switch(flag)
{
case 0:break;
case 1:smgdisplay(1,1);delay();smgdisplay(1,0);delay();break;
case 2:smgdisplay(2,1);delay();smgdisplay(2,0);delay();break;
case 3:smgdisplay(3,1);delay();smgdisplay(3,0);delay();break;
case 4:smgdisplay(4,1);delay();smgdisplay(4,0);delay();break;
case 5:smgdisplay(5,1);delay();smgdisplay(5,0);delay();break;
case 6:smgdisplay(6,1);delay();smgdisplay(6,0);delay();break;
}
}*/




相关文档
最新文档