打印

STM32库函数编程学习心得:结构体,枚举的使用

[复制链接]
6475|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nqyijian|  楼主 | 2012-7-20 14:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nqyijian 于 2012-7-20 14:23 编辑

       结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型。
        首先结构体可以在一个结构中声明不同的数据类型。
        第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。
        第三,节省内存空间
        第四,高效率。

枚举工作模式:
typedef enum
{
        GPIO_Mode_IN   = 0x00,        /*!< GPIO Input Mode              */
        GPIO_Mode_OUT  = 0x01,    /*!< GPIO Output Mode             */
        GPIO_Mode_AF   = 0x02,      /*!< GPIO Alternate function Mode */
        GPIO_Mode_AN   = 0x03         /*!< GPIO Analog In/Out Mode      */
}GPIOMode_TypeDef ;


枚举工作速度:
typedef enum
{
        GPIO_Speed_Level_1  = 0x01,   /*!< Medium Speed */
        GPIO_Speed_Level_2  = 0x02,   /*!< Fast Speed   */
        GPIO_Speed_Level_3  = 0x03       /*!< High Speed   */
}GPIOSpeed_TypeDef ;


定义结构体类型:
typedef struct
{
        GPIOMode_TypeDef GPIO_Mode ;   
        GPIOSpeed_TypeDef GPIO_Speed ;
}GPIO_InitTypeDef ;


定义初始化结构体变量及赋值:
        GPIO_InitTypeDef    GpiocInit;                                    //定义变量
        GpiocInit.GPIO_Mode = GPIO_Mode_IN;                //变量赋值

        GpiocInit.GPIO_Speed = GPIO_Speed_Level_2;


形参为结构体的函数定义:
        GPIO_Init(GPIO_InitTypeDef  init);


形参为结构体的函数

GPIO_Init(GPIO_InitTypeDef  init)

{
            x = init.GPIO_Mode ;                                     //  x = 0x00
         y = init.GPIO_Speed ;                                   // y = 0x02
}




形参为结构体变量的函数调用:
        GPIO_Init(GpiocInit) ;

例2:
定义字符库结构体:
typedef struct typFNT_ASC16

{
    char Index[1];
    char Msk[16];
}ZiFuKu;


结构体幅值
const ZiFuKu ASC_16[] =
{


"1",0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x00,

"2",0x00,0x00,0x08,0x04,0x84,0x44,0x38,0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x00,

"3",0x00,0x00,0x08,0x04,0x44,0x44,0xB8,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00,

"4",0x00,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x00,0x00,0x01,0x01,0x05,0x07,0x05,0x00

}

查找到所需字符    ASC_16.Index[0] , 则ASC_16.Msk[0]即为液晶对应点阵码首地址。
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

539

帖子

1

粉丝