|
k1是功能選擇鍵,選擇功能是根據(jù)按鍵次數(shù)定義的。
怎樣讓k1一直保持低電平狀態(tài)并且可以選擇功能。
void keyscan()//菜單鍵按下掃描函數(shù)定義
{
k1=1;
k2=1;
k3=1;
k4=1;
//判斷菜單鍵k1是否按下
if(k1==0)
{
delay(5);
if(k1==0)
{
while(!k1);//松手檢測
k1_num++;//記錄菜單鍵k1是第幾次按下,而判斷是調(diào)節(jié)秒、分還是時。
if(k1_num==1 )//指示調(diào)節(jié)秒
{
EX0=0;//關(guān)閉外部中斷0,使時間走動停止,準(zhǔn)備調(diào)時間
ds1307_write_date(0xd0,0,0x80|b_second);
lcd_write_com(0x80+0x40+12);//數(shù)據(jù)指針和光標(biāo)移動秒出
lcd_write_com(0x0f);//使光標(biāo)顯示,并光標(biāo)處字符格符閃爍,用來提示用戶此時可以調(diào)節(jié)是秒,是分還是時。
}
if(k1_num==2)//指示調(diào)節(jié)分
{
lcd_write_com(0x80+0x40+9);//數(shù)據(jù)指針和光標(biāo)移動分出
}
if(k1_num==3)//指示調(diào)節(jié)時
{
lcd_write_com(0x80+0x40+6);//數(shù)據(jù)指針和光標(biāo)移動時出
}
if(k1_num==4)//退出時間調(diào)節(jié)菜單
{
k1_num=0;//菜單鍵k0按下清零
lcd_write_com(0x0c);//恢復(fù)到時鐘走動狀態(tài),即光標(biāo)不顯示,不閃爍
//將所調(diào)的時間轉(zhuǎn)換成bcd碼
b_second=dectobcd(second);
b_minute=dectobcd(minute);
b_hour=dectobcd(hour);
//將所調(diào)的時間向時鐘寫入
ds1307_write_date(0xd0,2,b_hour);
ds1307_write_date(0xd0,1,b_minute);
ds1307_write_date(0xd0,0,b_second);
EX0=1;//開外部中斷0,時間開始繼續(xù)走動
}
}
}
//判斷是否按下過時間調(diào)節(jié)菜單鍵k1,而處于需要調(diào)節(jié)時間狀態(tài)
if(k1==0)
{
//判斷是否是上調(diào)鍵k2按下
if(k2==0)
{
delay(5);
if(k2==0)
{
while(!k2);//松手檢測
if(k2_num==1)//上調(diào)秒
{
second++;
if(second==60)
second=0;
lcd_write_second(second);//向lcd寫入被修改的時間
lcd_write_com(0x80+0x40+12);//光標(biāo)位置重定位到所要調(diào)的時間處
}
if(k2_num==2)//上調(diào)分
{
minute++;
if(minute==60)
minute=0;
lcd_write_minute(minute);
lcd_write_com(0x80+0x40+9);
}
if(k2_num==3)//上調(diào)時
{
hour++;
if(hour==24)
hour=0;
lcd_write_hour(hour);
lcd_write_com(0x80+0x40+6);
}
}
}
//判斷是否是下調(diào)鍵k3按下
if(k1==0)
{
delay(5);
if(k3==0)
{
while(!k3);
if(k3_num==1)//下調(diào)節(jié)秒
{
second--;
if(second==255)
second=59;
lcd_write_second(second);
lcd_write_com(0x80+0x40+12);
}
if(k3_num==2)//下調(diào)節(jié)分
{
minute--;
if(minute==255)
minute=59;
lcd_write_minute(minute);
lcd_write_com(0x80+0x40+9);
}
if(k3_num==3)//下調(diào)節(jié)時
{
hour--;
if(hour==255)
hour=23;
lcd_write_hour(hour);
lcd_write_com(0x80+0x40+6);
}
}
}
if(k1==0)
{
delay(5);
//判斷是否是確定鍵k1按下
if(k4==0)
{
while(!k4);//松手檢測
if(k4_num==1)//退出時間調(diào)節(jié)菜單
{
lcd_write_com(0x0c);//恢復(fù)到時鐘走動狀態(tài),即光標(biāo)不顯示,不閃爍
//將所調(diào)的時間轉(zhuǎn)換成bcd碼
b_second=dectobcd(second);
b_minute=dectobcd(minute);
b_hour=dectobcd(hour);
//將所調(diào)的時間向時鐘寫入
ds1307_write_date(0xd0,2,b_hour);
ds1307_write_date(0xd0,1,b_minute);
ds1307_write_date(0xd0,0,b_second);
EX0=1;//開外部中斷0,時間開始繼續(xù)走動
}
}
}
}
}
|
|