stm32菜单设计——面向对象——结构体化

很多朋友在编写单片机的时候都会涉及到液晶的显示,如果独立开发一个系统的话,必然也就会涉及到界面化,有很多的朋友嫌麻烦,会采用不断检测按键,之后按下这个就显示这一张界面,哪一张就显示哪一个,但是事实上程序小的时候问题不大,程序一旦变得很大,界面很多,跳来跳去就会令人十分头疼,MRLIU在这里学习了一种有点面向对象的意思的程序,具体内容如下

#include "menu2.h" #include"ratatekeys.h" #include "delay.h" #include "JLX12864.h" uint8_t func_index=0; uint8_t current_operation_index=0; uint8_t Cursor_pic[32]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //ÕâÊÇÑ¡ÔñµÄ¹â±ê£¬Ò»¸öºÚ·½¿é uint8_t liao[]={ //-- µ÷ÈëÁËÒ»·ùͼÏñ£ºD:\ÎÒµÄÎĵµ\My Pictures\12864-555.bmp -- //-- ¿í¶Èx¸ß¶È=128x64 -- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x80, 0x80,0x80,0x80,0x80,0x40,0x40,0x40,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x40,0x40,0x40,0xE0,0xE0,0x61,0x40,0x00,0x00,0x00,0x01,0x01, 0x01,0x00,0x08,0xF8,0xF8,0x06,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x8F,0xFF,0x80,0x80,0x00,0x00,0x00,0x00,0x00, 0x20,0x60,0xC0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x02,0x02, 0x06,0x06,0x0C,0x0C,0x0C,0x1C,0x1C,0x18,0x18,0x18,0x18,0x18,0x08,0x08,0x00,0x00}; /*"?",0*/ uint8_t ning[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x38, 0x70,0x60,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x38,0x3C,0x0F,0x02,0x02,0x02,0x82,0x82,0x81,0x81,0x81,0x81, 0xC1,0xC1,0xC1,0xC1,0x40,0x40,0x40,0x48,0x06,0x07,0x07,0x03,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0xFF, 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x18,0x78,0x3F, 0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; /*"?",1*/ uint8_t da[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xF0,0xF0, 0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xC0,0xC0,0xC0,0xC0,0x40,0x40,0x40,0xFF,0xFF, 0x60,0x20,0x20,0x20,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x7C,0x1F,0x03, 0x0C,0x30,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x08,0x04,0x06,0x03,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0x07,0x0F,0x1E,0x1C,0x1C,0x18,0x18,0x10,0x10,0x10,0x00,0x00}; /*"?",2*/ uint8_t xue[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0xE0,0xE0,0x00,0x00,0x10,0x70, 0xE0,0x00,0x00,0x80,0xFC,0x3C,0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xE0,0xF8,0x3C,0x08,0x08,0x48,0xC8,0xC9,0x48,0x44,0x44,0x24, 0x24,0xE4,0xE6,0x43,0x02,0x02,0x02,0x02,0x32,0x1E,0x0E,0x0E,0x0C,0x00,0x00,0x00, 0x00,0x00,0x00,0x10,0x31,0x30,0x30,0x30,0x10,0x10,0x10,0x10,0x10,0x18,0x1A,0x0E, 0xFD,0xE8,0x08,0x08,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x30,0x70,0x78, 0x3F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"?",3*/ }; uint8_t huibiao[]={ 0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0x78,0x38,0xBC,0x5C,0x5E,0x1E,0x3F,0x1F, 0xDE,0xDE,0x9C,0x1C,0x3C,0x38,0x78,0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00, 0x00,0xF0,0xFC,0xFF,0xFF,0x0F,0xE1,0xF8,0xFE,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0x1F,0xFF,0xFC,0xC0,0x00,0x00,0x01,0x03,0x3F,0xFF,0xFE,0xFC,0xF0,0x00, 0x00,0x03,0x1F,0x3F,0x7F,0xF8,0xE1,0xCF,0x9F,0x3F,0x7C,0xF8,0xF0,0xF0,0xF0,0xE0, 0xE0,0xE0,0xE0,0xF3,0xFB,0x38,0x9C,0x9E,0xE3,0xF0,0xFF,0x7F,0x1F,0x0F,0x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x0E,0x0E,0x0E,0x1D,0x1D,0x1D, 0x1C,0x1C,0x1E,0x0E,0x0E,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00 }; uint8_t mem[100]; uint8_t I = 0;//µçÁ÷µÄ³õʼֵÉèÖÃΪ0A key_table table[MAX_table_value]= { {0,1,2,fun00},//Õâ¸ö²Ëµ¥µÄµÚÒ»Ò³¾ÍÁ½ÐÐ ÊÖ¶¯ {1,0,3,fun11},//×Ô¶¯ {2,0,0,fun22},//ÏÔʾµçÁ÷µçѹ£¬È·ÈÏ»òÕßÐýת¾ÍÍ˳ö {3,4,3,fun33},//¹â±êÔÚµçÁ÷Ôö¼ÓÒ»¿éÉÏ {4,5,4,fun44},//ÔÚµçÁ÷¼õÉÙµÄÒ»¿éÉÏ {5,3,6,fun55}, //ÔÚÈ·¶¨µÄÄÇÒ»¿éÉÏ {6,0,0,fun66},//µ½µçÁ÷µçѹÏÔʾµÄÄÇÒ»Ò³£¬°´Ï»òÕßÐýת¶¼ÊÇ·µ»Ø }; void index_searcher(void) { uint8_t key = KEY_read(); if(key)//ÒªÊDZàÂëÆ÷Óзµ»ØÊýÖµ µÄ»°£¬¾ÍÅÐ¶Ï { clear_screen(); switch(key) { case 1: func_index = table[func_index].rotated; break;//ÕâÀï¾ÍÊÇÈ¡µÃº¯Êý´úºÅÖµ case 2: func_index = table[func_index].clicked; break;//ÕâÀï¾ÍÊÇÈ¡µÃº¯Êý´úºÅÖµ //˵µ½µ×¾ÍÊÇÒ»¸ö½¹µãµÄÎÊÌ⣬Ðýת֮ºó»òÕßµã»÷Ö®ºóµ±Ç°½¹µã¾Í¹ýÈ¥ÁË } current_operation_index = table[func_index].current; (*table[current_operation_index].current_operation)(); } } void fun00 (void) { diplay_Cursor(1,1);//ÏÔʾ¹â±ê diplay_strings(1,20,"×Ô¶¯"); // diplay_strings(3,20,"ÊÖ¶¯"); // } void fun11 (void) { diplay_Cursor(3,1);//ÏÔʾ¹â±ê diplay_strings(1,20,"×Ô¶¯"); // diplay_strings(3,20,"ÊÖ¶¯"); // } void fun22 (void) { diplay_strings(1,1,"³äµçµçѹ V"); // diplay_strings(3,1,"·Åµçµçѹ V"); // diplay_strings(1,70,"³äµçµçÁ÷ A"); // diplay_strings(3,70,"·ÅµçµçÁ÷ A"); // diplay_strings(5,1,"°´Ï»òÕßÐýת·µ»Ø"); // } void fun33 (void) { I+=1; sprintf(mem,"µçÁ÷ =%4d A",I); diplay_strings(1,20,mem); diplay_Cursor(3,1);//ÏÔʾ¹â±ê diplay_strings(3,20,"µçÁ÷¼Ó"); diplay_strings(5,20,"µçÁ÷¼õ"); // diplay_strings(7,20,"È·¶¨"); // } void fun44 (void) { I-=1; sprintf(mem,"µçÁ÷ =%4d A",I); diplay_strings(1,20,mem); diplay_Cursor(5,1);//ÏÔʾ¹â±ê diplay_strings(3,20,"µçÁ÷¼Ó"); // diplay_strings(5,20,"µçÁ÷¼õ"); // diplay_strings(7,20,"È·¶¨"); // } void fun55 (void) { diplay_strings(1,20,"µçÁ÷£º A"); diplay_Cursor(7,1);//ÏÔʾ¹â±ê diplay_strings(3,20,"µçÁ÷¼Ó"); // diplay_strings(5,20,"µçÁ÷¼õ"); // diplay_strings(7,20,"È·¶¨"); // } void fun66 (void) { diplay_strings(1,1,"³äµçѹ V"); // diplay_strings(3,1,"·Åµçѹ V"); // diplay_strings(1,70,"³äµçÁ÷ A"); // diplay_strings(3,70,"·ÅµçÁ÷ A"); // . diplay_strings(5,1,"°´Ï»òÕßÐýת·µ»Ø"); // } void face (void) { } void diplay_Cursor(uint8_t row,uint8_t colomn)//ÏÔʾ¹â±ê { display_graphic_8x16(row,colomn,Cursor_pic); } void diplay_strings(uint8_t row,uint8_t colomn,uint8_t * string) { display_GB2312_string(row,colomn,string); //ÔÚµÚ1Ò³£¬µÚ1ÁУ¬ÏÔʾһ´®16x16µãÕóºº×Ö»ò8x16µÄASCII×Ö } void displayface(void) { clear_screen(); //clear all dots display_32x32(liao,1,0); display_32x32(ning,33,0); display_32x32(da,65,0); display_32x32(xue,97,0); display_32x32(huibiao,97,4); delay_ms(1000); clear_screen(); display_GB2312_string(1,1,"DC_DCË«ÏòÎÈѹԴ "); display_GB2312_string(3,1,"Áõ ¸¶ Ñî "); delay_ms(1500); clear_screen(); display_GB2312_string(3,1,"µçÔ´³õʼ»¯¡¤ "); delay_ms(1000); display_GB2312_string(3,1,"µçÔ´³õʼ»¯¡¤¡¤ "); delay_ms(1000); display_GB2312_string(3,1,"µçÔ´³õʼ»¯¡¤¡¤¡¤"); delay_ms(1000); clear_screen(); display_GB2312_string(1,1,"ÇëÑ¡Ôñ "); display_GB2312_string(3,1,"ÊÖ¶¯¡¢×Ô¶¯Ä£Ê½ "); display_GB2312_string(5,1,"Ðýת±àÂëÆ÷Òƶ¯ "); display_GB2312_string(7,1,"°´Ï°´¼üÈ·¶¨ "); delay_ms(1000); }

 

