IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 单片机模块化编程 -> 正文阅读

[嵌入式]单片机模块化编程

概述

? ? ? ? 1、青铜示例:

#include <stdio.h>

enum {
    LED1,
    LED2,
    LED3,
    LED_NUM
};

void Func_LED1(unsigned char state);
void Func_LED2(unsigned char state);
void Func_LED3(unsigned char state);

/**
 * 函数指针数组定义格式
 * 函数返回类型 (*指针变量名[数组大小])(函数参数列表);
 * @param state
 * @return
 *
 */
void (*func[LED_NUM])(unsigned char state) = {Func_LED1, Func_LED2, Func_LED3};

void Func_LED1(unsigned char state)
{
    if (state)
        printf("LED1 ON\r\n");
    else
        printf("LED1 OFF\r\n");
}

void Func_LED2(unsigned char state)
{
    if (state)
        printf("LED2 ON\r\n");
    else
        printf("LED2 OFF\r\n");
}

void Func_LED3(unsigned char state)
{
    if (state)
        printf("LED3 ON\r\n");
    else
        printf("LED3 OFF\r\n");
}

int main() {

//    for (int i = 0; i < LED_NUM; ++i) {
//        func[i](1);
//    }

    func[LED1](1);
    func[LED2](1);
    func[LED3](1);

    return 0;
}

运行结果:

2、白银示例:

key.h文件

//
// Created by champion on 2021/11/30.
//

#ifndef UNTITLED1_KEY_H
#define UNTITLED1_KEY_H

typedef enum {
    KEY1,
    KEY2,
    KEY_NUM,
}KEY_ID_TYDEF;

typedef enum {
    KEY_IDLE,       //空闲
    KEY_PRESS,      //短按
    KEY_LONG_PRESS, //长按
    KEY_RELEASE,    //释放
}KEY_STATE_TYDEF;




typedef void (*pKeyScanCallBack) (KEY_ID_TYDEF KEY_ID, KEY_STATE_TYDEF KEY_STATE);

void keyScanCBRegister(pKeyScanCallBack pCB);
void keyInit(void);
void keyPoll(void);

#endif; //UNTITLED1_KEY_H

key.c文件

//
// Created by champion on 2021/11/30.
//
#include <stdio.h>
#include "key.h"

KEY_ID_TYDEF keyID;
KEY_STATE_TYDEF keyState;
pKeyScanCallBack pkeyScanCB;


void keyInit(void)
{
    keyID = 0;
    keyState = KEY_IDLE;
    pkeyScanCB = NULL;
}

void keyScanCBRegister(pKeyScanCallBack pCB)
{
    if (pkeyScanCB == NULL) {
        pkeyScanCB = pCB;
    }
}


void keyPoll(void)
{
    printf("Please Enter key ID: \r\n");
    if (scanf("%d", &keyID) == 1) {
        printf("\r\n");
        printf("Please Enter key state: \r\n");
        if (scanf("%d", &keyState) == 1) {
            //keyScanHandle(keyID, keyState) 这里相当于下面这句话,通过这样的方法,封装好硬件层于应用层的API
            if (pkeyScanCB != NULL) {
                pkeyScanCB(keyID, keyState);
            }
        }
    }
}

main.c文件

#include <stdio.h>
#include "key.h"

void keyScanHandle(KEY_ID_TYDEF KEY_ID, KEY_STATE_TYDEF KEY_STATE)
{
    printf("KEY_ID :%d, KEY_STATE :%d \r\n", KEY_ID, KEY_STATE);
}

int main() {

    keyInit();
    keyScanCBRegister(keyScanHandle);
    keyPoll();

    return 0;
}

运行结果:

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 17:52:21  更:2021-12-01 17:54:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:51:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码