数码管按键指针函数的应用

首先,我们来看看函数指针的定义

    int (*f) (int x); /*声明一个函数指针 */

   f=func; /* 将func函数的首地址赋给指针f */

    (*f)(x);/*调用f指向的func函数*/

接下来,我们再看函数指针一维数组

int  (*f[5])(int x) =//定义了5个函数指针,这5个指针地址在初始化后可以修改
{
    func0,
    func1,
    func2,
    func3,
    func4
};

int  (const *f[5])(int x)//定义了5个函数指针,这5个指针地址在初始化后不可修改,
                         //f编译后存放在flash可以节约ram资源
{
    func0,
    func1,
    func2,
    func3,
    func4
};

     在实际的应用中,经常会使用“事件-响应”模式去编程,比如,用户按下运行键机器运行,按下停止键机器停止。对应从用户界面分别传下来参数0和1。这时就会分别执行func0执行运行命令,func1执行停机命令。

我们再看函数指针二维数组

//状态-事件函数
void (*const OpTranTable[MEMU_ALL][KEY_ALL+1])(void) =
{
               //PRG            RUN            UP            DOWN           Shift     LOCAL                 OK              STOP          没有事件
/*MEMU_000*/   MEMU_000_PRG,    MEMU_000_RUN,  MEMU_000_UP,  MEMU_000_DOWN, MEMU_000_NUL,  MEMU_000_LOCAL,  MEMU_000_OK, MEMU_000_STOP, MEMU_000_NOKEY,
/*MEMU_001*/   MEMU_001_PRG, 	MEMU_000_RUN,  MEMU_001_UP,  MEMU_001_DOWN, MEMU_000_NUL,  MEMU_000_LOCAL,  MEMU_001_OK, MEMU_000_STOP, MEMU_000_NUL,
/*MEMU_002*/   MEMU_001_PRG, 	MEMU_000_RUN,  MEMU_002_UP,  MEMU_002_DOWN, MEMU_002_SHIFT,MEMU_000_LOCAL,  MEMU_002_OK, MEMU_000_STOP, MEMU_000_NUL,
/*MEMU_003*/   MEMU_001_PRG, 	MEMU_000_RUN,  MEMU_003_UP,  MEMU_003_DOWN, MEMU_003_SHIFT,MEMU_000_LOCAL,  MEMU_003_OK, MEMU_000_STOP, MEMU_003_NOKEY,
/*MEMU_004*/   MEMU_004_NUL, 	MEMU_004_NUL,  MEMU_004_NUL, MEMU_004_NUL,  MEMU_004_NUL,  MEMU_004_NUL,    MEMU_004_NUL,MEMU_004_NUL,  MEMU_004_NOKEY,
/*MEMU_005*/   MEMU_005_PRG, 	MEMU_000_RUN,  MEMU_005_UP,  MEMU_005_DOWN, MEMU_000_NUL,  MEMU_000_LOCAL,  MEMU_000_OK, MEMU_000_STOP, MEMU_005_NOKEY,
/*MEMU_006*/   MEMU_005_PRG, 	MEMU_000_RUN,  MEMU_006_UP,  MEMU_006_DOWN, MEMU_006_SHIFT,MEMU_000_LOCAL,  MEMU_006_OK, MEMU_000_STOP, MEMU_006_NOKEY,

};

     在实际应用中,会遇到在不用状态发生不同事件需要不同的响应函数,“当前状态-事件-响应函数”。比如在不同的界面按下不同的键响应函数也不同。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值