C51编写菜单的示例程序



*/

#include 
#include

#define SIZE_OF_KEYBD_MENU 20 //菜单长度


uchar KeyFuncIndex=0;
//uchar KeyFuncIndexNew=0;

void (*KeyFuncPtr)(); //按键功能指针

typedef struct
{
uchar KeyStateIndex; //当前状态索引号
uchar KeyDnState; //按下"向下"键时转向的状态索引号
uchar KeyUpState; //按下"向上"键时转向的状态索引号
uchar KeyCrState; //按下"回车"键时转向的状态索引号
void (*CurrentOperate)(); //当前状态应该执行的功能操作
} KbdTabStruct;

KbdTabStruct code KeyTab[SIZE_OF_KEYBD_MENU]=
{
{ 0, 0, 0, 1,(*DummyJob)},//顶层

{ 1, 2, 0, 3,(*DspUserInfo)},//第二层
{ 2, 1, 1, 9,(*DspServiceInfo)}, //第二层

{ 3, 0, 0, 1,(*DspVoltInfo)},//第三层>>DspUserInfo的展开
{ 4, 0, 0, 1,(*DspCurrInfo)},//第三层>>DspUserInfo的展开
{ 5, 0, 0, 1,(*DspFreqInfo)},//第三层>>DspUserInfo的展开
{ 6, 0, 0, 1,(*DspCableInfo)},//第三层>>DspUserInfo的展开
...........
{ 9, 0, 0, 1,(*DspSetVoltLevel)}//第三层>>DspServiceInfo的展

..........
};

void GetKeyInput(void)
{
uchar KeyValue;
KeyValue=P1&0x07; //去掉高5bit
delay(50000);
switch(KeyValue)
{
case 1: //回车键,找出新的菜单状态编号
{
KeyFuncIndex=KeyTab[KeyFuncIndex].KeyCrState;
break;
}
case 2: //向上键,找出新的菜单状态编号
{
KeyFuncIndex=KeyTab[KeyFuncIndex].KeyUpState;
break;
}
case 4: //向下键,找出新的菜单状态编号
{
KeyFuncIndex=KeyTab[KeyFuncIndex].KeyDnState;
break;
}
default: //按键错误的处理
......
break;
}
KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperate;
(*KeyFuncPtr)();//执行当前按键的操作
}
//其中KeyTab的设计颇费尽心机

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C51单片机是一种非常常用的微控制器,它的功能强大,能够实现各种复杂任务。12864液晶显示屏是一种常见的显示器件,它具有128列和64行的像素点,可以显示文字和图形。 要设计一个C51单片机12864菜单程序,首先需要了解液晶显示屏的工作原理和C51单片机的编程思路。 该菜单程序可以分为几个主要部分: 1. 初始化:初始化液晶显示屏和单片机的相关设置,包括端口设置、显示模式设置等。同时,也可以初始化菜单的选项和默认选项。 2. 菜单显示:根据存储在单片机中的菜单选项信息,将菜单选项按照一定的格式显示在液晶显示屏上。可以通过循环遍历菜单选项数组,逐个显示在屏幕上。 3. 菜单选择:通过按键或者其他输入方式实现菜单选项的选择功能。可以通过中断或者轮询的方式获取按键的输入,并根据输入选择相应的菜单选项。 4. 菜单操作:根据选择的菜单选项执行相应的操作。可以通过switch-case语句或者函数指针来实现选择菜单选项后的具体操作,如设置系统参数、调整亮度等。 5. 菜单返回:当操作完成后,可以选择返回上一级菜单或者返回主界面。可以使用栈来保存菜单的层级关系,方便进行返回操作。 通过以上步骤,就可以实现一个简单的C51单片机12864菜单程序。当然,具体的实现方式和功能可以根据具体需求进行扩展和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值