程序架构的核心理念和需求
回调函数的作用
#ifndef _KEY_H_
#define _KEY_H_
typedef enum
{
KEY1,
KEY2,
}KEY_IT_TYPEDEF;
typedef enum
{
KEY_IDLE, //空闲状态
KEY_PRESS, //按键短按
KEY_LONG_PRESS, //按键长按
KEY_RELEASE, //按键释放
}KEY_STATE_TYPEDEF;
typedef void (*pKeyScanCallBack)(KEY_STATE_TYPEDEF KeyID, KEY_STATE_TYPEDEF KeyState);
void KeyInit(void);
void KeyScanCBSRegister(pKeyScanCallBack pCBS);
void KeyPoll(void);
#endif /* _KEY_H_ */
#include "key.h"
#include <stdio.h>
KEY_IT_TYPEDEF keyVal; //按键ID
KEY_STATE_TYPEDEF keyState; //按键状态
pKeyScanCallBack pKeyScanCBS;
void KeyInit()
{
keyVal = 0;
keyState = KEY_IDLE;
pKeyScanCBS = 0;
}
void KeyScanCBSRegister(pKeyScanCallBack pCBS)
{
if (pKeyScanCBS == 0)
{
pKeyScanCBS = pCBS;
}
}
void KeyPoll()
{
printf("Please Enter key value:");
if (scanf_s("%d", &keyVal) == 1)
{
printf("\r\n");
printf("Please enter key state:");
if (scanf_s("%d", &keyState) == 1)
{
if (pKeyScanCBS != 0)
{
pKeyScanCBS(keyVal,keyState);
}
}
}
}
#include <stdio.h>
#include "key.h"
void KeyScanHandle(KEY_STATE_TYPEDEF KeyID, KEY_STATE_TYPEDEF KeyState)
{
// if (KeyID == KEY2)
// {
if (KeyState == KEY_PRESS)
{
printf("KeyID = %d,KeyState = %d\r\n", KeyID, KeyState);
}
// }
}
int main(int argc, char* argv)
{
KeyInit();
KeyScanCBSRegister(KeyScanHandle);
KeyPoll();
return 0;
}
回调函数产品中应用
串口数据接收
注册函数
(学习转自:公众号无极单片机)