函数指针数组用法_函数指针数组用法有哪些

函数指针数组用法_函数指针数组用法有哪些函数指针数组的一些用法首先函数指针数组是数组,其次数组里面存放的是函数指针,函数指针又是什么呢,函数指针是指向函数首地址的指针,我个人认为函数指针数组可以批量像调用数组元素一样方便调用一些功能相似的一些函数(小弟愚见),我

函数指针数组的一些用法
  首先函数指针数组是数组,其次数组里面存放的是函数指针,函数指针又是什么呢,函数指针是指向函数首地址的指针,

  我个人认为函数指针数组可以批量像调用数组元素一样方便调用一些功能相似的一些函数(小弟愚见),我写这个博客之前就是遇到这个问题。

  首先介绍一下我遇到问题背景,想做个mini3216时钟,显示时间是用8快8*8点阵,主控芯片用的STM32F103RCT6,(驱动方式比较特别,

  分时复用)我先用宏定义的形式写了每个点的驱动。

  #define A1B1      {{GPIOA->CRL=0X00000030;GPIOA->CRH=0X00000000;}

                  {GPIOB->CRL=0X00000000;GPIOB->CRH=0X00000030;}

                {GPIOC->CRL=0X00000000;GPIOC->CRH=0X00000000;}

                {GPIOD->CRL=0X00000000;GPIOD->CRH=0X00000000;}

                {GPIOA->BRR=0XFFFF; GPIOB->BRR=0XFFFF;}

                {GPIOC->BRR=0XFFFF; GPIOD->BRR=0XFFFF;}

                {delay(a);}

                     {GPIOB->BSRR=0X0200;}}

  #define A1B2    {{GPIOA->CRL=0X00000300;GPIOA->CRH=0X00000000;}

                {GPIOB->CRL=0X00000000;GPIOB->CRH=0X00000030;}

                {GPIOC->CRL=0X00000000;GPIOC->CRH=0X00000000;}

                {GPIOD->CRL=0X00000000;GPIOD->CRH=0X00000000;}

                {GPIOA->BRR=0XFFFF; GPIOB->BRR=0XFFFF;}

                {GPIOC->BRR=0XFFFF; GPIOD->BRR=0XFFFF;}

                {delay(a);}

                     {GPIOB->BSRR=0X0200;}}

  #define A1B3    {{GPIOA->CRL=0X00003000;GPIOA->CRH=0X00000000;}

                       {GPIOB->CRL=0X00000000;GPIOB->CRH=0X00000030;}

                {GPIOC->CRL=0X00000000;GPIOC->CRH=0X00000000;}

                {GPIOD->CRL=0X00000000;GPIOD->CRH=0X00000000;}

                {GPIOA->BRR=0XFFFF; GPIOB->BRR=0XFFFF;}

                {GPIOC->BRR=0XFFFF; GPIOD->BRR=0XFFFF;}

                {delay(a);}

                     {GPIOB->BSRR=0X0200;}}

  但是我不仅仅是让每个灯亮,还要显示数字,汉字,需要写汉字数字驱动程序。但是如果用宏定义的方式去写显示函数,会非常复杂(小弟愚见,可能会非常简单,我还不知道罢了)。

    A1B1;

    A1B2;

    A1B3;

    A1B4;

    A1B5;

    A1B6;

    A1B7;

    A1B8;//如果让每个点亮得写512个这样的调用宏定义

   

  所以把宏定义封装成函数,

  void  FA1B1(void){A1B1;};

  void  FA1B2(void){A1B2;};

  void  FA1B3(void){A1B3;};

  void  FA1B4(void){A1B4;};

  void  FA1B5(void){A1B5;};

  void  FA1B6(void){A1B6;};

  void  FA1B7(void){A1B7;};

  void  FA1B8(void){A1B8;};    //将宏定义封装成为函数

  再将这些函数放入16*32的一个函数指针数组中,这样再写显示函数时就显得非常简洁。

  extern void (*p[16][32])(void)={

  FA1B1,FA1B2,FA1B3,FA1B4,FA1B5,FA1B6,FA1B7,FA1B8,

  FA1C1,FA1C2,FA1C3,FA1C4,FA1C5,FA1C6,FA1C7,FA1C8,

  FC1A1,FC1A2,FC1A3,FC1A4,FC1A5,FC1A6,FC1A7,FC1A8, 

  FB1C1,FB1C2,FB1C3,FB1C4,FB1C5,FB1C6,FB1C7,FB1C8,,,};//这就是函数指针数组

   

   

  for(int i=0;i<=15;i++)    //让全部点亮只需要这个循环即可,关键是之后显示函数编写上更加方便了

    for(int j=0;j<=31;j++)

        p[i][j]();    

   

  诺又不当之处敬请指正!

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/96304.html

(0)
上一篇 2024年 5月 23日
下一篇 2024年 5月 23日

相关推荐

关注微信