📄 keypad.c
字号:
#include<reg52.h>
#include<rtx51tny.h>
#include"inc/define.h"
#include"inc/keypad.h"
#include"inc/ds1302.h"
#include"inc/8_8led.h"
#include"inc/font.h"
sbit key_up=P1^0;
sbit key_down=P1^1;
sbit key_enter=P1^2;
sbit key_esc=P1^3;
extern vu8 code * idata time_tab;
extern vu8 code * idata week_tab;
extern vu8 code * idata tempert;
extern vu8 idata for_showh[6];
extern vu8 idata for_showl[6];
extern struct Pad ph[6],pl[6];
extern u8 timerTime[7][2];
extern bit show_menu;
extern u8 * pmenu;
u8 idata m_level=0;
u8 idata levl1_p=0;
u8 idata levl2_p=0;
u8 valid=0; //防止不恰当进入才的操作,即仅有从Enter键进入才是合法的
u8 chge_time=0;
u8 idata chgeh[6];
u8 idata chgel[6];
void keyDown(void ) _task_ 2
{
u8 i;
u8 chge_num=0;
u8 idata newTime[7][2];
while(1)
{
os_wait(K_SIG,0,0);
if(!key_enter)
{
if(m_level==0)
{
m_level++;
valid=1;
show_menu=1;
}
else if(m_level==1)
{
m_level++;
if(levl1_p==0)
{
pmenu=m_font[0] + levl2_p*4*32;
}
else if(levl1_p==1) //设置时间
{
for(i=0;i<6;i++)
{
chgeh[i]=for_showh[i];
chgel[i]=for_showl[i];
}
if(ph[0].pn==1)
{
ph[0].pad[0] |=0x99;
ph[0].pad[1] |=0x99; //选中第一个字符
}
else if(ph[0].pn==2)
{
ph[0].pad[1] |=0x99;
ph[0].pad[2] |=0x99;
}
chge_time=1;
}
else if(levl1_p==2) //定时
{
for(i=0;i<6;i++)
{
chgeh[i]=for_showh[i];
chgel[i]=for_showl[i];
}
if(ph[0].pn==1)
{
ph[0].pad[0] |=0x99;
ph[0].pad[1] |=0x99; //选中第一个字符
}
else if(ph[0].pn==2)
{
ph[0].pad[1] |=0x99;
ph[0].pad[2] |=0x99;
}
chge_time=1;
}
}
else if(m_level==2)
{
// m_level++; //至今菜单最深为二
if(levl1_p==0)
{
if(levl2_p==0)
{
time_tab=time_tab_cgst[0];
week_tab=week_tab_cgst[0];
tempert=tempert_cgst[0];
}
else if(levl2_p==1)
{
time_tab=time_tab_jcst[0];
week_tab=week_tab_jcst[0];
tempert=tempert_jcst[0];
}
//退出菜单,显示时间
show_menu=0;
pmenu=menu[0] + levl1_p*(4*32);
m_level=0; //清除本次菜单操作的痕迹
os_clear_signal(4);
valid=0;
}
else if(levl1_p==1)
{
if(chge_num==11)
{
newTime[6][1]=chgeh[0]; //设置年
newTime[6][0]=chgeh[1];
newTime[4][1]=chgeh[2]; //设置月
newTime[4][0]=chgeh[3];
newTime[3][1]=chgeh[4]; //设置日
newTime[3][0]=chgeh[5];
newTime[2][1]=chgel[0]; //设置年
newTime[2][0]=chgel[1];
newTime[1][1]=chgel[2]; //设置分
newTime[1][0]=chgel[3];
newTime[0][1]=chgel[4]; //设置秒
newTime[0][0]=chgel[5];
pl[5].pad[0] &=0x66;
pl[5].pad[1] &=0x66;
setTime(newTime);
m_level--;
chge_num=0;
chge_time=0;
}
else
{
chge_num++;
if(chge_num<6)
{
if(ph[chge_num].pn==1)
{
ph[chge_num - 1].pad[1] &=0x66;
ph[chge_num - 1].pad[2] &=0x66;
ph[chge_num].pad[0] |=0x99;
ph[chge_num].pad[1] |=0x99;
}
else if(ph[chge_num].pn==2)
{
ph[chge_num - 1].pad[0] &=0x66;
ph[chge_num - 1].pad[1] &=0x66;
ph[chge_num].pad[1] |=0x99;
ph[chge_num].pad[2] |=0x99;
}
}
else
{
if(pl[chge_num -6].pn==1)
{
pl[chge_num -6-1].pad[1] &=0x66;
pl[chge_num -6-1].pad[2] &=0x66;
pl[chge_num-6].pad[0] |=0x99;
pl[chge_num-6].pad[1] |=0x99;
}
else if(pl[chge_num -6].pn==2)
{
pl[chge_num -6-1].pad[0] &=0x66;
pl[chge_num -6-1].pad[1] &=0x66;
pl[chge_num -6].pad[1] |=0x99;
pl[chge_num -6].pad[2] |=0x99;
}
}
}
}
else if(levl1_p == 2)
{
if(chge_num==11)
{
timerTime[6][1]=chgeh[0]; //设置年
timerTime[6][0]=chgeh[1];
timerTime[4][1]=chgeh[2]; //设置月
timerTime[4][0]=chgeh[3];
timerTime[3][1]=chgeh[4]; //设置日
timerTime[3][0]=chgeh[5];
timerTime[2][1]=chgel[0]; //设置年
timerTime[2][0]=chgel[1];
timerTime[1][1]=chgel[2]; //设置分
timerTime[1][0]=chgel[3];
timerTime[0][1]=chgel[4]; //设置秒
timerTime[0][0]=chgel[5];
pl[5].pad[0] &=0x66;
pl[5].pad[1] &=0x66;
m_level--;
chge_num=0;
chge_time=0;
}
else
{
chge_num++;
if(chge_num<6)
{
if(ph[chge_num].pn==1)
{
ph[chge_num - 1].pad[1] &=0x66;
ph[chge_num - 1].pad[2] &=0x66;
ph[chge_num].pad[0] |=0x99;
ph[chge_num].pad[1] |=0x99;
}
else if(ph[chge_num].pn==2)
{
ph[chge_num - 1].pad[0] &=0x66;
ph[chge_num - 1].pad[1] &=0x66;
ph[chge_num].pad[1] |=0x99;
ph[chge_num].pad[2] |=0x99;
}
}
else
{
if(pl[chge_num -6].pn==1)
{
pl[chge_num -6-1].pad[1] &=0x66;
pl[chge_num -6-1].pad[2] &=0x66;
pl[chge_num-6].pad[0] |=0x99;
pl[chge_num-6].pad[1] |=0x99;
}
else if(pl[chge_num -6].pn==2)
{
pl[chge_num -6-1].pad[0] &=0x66;
pl[chge_num -6-1].pad[1] &=0x66;
pl[chge_num -6].pad[1] |=0x99;
pl[chge_num -6].pad[2] |=0x99;
}
}
}
}
}
}
else if(!key_esc)
{
if(valid)
{
m_level--;
if(m_level==1)
{
for(i=0;i<6;i++) //不管菜单操作是否进行过时间调整或定时
{ //把可能的对时间格式的潜在影响消除掉
ph[i].pad[0] &=0x66;
ph[i].pad[1] &=0x66;
ph[i].pad[2] &=0x66;
pl[i].pad[0] &=0x66;
pl[i].pad[1] &=0x66;
pl[i].pad[2] &=0x66;
}
if(levl1_p == 0)
{
pmenu=menu[0] + levl1_p*(4*32);
}
else if(levl1_p == 1 ||levl1_p == 2)
{
chge_num = 0;
chge_time = 0;
}
}
else if(m_level==0)
{
show_menu=0;
m_level=0; //清除本次菜单操作的痕迹
os_clear_signal(4);
valid=0;
}
}
}
else if(!key_up)
{
if(valid)
{
if(m_level==1)
{
if(pmenu != menu[0])
{
pmenu -= 4*32;
levl1_p--;
}
}
else if(m_level==2)
{
if(levl1_p==0)
{
if(pmenu != m_font[0])
{
pmenu -= 4*32;
levl2_p--;
}
}
else if(levl1_p==1)
{
if(chge_num<6)
{
chgeh[chge_num] ++;
}
else
{
chgel[chge_num -6] ++;
}
}
else if(levl1_p==2)
{
if(chge_num<6)
{
chgeh[chge_num] ++;
}
else
{
chgel[chge_num -6] ++;
}
}
}
}
}
else if(!key_down)
{
if(valid)
{
if(m_level==1)
{
if(pmenu != menu[2])
{
pmenu+=4*32;
levl1_p++;
}
}
else if(m_level==2)
{
if(levl1_p==0)
{
if(pmenu != m_font[1])
{
pmenu += 4*32;
levl2_p++;
}
}
else if(levl1_p==1)
{
if(chge_num<6)
{
chgeh[chge_num] --;
}
else
{
chgel[chge_num -6] --;
}
}
else if(levl1_p==2)
{
if(chge_num<6)
{
chgeh[chge_num] --;
}
else
{
chgel[chge_num -6] --;
}
}
}
}
}
}
}
void keyServ(void ) interrupt 0
{
isr_send_signal(2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -