#define MenuWhat(n) {(U8 **)n,(sizeof(n)/sizeof(U8 *))}

#define MenuWhat(n) {(U8 **)n,(sizeof(n)/sizeof(U8 *))}
 
const struct Menu IcoMenu[] =
{
MenuWhat(TopItemCN),
MenuWhat(TopItemEN),
};
======================================================================
MenuWhat(TopItemCN), 
MenuWhat(TopItemEN), 
可替换为:
{(U8 **)TopItemCN,(sizeof(TopItemCN)/sizeof(U8 *)),0},
{(U8 **)TopItemEN,(sizeof(TopItemEN)/sizeof(U8 *)),0},
进一步替换:
{TopItemCN,5,0},
{TopItemEN,5,0},
根据menu结构体定义,也就是说:
菜单名字现实为TopItemCN以及TopItemEN中的内容,菜单条目为5条,指向的执行函数为空


附1:Bar型菜单的数据结构
==============================================================
//Bar型菜单的数据结构
struct Menu
{
//    U8 _CONST_ **Text;     //指向显示内容数组的指针
    U8 **Text;     //指向显示内容数组的指针
    U8 TextNum;         //项个数
    void* (*Action)();  //对应的执行函数
};
==============================================================

(sizeof(n)/sizeof(U8 *)的意思是n中有多少个元素!


附2:一个占用内存极少的菜单系统的实现
http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=798580
给以下代码添加注释#include <reg52.h> #include <intrins.h> #define u8 unsigned char #define u16 unsigned int #define DECODE_MODE 0x09 #define INTENSITY 0x0A #define SCAN_LIMIT 0x0B #define SHUT_DOWN 0x0C #define DISPLAY_TEST 0x0F #define BLOCKS 4 sbit MAX7219_CLK = P2^2; sbit MAX7219_CS = P2^1; sbit MAX7219_DIN = P2^0; u8 code bytes[] = { 0x3e,0x63,0x63,0x7f,0x63,0x63,0x63,0x63, //A 0x7e,0x63,0x63,0x7e,0x63,0x63,0x63,0x7e, //B 0x3e,0x63,0x63,0x60,0x60,0x63,0x63,0x3e, //C }; u8 val[BLOCKS]; u8 character_len = sizeof(bytes) / 8; void delay(u16 x) { u16 i,j; for(i = 0; i < x; i++) for(j = 0;j < 112; j++); } void Max7219_writeByte(u8 dat) { u8 i; MAX7219_CS = 0; for(i = 8; i >= 1; i--) { MAX7219_CLK = 0; MAX7219_DIN = dat & 0x80; // &10000000, 取最高位 dat = dat << 1; MAX7219_CLK = 1; } } void Max7219_singeWrite(u8 index, u8 addr, u8 dat) { MAX7219_CS = 0; Max7219_writeByte(addr); Max7219_writeByte(dat); while(index--) { Max7219_writeByte(0x00); Max7219_writeByte(0x00); } MAX7219_CS = 1; } void Max7219_multiWrite(u8 addr, u8 len, u8* dat) { MAX7219_CS = 0; while(len--) { Max7219_writeByte(addr); Max7219_writeByte(*dat++); } MAX7219_CS = 1; } void Max7219_init(void) { u8 i; for (i = 0; i < BLOCKS; i++) { Max7219_singeWrite(i, SHUT_DOWN, 0x01); // 0x00:shutdown, 0x01:normal Max7219_singeWrite(i, DECODE_MODE, 0x00); // No decode Max7219_singeWrite(i, INTENSITY, 0x03); // 0x00:min, 0x0F:max Max7219_singeWrite(i, SCAN_LIMIT, 0x07); // Display 8 digits Max7219_singeWrite(i, DISPLAY_TEST, 0x00); // 0x00:normal, 0x01:test mode } }
06-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值