一、系统设计思路
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)
{
...
}