typedef struct {  uint8_t current;  uint8_t rotated;//??  uint8_t clicked;//??  void (*current_operation)(void); } key_table;//ÕâÀïµÄtable²»ÊÇÒ»Ò³²Ëµ¥£¬¶øÊÇÒ»Áв˵¥

key_table table[MAX_table_value]= { {0,1,2,fun00},//Õâ¸ö²Ëµ¥µÄµÚÒ»Ò³¾ÍÁ½ÐÐ ÊÖ¶¯ {1,0,3,fun11},//×Ô¶¯ {2,0,0,fun22},//ÏÔʾµçÁ÷µçѹ£¬È·ÈÏ»òÕßÐýת¾ÍÍ˳ö {3,4,3,fun33},//¹â±êÔÚµçÁ÷Ôö¼ÓÒ»¿éÉÏ {4,5,4,fun44},//ÔÚµçÁ÷¼õÉÙµÄÒ»¿éÉÏ {5,3,6,fun55}, //ÔÚÈ·¶¨µÄÄÇÒ»¿éÉÏ {6,0,0,fun66},//µ½µçÁ÷µçѹÏÔʾµÄÄÇÒ»Ò³£¬°´Ï»òÕßÐýת¶¼ÊÇ·µ»Ø };

而以上单提出来的这一部分就是精华了,结构体的第一个元素这的是如果旋转了,我们跳转到另外的哪一个菜单,第二个元素,使我们确定了以后,跳转到谁,第三个也就是在本格菜单下,执行的 是哪个函数 。而我们其他的,比如说是函数声明啥的都在.h里,这里没有影响,不粘出来了。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值