51单片机100天倒计时牌完整程序

/*********************************************************************/
//用于一百天之内的倒计时
//可调具体定时时间
/*********************************************************************/
//使用12MHZ晶振,P1口输出段码P3口口作列扫描,用共阳LED数码管
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};// 共阳LED段码表
//涉及到减1小于0的问题,timedata[8] 使用符号数据
char data timedata[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//计时单元数据初值,共8个
//0.1.2.3.4.5分别表示秒低,秒高,分低,分高,时低,时高位,天数//////
uchar data con1s=0x00; //1秒定时用?
uchar n;//记录按键次数
sbit led1=P0^5;
sbit led2=P0^6;
sbit led3=P0^7;
sbit key0=P2^1; //大键盘
sbit key4=P2^5; //从左到右4.3.2.1号键盘
sbit key3=P2^4; //4高位加,3高位减,2低位加,1低位减
sbit key2=P2^3; //
sbit key1=P2^2; //
//延时x毫秒
void delay1ms(uint x)
{
uint i,j;
for (i=x;i>0;i--)
for(j=110;j>0;j--); //延时一毫秒,j取110
}

/****************/
// 键扫描子程序 //
/****************/
void keyscan()
{ uint a;
uint tiaojie=1;
n=0;
while(tiaojie)
{
if(key0==0) // 按下调整按键,进入键盘扫描程序
{
delay1ms(5);
if(key0==0)
{
while(!key0);
n=n+1; //记录按键次数
//按键第二次N=1,调节天数;N=2,调节小时;N=3,调节分钟;N=4,调节秒数;
//按键从左到右依次高位加减,低位加减
if(n==5)
{
n=0;
tiaojie=0;
}

}

}
if(n!=0)
{
if(n==1) //天数调节
{
if(key4==0) //高位加1
{
delay1ms(5);
if(key4==0)
{
while(!key4);
P1=dis_7[timedata[7]];//天数
P3=0X7f;
a=110;
while(a--);
timedata[7]=timedata[7]+1;
if(timedata[7]>9)
{timedata[7]=0;}

}
}

if(key3==0) //高位减1
{
delay1ms(5);
if(key3==0)
{
while(!key3);
P1=dis_7[timedata[7]];//天数
P3=0X7f;
a=110;
while(a--);
timedata[7]=timedata[7]-1;
if(timedata[7]<0)
{timedata[7]=9;}

}
}

if(key2==0) //低位加1
{
delay1ms(5);
if(key2==0)
{
while(!key2);
timedata[6]=timedata[6]+1;
if(timedata[6]>9)
{timedata[6]=0;}
P1=dis_7[timedata[6]];//天数
P3=0Xbf;
a=110;
while(a--);
}
}

if(key1==0) //低位减1
{
delay1ms(5);
if(key1==0)
{
while(!key1);
timedata[6]=timedata[6]-1;
if(timedata[6]<0)
{timedata[6]=9;}
P1=d

is_7[timedata[6]];//天数
P3=0Xbf;
a=110;
while(a--);
}
} //温度的第一位加1

}

if(n==2) //小时调节
{
if(key4==0) //高位加1
{
delay1ms(5);
if(key4==0)
{
while(!key4);
timedata[5]=timedata[5]+1;
if(timedata[5]>2)
{timedata[5]=0;}
P1=dis_7[timedata[5]];//
P3=0Xdf;
a=110;
while(a--);

}
}

if(key3==0) //高位减1
{
delay1ms(5);
if(key3==0)
{
while(!key3);
timedata[5]=timedata[5]-1;
if(timedata[5]<0)
{timedata[5]=2;}
P1=dis_7[timedata[5]];//
P3=0Xdf;
a=110;
while(a--);
}
}

if(key2==0) //低位加1
{
delay1ms(5);
if(key2==0)
{
while(!key2);
if(timedata[5]==2)
{
timedata[4]=timedata[4]+1;
if(timedata[4]>3)
{timedata[4]=0;}
}
else
{
timedata[4]=timedata[4]+1;
if(timedata[4]>9)
{timedata[4]=0;}
}
P1=dis_7[timedata[4]];//
P3=0Xef;
a=110;
while(a--);
}
}

if(key1==0) //低位减1
{
delay1ms(5);
if(key1==0)
{
while(!key1);
timedata[4]=timedata[4]-1;
if(timedata[4]<0)

if(timedata[5]==2)
{timedata[4]=3;}

else
{timedata[4]=9;}

P1=dis_7[timedata[4]];//
P3=0Xef;
a=110;
while(a--);
}
} //温度的第一位加1

}
if(n==3) //分钟调节
{
if(key4==0) //高位加1
{
delay1ms(5);
if(key4==0)
{
while(!key4);
timedata[3]=timedata[3]+1;
if(timedata[3]>5)
{timedata[3]=0;}
P1=dis_7[timedata[3]];//
P3=0Xf7;
a=110;
while(a--);

}
}

if(key3==0) //高位减1
{
delay1ms(5);
if(key3==0)
{
while(!key3);
timedata[3]=timedata[3]-1;
if(timedata[3]<0)
{timedata[3]=5;}
P1=dis_7[timedata[3]];//
P3=0Xf7;
a=110;
while(a--);
}
}

if(key2==0) //低位加1
{
delay1ms(5);
if(key2==0)
{
while(!key2);
timedata[2]=timedata[2]+1;
if(timedata[2]>9)
{timedata[2]=0;}
P1=dis_7[timedata[2]];//
P3=0Xfb;
a=110;
while(a--);
}
}

if(key1==0) //低位减1
{
delay1ms(5);
if(key1==0)
{
while(!key1);
timedata[2]=timedata[2]-1;
if(timedata[2]<0)
{timedata[2]=9;}
P1=dis_7[timedata[2]];//
P3=0Xfb;

a=110;
while(a--);
}
} //温度的第一位加1

}


if(n==4) //秒数调节
{
if(key4==0) //高位加1
{
delay1ms(5);
if(key4==0)
{
while(!key4);
timedata[1]=timedata[1]+1;
if(timedata[1]>5)
{timedata[1]=0;}
P1=dis_7[timedata[1]];//天数
P3=0Xfd;
a=110;
while(a--);

}
}

if(key3==0) //高位减1
{
delay1ms(5);
if(key3==0)
{
while(!key3);
timedata[1]=timedata[1]-1;
if(timedata[1]<0)
{timedata[1]=5;}
P1=dis_7[timedata[1]];//天数
P3=0Xfd;
a=110;
while(a--);
}
}

if(key2==0) //低位加1
{
delay1ms(5);
if(key2==0)
{
while(!key2);
timedata[0]=timedata[0]+1;
if(timedata[0]>9)
{timedata[0]=0;}
P1=dis_7[timedata[0]];
P3=0Xfe;
a=110;
while(a--);
}
}

if(key1==0) //低位减1
{
delay1ms(5);
if(key1==0)
{
while(!key1);
timedata[0]=timedata[0]-1;
if(timedata[0]<0)
{timedata[0]=9;}
P1=dis_7[timedata[0]];//天数
P3=0Xfe;
a=110;
while(a--);
}
} //温度的第一位加1

}

}
}
EA=1;//退出调节过程,开中断
}


/***********/
//扫描程序//
/**********/
scan()
{
uint a;

P1=dis_7[timedata[7]];//天数
P3=0X7f;
a=110;
while(a--);

P1=dis_7[timedata[6]];
P3=0Xbf;
a=110;
while(a--);

P1=dis_7[timedata[5]];//小时数
P3=0Xdf;
a=110;
while(a--);

P1=dis_7[timedata[4]];
P3=0xef;
a=110;
while(a--);

P1=dis_7[timedata[3]];//分钟数
P3=0xf7;
a=110;
while(a--);

P1=dis_7[timedata[2]];
P3=0xfb;
a=110;
while(a--);

P1=dis_7[timedata[1]];//秒数
P3=0xfd;
a=110;
while(a--);

P1=dis_7[timedata[0]];
P3=0xfe;
a=110;
while(a--);

}

/*************/
//初始化程序//

clearmen()
{
TH0=0x3C;TL0=0xB0;// ;50MS定时初值(T0计时用)
TH1=0x3C;TL1=0xB0;// ;50MS定时初值(T1计时用)
TMOD=0X11;ET0=1;ET1=1;TR1=0;TR0=1;EA=1;//设置定时器工作方式,开定时器
led1=0;
led2=0;
led3=0;
delay1ms(1000);
led1=1;
led2=1;
led3=1;
timedata[0]=9;
timedata[1]=5;
timedata[2]=9;
timedata[3]=5;
timedata[4]=3;
timedata[5]=2;
timedata[6]=9;
timedata[7]=9;

}


//主程序//
/*********/
void main()
{
clearmen();
while (1)
{
scan();
if(key0==0) // 按下调整按键,进入键盘扫描程序
{
delay1ms(200);
if(key0==0)
{
while(!key0);
led1=0;//进入键盘扫描之后,三个指示灯点亮
led2=0;
led3=0;
EA=0;
P1=0x8E;/*F*/
P3=0xfe; //最后一位数码管显示 0x8E,/*F*/,

表示等待按键检测
keyscan();
}
}
}
}
/********************/
//1秒中断处理程序 //
/*******************/
void time_intt0(void) interrupt 1
{
ET0=0;TR0=0;TH0=0x3C;TL0=0xB0;TR0=1;
con1s++;
if(con1s==20)
{
con1s=0x00;
timedata[0]--;
led1=~led1;
led2=~led2;
led3=~led3;//正常倒计时三个指示灯每隔1秒钟点亮
if(timedata[0]<0)
{
timedata[0]=9;
timedata[1]--;
if(timedata[1]<0)
{
timedata[1]=5;
timedata[2]--;
if(timedata[2]<0)
{
timedata[2]=9;
timedata[3]--;
if(timedata[3]<0)
{
timedata[3]=5;
timedata[4]--;
if(timedata[4]<0)
{
timedata[4]=9;
timedata[5]--;

}
if(timedata[5]<0 )
{
timedata[5]=2;
timedata[4]=3;
timedata[6]--;
if(timedata[6]<0 )
{
timedata[6]=9;
timedata[7]--;
if(timedata[7]<0 )
{
timedata[7]=9;
}

}

}

}
}
}
}
}
ET0=1;
}


相关文档
最新文档