|
#include<reg52.h>
sbit k1=P3^0;
sbit k2=P3^3;
sbit fengmingqi =P2^0;
unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90};
unsigned char code pos[]={0x01,0x02,0x04,0x08};
unsigned char k[4]={0,0,0,0}; //0123
unsigned char second;
unsigned char minite;
unsigned char hour;
unsigned char num;
////////////////////////////////////////////////////////////////////////////////////
void naozhong(void)
{
unsigned char i;
if(minite==0)
{
if(hour>=7)
{
if(hour<=21)
{
for(i=0;i<hour;i++)
{
fengmingqi=~fengmingqi;//fengmingqi 當 7<=時間<=21整點報時
}
}
}
}
}
//////////////// //延時程序///////////////////////////////
void delay_5ms(void)
{
unsigned char a,b;
for(b=15;b>0;b--)
for(a=152;a>0;a--);
}
//////////////////////////////////////
void disp(unsigned char m,unsigned char n)
{
P1=pos[n];
P0=seg[m];
delay_5ms();
P1=0x00;
}
////////////////////主程序//////////////////////////////
void main (void)
{
unsigned char j;
TMOD=0x01;
TH0=0x0EE;
TL0=0x00;
TR0=1;
ET0=1;
EA=1;
second=0;
minite=0;
hour=0;
while(1)
{
naozhong();
if(k1==0) //判斷按鍵是否按下
{
delay_5ms();
if(k1==0)
{
minite++;
if(minite==60)
{
minite=0;
}
while(k1==0);
}
}
if(k2==0) //判斷按鍵是否按下
{
delay_5ms();
if(k2==0)
{
hour++;
if(hour==24) hour=0;
while(k2==0)
{
for(j=0;j<4;j++)
disp(k[j],j);
}
}
}
}
}
////////////////*定時器工作方式*/ /////////////////////////////////
void t0(void) interrupt 1 using 0
{
num++;
if(num==20)
{
num=0;
second++;
if(second==60)
{
second=0;
minite++;
if(minite==60)
{
minite=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
k[0]= minite%10; //各位
k[1]= minite/10; //各十位
k[2]= hour%10; //各位
k[3]= hour/10; //各十位
}
TH0=0x0EE;
TL0=0x00;
}
求解 求解
|
|