单片机编程实战1-LED架构篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 引言
  • 一、LED架构模型的输入处理
    • 1.1 输入模型的理论
    • 1.2 输入模型的实例
  • 二、LED架构模型的过程处理
    • 2.1 过程处理模型
    • 2.2 过程处理实例
  • 三、 LED架构模型的输出处理
    • 3.1 输出模型的理论
    • 3.2 输出模型的实例
  • 四、LED架构模型总结

引言

单片机LED架构的编程方法和研究:目前在单片机的编程过程中,对于一些特殊情况的事件需要用对应的LED显示出来。比如大街上的红绿灯指挥着人们的交通出行、所以对于一个好的项目代码,模块化思想是必不可少。本次讨论的就是LED架构的模块化,让用户编写代码的时候提供理论基础。

一、LED架构模型的输入处理

1.1 输入模型的理论

LED的作用一般都是指示作用,当某一个事件来的时候出现对应的状态,这里在单片机的编程思想中涉及到了2个概念,事件触发型和状态机。这里不详细介绍这2种编程思想的概念。这里我简单的把它事件个状态封装在一个结构体里面,然后有N个事件,就定义N个结构体数组。

1.2 输入模型的实例

typedef void (*Doled_t)();
typedef struct
{
uint8_t event;
Doled_t ledshow;
} LED_Table_t;
enum event
{
RED_LED = 0,
GREEN_LED = 1,
BLUE_LED = 2,
MAX_LED_EVENT
}event;
LED_Table_t s_LED_Table[MAX_LED_EVENT];
uint8_t s_Event = 0xff;
uint8_t LED_SetStatus(enum event index, uint8_t status)
{
uint8_t ret = 0;
if(index {
if(s_LED_Table[index].event != status)
{
s_LED_Table[index].event = status;
ret = 1;
}
else
{
ret = 0;
}

}
else
{
ret =2;
}
return ret;
}

二、LED架构模型的过程处理

2.1 过程处理模型

在第1.1中我们已经实现了触发事件的函数,当别的模块调用该函数的时候,在LED主任务中会不断的查询事件表,当事件表置位的时候,就去执行事件所对应的函数。

2.2 过程处理实例

void LED_MainFunction()
{

uint8_t index = 0;
for(index= 0;index < MAX_LED_EVENT;index++)
{
if( s_LED_Table[index].event = 1)
{
s_LED_Table[index].ledshow();
s_Event = index;
break;
}

}

if(index == MAX_LED_EVENT)
{
    s_Event = 0xff;
}

}

三、 LED架构模型的输出处理

3.1 输出模型的理论

当外部模块需要知道当前LED在执行哪个事件的时候,我们需要提供出正在执行的事件。

3.2 输出模型的实例

uint8_t LED_GetEvent()
{
return s_Event;
}

四、LED架构模型总结

上面已经构建了LED架构模型,只是提供一种编程方法,大家遇到LED显示的问题完全可以按照上面的方法来编程。结构体的成员可以用来拓展,比如LED的显示等级,LED的状态等。里面的指示函数具体的实现按照具体情况,这里只提供一种方法,这种架构模型还适用于语言模块,比如蜂鸣器。还有数码管模块等。

你可能感兴趣的:(单片机,stm32,arm,嵌入式硬件)