基于STM32的屏幕按键菜单设计框架

一,在我们学习单片机的过程中总离不开屏幕,无论是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();
}
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值