最近有使用到一个模块,编程使用了C语言伪类,整合模块时觉的很好用,以下贴出一个简略的代码,方便自己多多参考
/*
使用C语言伪类,可以很好的整合模块的编程
使得模块思路更加清晰,并避免程序变量混乱
现象
*/
//=========C语言伪类.h=====================
#ifndef _AS608_APP_H
#define _AS608_APP_H
#include "stm32f10x.h"
//模块合成
//录指纹 -->操作
typedef struct _Add_Finger {
void (*GetFinger1)(void); //指纹录入1
void (*GetFinger2)(void); //指纹录入2
void (*EmitFinger)(void); //生成指纹模版
void (*AddFingerID)(u16); //添加指纹ID
} Add_ModeType;
//删除模式 -->操作
typedef struct _Del_Finger {
void (*DelFingerOneID)(u16 ); //删除单个指纹ID
void (*DelFingerAllID)(void); //删除整个指纹库
} Del_ModeType;
//子类定义
typedef struct _AS608 {
u8 *AS608Mode ; //AS608模式 (变量)
u8 *addModePart; //录入指纹步骤 (变量)
u16 *fingerIDMax; //指纹最大容量 (变量)
u16 *fingerN; //现在录入指纹个数 (变量)
Add_ModeType *Add_Mode; //录入指纹操作 (操作指向的父类)
Del_ModeType *Del_Mode; //删除指纹操作 (操作指向的父类)
void (*BrushFinger)(void); //刷指纹 (操作指向的父类)
} AS608Type;
extern AS608Type AS608; //整个模块的操作
#endif
//=========C语言伪类.c=====================
#include "AS608_APP.h"
#include "delay.h"
#include "AS608_1.h"
//==录指纹==========================================================
//指纹录入1
void Add_FR1(void)
{
printf(" 正在指纹录入1 \n");
}
//指纹录入2
void Add_FR2(void)
{
printf(" 正在指纹录入2 \n");
}
//指纹比较,生成特征
void FR1_than_FR2(void)
{
printf("指纹比较,生成特征\n");
}
//储存指纹ID
void SaveFingerprint(u16 ID)
{
printf(" 正在保存指纹ID为 : %d \n",ID);
}
//删除单个指纹======================================================
void delectOneFingerprint(u16 ID)
{
printf(" 正在删除指ID : %d \n",ID);
}
//删除指纹库
void DelectAllFingerprint(void)
{
printf(" 正在删除指纹库 \n");
}
//刷指纹 ============================================================
void Refresh_FR(void)
{
printf(" 正在刷指纹 ");
}
//===================================================================
//===以上为实质的函数=====================
//===以下为赋值父类实体================================================
//录入指纹
Add_ModeType Add_Mode = {
.GetFinger1 = Add_FR1, //指纹录入1
.GetFinger2 = Add_FR2, //指纹录入2
.EmitFinger = FR1_than_FR2, //生成指纹模版
.AddFingerID = SaveFingerprint //添加指纹ID
};
//删除指纹
Del_ModeType Del_Mode = {
.DelFingerOneID = delectOneFingerprint, //删除单个指纹ID
.DelFingerAllID = DelectAllFingerprint //删除整个指纹库
};
//==以下为赋值子类实体=================================================
u8 AS608Mode = 0;
u8 AS608AddPart = 0;
AS608Type AS608 = {
.AS608Mode = &AS608Mode, //AS608模式
.addModePart = &AS608AddPart, //录入指纹步骤
.fingerIDMax = &AS608Para.PS_max, //指纹最大容量
.fingerN = &ValidN , //现在录入指纹个数
.Add_Mode = &Add_Mode, //录入指纹操作
.Del_Mode = &Del_Mode, //删除指纹操作
.BrushFinger = Refresh_FR //刷指纹
};
//================================
//====以下是伪类的运用
//变量赋值
AS608.AS608Mode[0] = 0 ; //赋值AS608模式值
AS608.addModePart[0] = 0 ; //赋值录入指纹步骤
//运用伪类操作
AS608.Add_Mode->GetFinger1(); //录入指纹模式,指纹录入1
AS608.Add_Mode->GetFinger2(); //录入指纹模式,指纹录入2
AS608.Add_Mode->GetFinger2(); //录入指纹模式,生成指纹模版
AS608.Add_Mode->AddFingerID(ID); //录入指纹模式,添加指纹ID
AS608.Del_Mode->DelFingerOneID(ID); //删除指纹模式,删除单个指纹ID
AS608.Del_Mode->DelFingerAllID(); //删除指纹模式,删除整个指纹库
AS608->BrushFinger(); //刷指纹模式