基于C8051F的AD UART0 KEY FLASH TIME3程序
//**********************************************
//按键处理程序
//**********************************************
void key_scan()
{
static uchar i,k;
uchar Mkey=P4;
if(BGset<2)
{
if((Mkey&0xFE)!= 0XFE) //有键按下先开启背光
{
delayms(200);
if((Mkey&0xFE)!= 0XFE)
{
BGset++;
if(BGset>1)
{
BGset = 2;
}
}
}
}
if(BGset ==2 )
{
if(!(Mkey&0x80)) //SW1按下吗?ALM
{
delayms(200); //消抖
if(!(Mkey&0x80)) //再判断
{
BGset =2; //开背光
if(k<1) {Page = 0;} //页面0:显示故障状态}
k++;
if(k>1) {k =0;Page = 1; } //再按后退出
set = 0;
}
}
if(!set)
{
if(!(Mkey&0x40)) //SW2按下吗?下翻
{
delayms(200);
if(!(Mkey&0x40))
{
if(Page !=0)
{
Page++;
BGset =2;
if(Page>6) //如果超过5界面回到1画面
{
Page = 1;
}
}
}
}
if(!(Mkey&0x20)) //SW3按下吗?上翻
{
delayms(200);
if(!(Mkey&0x20))
{
if(Page !=0)
{
Page--;
BGset =2;
if(Page<1) //小于1画面后不显示0画面,显示6画面
{
Page = 6;
}
}
}
}
}
if(Page ==6) //修改时间界面
{
if(!(Mkey&0x04)) //SW6按下吗?设定SET只在6画面设置时间
{
delayms(200);
if(!(Mkey&0x04))
{
BGset =2;
set = 1; //如果按下SET键表示开始设置时间,置设置标志位;
}
}
if(set)
{
if(!(Mkey&0x10)) //SW4按下吗?左移<- 只在6画面修改时间
{
delayms(200);
if(!(Mkey&0x10))
{
BGset =2;
direction--;
if(direction < 1)
{
direction = 6;
}
}
}
if(!(Mkey&0x08)) //SW5按下吗?右移->只在6画面修改时间
{
delayms(200);
if(!(Mkey&0x08))
{
BGset =2;
direction++;
if(direction > 6)
{
direction = 1;
}
}
}
switch(direction)
{
case 1:
{
if(!(P4&0x40)) //SW2按下吗?下翻
{
delayms(200);
if(!(P4&0x40))
{
BGset =2;
keybuffer[0]++;
if(keybuffer[0]>99) //年设置,不超过100年
{
keybuffer[0] = 11;
}
}
}
if(!(P4&0x20)) //SW3按下吗?上翻
{
delayms(200);
if(!(P4&0x20))
{
BGset =2;
keybuffer[0]--;
if(keybuffer[0]<11) //小于1画面后不显示0画面,显示6画面
{
keybuffer[0] = 11;
}
}
}
if(Tset < 4)
{
TH = keybuffer[0]/10;
TL = keybuffer[0]%10;
number_disp (1,0,0x91,1,TAB[TH],TAB[TL]);
}
if(Tset>4)
{
number_disp (1,0,0x91,1,0x20,0x20);
}
}break;
case 2:
{
TH = keybuffer[0]/10;
TL = keybuffer[0]%10;
number_disp (1,0,0x91,1,TAB[TH],TAB[TL]);
if(!(P4&0x40)) //SW2按下吗?下翻
{
delayms(200);
if(!(P4&0x40))
{
BGset =2;
keybuffer[1]++;
if(keybuffer[1]>12) //月设置,不超过12月
{
keybuffer[1] = 1;
}
}
}
if(!(P4&0x20)) //SW3按下吗?上翻
{
delayms(200);
if(!(P4&0x20))
{
BGset =2;
keybuffer[1]--;
if(keybuffer[1]<1) //小于1 显示12月
{
keybuffer[1] = 12;
}
}
}
if(Tset < 4)
{
TH = keybuffer[1]/10;
TL = keybuffer[1]%10;
number_disp (1,0,0x93,1,TAB[TH],TAB[TL]);
}
if(Tset>4)
{
number_disp (1,0,0x93,1,0x20,0x20);
}
}break;
case 3:
{
TH = keybuffer[1]/10;
TL = keybuffer[1]%10;
number_disp (1,0,0x93,1,TAB[TH],TAB[TL]);
if(!(P4&0x40)) //SW2按下吗?下翻
{
delayms(200);
if(!(P4&0x40))
{
BGset =2;
keybuffer[2]++;
if(keybuffer[2]>31) //日设置,不超过31日
{
keybuffer[2] = 1;
}
}
}
if(!(P4&0x20)) //SW3按下吗?上翻
{
delayms(200);
if(!(P4&0x20))
{
BGset =2;
keybuffer[2]--;
if(keybuffer[2]<1) //小于1,显示31日
{
keybuffer[2] = 31;
}
}
}
if(Tset<4)
{
TH = keybuffer[2]/10;
TL = keybuffer[2]%10;
number_disp (1,0,0x95,1,TAB[TH],TAB[TL]);
}
if(Tset>4)
{
number_disp (1,0,0x95,1,0x20,0x20);
}
}break;
case 4:
{
TH = keybuffer[2]/10;
TL = keybuffer[2]%10;
number_disp (1,0,0x95,1,TAB[TH],TAB[TL]);
if(!(P4&0x40)) //SW2按下吗?下翻
{
delayms(200);
if(!(P4&0x40))
{
BGset =2;
keybuffer[3]++;