0
点赞
收藏
分享

微信扫一扫

物联笔记-3

穿裙子的程序员 2022-03-30 阅读 63
c语言

一、系统设计思路

1、框架拆分为子系统(拆分原则尽可能独立)

2、子系统细分(子系统细分为驱动和应用接口)

3、业务逻辑

二、LCD案例说明

1、单片机通过并口方式直接操作LCD,LCD自带RAM,单片机可以直接访问显存,通过点阵映射到点阵显示

2、单片机通过IIC 或者 SPI方式串行操作LCD,LCD自带RAM,单片机可以直接访问显存,通过点阵映射到点阵显示

3、单片机通过LCD控制器,直接控制LCD点阵,LCD没有RAM作为缓冲,需要单片机自己准备RAM作为显存使用

4、框架示例,根据对课程的理解,简要分层以下4层

 main.c

void main(void)
{
desplay_devs_init();                           //注册LCD
DisplayDev *pdev = get_display_dev("oled");    //获取LCD
        pdev->Init(pdev);                      //操作LCD,  初始化硬件
pdev->FlushFB(pdev);                           //操作LCD,调研应用
}
typedef struct DisplayDev {
    char *name;
    int iXres;
    int iYres;
    int iBpp;
    char *Framebuffer;
    void (*init)(struct DisplayDev *d);
    void (*flush)(struct DisplayDev *d);
    void (*draw_pt)(struct DisplayDev *d);
}DisplayDev, *p_DisplayDev;
//初始化:注册所有LCD
void desplay_devs_init(void)
{
    lcd_register( &oled);
    lcd_register(&other_lcd);
    lcd_register(&....);
}
//注册LCD
void lcd_register(DisplayDev *dev)
{    
    lcd_list[count]->name = dev->name;
    lcd_list[count]->iXres = dev->iXres;
    .......................=...........;
}
//移除LCD
void lcd_remove(DisplayDev *dev)
{
    ...
}
//获取LCD
DisplayDev *get_lcd(char* lcd_name)
{
    return ..lcd
}

lcd_oled.c

uint8_t oled_buf[...];

static DisplayDev oled = 
{
    "oled", 
    100, 
    200, 
    1, 
    oled_buf,
    oled_init, 
    oled_flush, 
    oled_draw_pt
};
//硬件接口初始化
void oled_init(void)
{
    lcd_spi...iic...fsmc..._init
    oled_config();
    ...
}

//模式配置
void oled_config(void)
{
    ...
}

//画点
void oled_draw_pt(int x,int y, color c)
{
    ...   
}

//刷屏
void oled_flush(color c)
{
    ...
}
举报

相关推荐

0 条评论