//-------------------------------------------//------------------------------------------------ucharseg[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0xbf,
0xff};
ucharyi=16, er=16,san=16,si=16,wu=16,liu=16,qi=16,ba=16;
ucharkey_set;
ucharset=0;
ucharclr=0;
uchartmax=35,tmin=25;
uinttim;
uintt;
ucharset_0=16,set_1=16,set_2=16,set_3=16;
ucharset_cnt=0;
ucharqujian;
ucharwendu;
ucharled=0;
//--------------------------------------------------------voidDelayms(uintms);
voidDelay1ms();
voidallinit();
voiddisplay(ucharyi,er,san,si,wu,liu,qi,ba);
voidkeyscan16();
voidTimer0Init(void);
voidled_control();
voidTimer1Init(void);
voiddisp_xuan();
//--------------------------------------------------------voidmain()
{
allinit();
Timer0Init();
Timer1Init();
while(1)
{
disp_xuan();
display(yi,er,san,si,wu,liu,qi,ba);
}
}
voidallinit()
{
P2=0xa0;P0=0x00;
P2=0x80;P0=0xff;
P2=0xe0;P0=0xff;
P2=0xc0;P0=0xff;
}
voiddisplay(ucharyi,er,san,si,wu,liu,qi,ba)
{
P2=0xe0;P0=0xff;
P2=0xe0;//段选P0=seg[yi];
P2=0xc0;//位选P0=0x01;
Delay1ms();
Delay1ms();
Delay1ms();
P2=0xe0;P0=0xff;
P2=0xe0;//段选P0=seg[er];
P2=0xc0;//位选P0=0x02;
Delay1ms();
P2=0xe0;P0=0xff;
P2=0xe0;//段选P0=seg[san];
P2=0xc0;//位选P0=0x04;
Delay1ms();
P2=0xe0;P0=0xff;
P2=0xe0;//段选P0=seg[si];
P2=0xc0;//位选P0=0x08;
Delay1ms();
P2=0xe0;P0=0xff;
P2=0xe0;//段选P0=seg[wu];
P2=0xc0;//位选P0=0x10;
Delay1ms();
P2=0xe0;P0=0xff;
P2=0xe0;//段选P0=seg[liu];
P2=0xc0;//位选P0=0x20;
Delay1ms();
P2=0xe0;P0=0xff;
P2=0xe0;//段选P0=seg[qi];
P2=0xc0;//位选P0=0x40;
Delay1ms();
P2=0xe0;P0=0xff;
P2=0xe0;//段选P0=seg[ba];
P2=0xc0;//位选P0=0x80;
Delay1ms();
P2=0xe0;P0=0xff;
P2=0xc0;P0=0xff;
}
voidsave()
{
if(set==0)
{
if(set_1!=16)
{
tmax=set_0*10+set_1;
tmin=set_2*10+set_3;
}
set_cnt=0;
}
}
voidkeyscan16()
{
uchartemp;
P44=0;P42=1;P3=0X7F;
temp=P3;
temp=temp&0X0F;//11111101&00001111=00001101if(temp!=0x0f)
{
Delayms(5);
temp=P3;
temp=temp&0X0F;
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case0x7e: key_set=0;set_cnt++;break;//11111110P37----p30case0x7d: key_set=3;set_cnt++;break;//11111101case0x7b: key_set=6;set_cnt++;break;
case0x77: key_set=9;set_cnt++;break;
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0X0F;
}
}
}
P44=1;P42=0;P3=0XBF;//1011111temp=P3;
temp=temp&0X0F;//11111101&00001111=00001101if(temp!=0x0f)
{
Delayms(5);
temp=P3;
temp=temp&0X0F;
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case0xBe:key_set=1;set_cnt++;break;//11111110P37----p30case0xBd:key_set=4;set_cnt++;break;//11111101case0xBb:key_set=7;set_cnt++;break;
case0xB7:set=~set;ET1=~ET1;save();break;
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0X0F;
}
}
}
P3=0XDF;P44=1;P42=1;//11011111temp=P3;
temp=temp&0X0F;//11111101&00001111=00001101if(temp!=0x0f)
{
Delayms(5);
temp=P3;
temp=temp&0X0F;
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case0xDe:key_set=2;set_cnt++;break;//11111110P37----p30case0xDd:key_set=5;set_cnt++;break;//11111101case0xDb:key_set=8;set_cnt++;break;
case0xD7:clr=1;break;
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0X0F;
}
}
}
}
voidshuru()
{
if(clr==1)
{
clr=0;
set_cnt=0;
set_0=16;
set_1=16;
set_2=16;
set_3=16;
}
switch(set_cnt)
{
case1:set_0=key_set;break;
case2:set_1=key_set;break;
case3:set_2=key_set;break;
case4:set_3=key_set;break;
}
if(set_cnt==4&&(set_0*10+set_1)<(set_2*10+set_3))
{
yi=15;
er=16;
san=16;
si=16;
wu=16;
liu=15;
qi=16;
ba=16;
P2=0X80;P0=0XFD;
}
}
voiddisp_xuan()
{
if(set==0)
{
wendu=temget();
led_control();
set_0=16;
set_1=16;
set_2=16;
set_3=16;
yi=15;
er=qujian;
san=15;
si=16;
wu=16;
liu=16;
qi=wendu/10;
ba=wendu%10;
}
else {
shuru();
yi=15;
er=set_0;
san=set_1;
si=16;
wu=16;
liu=15;
qi=set_2;
ba=set_3;
}
}
voidled_control()
{
if(wendu<tmin)
{
t=800;
qujian=0;
P2=0xa0;P0=0x00;
}
elseif(wendu>=tmin&&wendu<=tmax)
{
t=600;
qujian=1;
P2=0xa0;P0=0x00;
}
elseif(wendu>tmax)
{
t=200;
qujian=2;
P2=0xa0;P0=0x10;
}
}
voidTimer0Init(void) //100微秒@11.0592MHz{
AUXR|=0x80; //定时器时钟1T模式TMOD&=0xF0; //设置定时器模式TL0=0xAE; //设置定时初值TH0=0xFB; //设置定时初值TF0=0; //清除TF0标志TR0=1; //定时器0开始计时EA=1;
ET0=1;
}
voidtimer0() interrupt1{
keyscan16();
}
voidTimer1Init(void) //1毫秒@11.0592MHz{
AUXR|=0x40; //定时器时钟1T模式TMOD&=0x0F; //设置定时器模式TL1=0xCD; //设置定时初值TH1=0xD4; //设置定时初值TF1=0; //清除TF1标志TR1=1; //定时器1开始计时EA=1;
ET1=1;
}
voidtimer1() interrupt3{
tim++;
if(tim==t)
{
tim=0;
if(led==0)
{
led=1;
P2=0X80;P0=0XFF;
}
else {
led=0;
P2=0X80;P0=0XFE;
}
}
}
voidDelay1ms() //@11.0592MHz{
unsignedchari, j;
_nop_();
_nop_();
_nop_();
i=11;
j=190;
do {
while (--j);
} while (--i);
}
voidDelayms(uintms) //@11.0592MHz{
unsignedchari, j,k;
for(k=ms;k>0;k--)
{
_nop_();
_nop_();
_nop_();
i=11;
j=190;
do {
while (--j);
} while (--i);
}
}