一,在我们学习单片机的过程中总离不开屏幕,无论是LCD屏幕,还是OLED屏幕,还是串口屏都需要菜单,通过按键来控制界面。
二,设计思想
主要用到按键控制光标,光标控制界面移动。
三,设计方法
extern u8 keytz,keybz;
//内部
extern u8 countkeytz,countkeytzg,keytzgbz;
extern u8 countkeysy,countkeysyg,keysygbz,countkeysypp;
extern u8 countkeyxy,countkeyxyg,keyxygbz,countkeyxypp;
extern u16 countkey,countkeysyp,countkeyxyp;
u8 keytzjs;
void KEY_chuli(void)
{
if(keytzh==0) //确认
{
if(countkeytz<50)
{
countkeytz++;
}
else
{
if(keytzgbz==1)
{
keytz=1;
keybz=1;
countkey=3000;
}
keytzgbz=0;
countkeytzg=0;
}
}
else
{
if(countkeytzg<50)
{
countkeytzg++;
}
else
{
keytzgbz=1;
countkeytz=0;
}
}
if(keysyh==0) //上移
{
if(countkeysy<50)
{
countkeysy++;
}
else
{
if(keysygbz==1)
{numssyebz=1;//为复位
//keytz=3;
countkey=3000;
}
keysygbz=0;
countkeysyg=0;
}
if(countkeysyp<1500)
{
countkeysyp++;
}
else
{
if(countkeysypp<60)
{
countkeysypp++;
}
else
{
//keytz=3;
countkey=250;
countkeysypp=0;
}
}
}
else
{
if(countkeysyg<50)
{
countkeysyg++;
}
else
{
keysygbz=1;
countkeysy=0;
countkeysyp=0;
countkeysypp=0;
}
}
if(keyxyh==0) //下移
{
if(countkeyxy<50)
{
countkeyxy++;
}
else
{
if(keyxygbz==1)
{
keytz=2;
keytzjs=1;
countkey=3000;
}
keyxygbz=0;
countkeyxyg=0;
}
if(countkeyxyp<1500)
{
countkeyxyp++;
}
else
{
if(countkeyxypp<60)
{
countkeyxypp++;
}
else
{
keytz=2;
countkey=250;
keytzjs=10;
countkeyxypp=0;
}
}
}
else
{
if(countkeyxyg<50)
{
countkeyxyg++;
}
else
{
keyxygbz=1;
countkeyxy=0;
countkeyxypp=0;
countkeyxyp=0;
}
}
}
void ssye1(void)
{
switch (keywz)
{
case 1: if(keycon==1)
{
switch (keytz)
{
case 1: numssye=6;keywz=1;keycon=106;ymbz=6;
break;
case 2: keywz=2;
break;
case 3: keywz=6;
break;
default:break;
}keytz=0;
}
break;
case 2:
switch (keytz)
{
case 1:numssye=8;keywz=1;keycon=108; ymbz=8;
break;
case 2:keywz=3;
break;
case 3: keywz=1;
break;
default:break;
}keytz=0;
break;
case 3:
switch (keytz)
{
case 1: numssye=9;keywz=1;keycon=109; ymbz=9;
break;
case 2: keywz=4;
break;
case 3: keywz=2;
break;
default:break;
}keytz=0;
break;
case 4:
switch (keytz)
{
case 1: numssye=10;keywz=1;keycon=110;
break;
case 2: keywz=5;
break;
case 3: keywz=3;
break;
default:break;
}keytz=0;
break;
case 5:
switch (keytz)
{
case 1: numssye=11;keywz=1;keycon=111;
break;
case 2: keywz=6;
break;
case 3: keywz=4;
break;
default:break;
}keytz=0;
break;
case 6:
switch (keytz)
{
case 1: numssye=13;keywz=1;keycon=113;
break;
case 2: numssye=2; keywz=1; keycon=102;
break;
case 3: keywz=5;
break;
default:break;
}keytz=0;
break;
default:break;
}
if(keycon==101)
{
keycon=1;keytz=0;numssye=1;keybz=1;
}
ssgb();
}
void key_prog(void)
{
switch (numssye)
{
case 0: ssye0 (); break; //页面0
case 1: ssye1 (); break; //页面1
case 2: ssye2 (); break; //页面2
case 3: ssye3 (); break; //页面3
case 4: ssye4 (); break; //页面4
case 5: ssye5 (); break; //页面5
case 6: ssye6 (); break; //页面6
case 7: ssye7 (); break; //页面8
case 8: ssye8 (); break; //页面9
case 9: ssye9 (); break; //页面10
default:numssye=0;break;
}
}
void ssye_prog(void)
{
if(keybz==0)
{
numssye=0;
delayus(500000);
}
else
{
if(numssye>=0){ numssye=1; keywz=1; keycon=101; }
key_prog();
delayus(100000);
}
}
int main()
{
while(1)
{
ssye_prog();
}
}