- 简介
最近项目中使用的一个LCD断码屏显示驱动框架。
- 调用流程图
-
1.设置全局显示缓存,
LCD_DRAM_BUFF[SEG_NUM_MAX]
; -
2.实现LCD独立显示事件内容:
seg_lcd_xx_elem_display_set(void *elem_value)
- 例如对断码屏幕上的蓝牙图标的显示控制,
seg_lcd_ble_elem_display_set(void *elem_value) { /*假如该图标在SEG1段的最高位,则有如下*/ (*(unsigned char *)elem_value)?(LCD_DRAM_BUFF[1]|=(1<<7)):(LCD_DRAM_BUFF[1]&=~(1<<7)); }
-
3.集合显示事件,并在需要的地方调用它,
void seg_lcd_display_event_change_send(event_em event_type,void *elem_value)
- 实现如下
enum { ELEM_BLE_SYMB, ELEM_BUZ_SYMB, }event_em;/*独立的显示内容元素*/ void seg_lcd_display_event_change_send(event_em event_type,void *elem_value) { switch(event_type) { case ELEM_BLE_SYMB: seg_lcd_ble_elem_display_set(elem_value); break; case ELEM_BUZ_SYMB: seg_lcd_buz_elem_display_set(elem_value); break; case ...: break; default : break; } }
- 事件调用案例如:
void ble_thread_entry(void *parameter) { unsigned char ble_connect_state=0; seg_lcd_display_event_change_send(ELEM_BLE_SYMB,&ble_connect_state); }
-
4.设置全局显示回调函数指针,
void (*lcd_display_func_cb)(void)
-
5.设置全局显示回调函数回,
void seg_lcd_display_cb_set(void (*display_func_cb)(void))
,
主要用于显示页面控制,不同的显示内容实现一个页面显示函数,然后在不同的场景中设置。- 实现如下
void seg_lcd_display_cb_set(void (*display_func_cb)(void)) { lcd_display_func_cb = display_func_cb; }
- 调用案例,假如屏幕上有电压,电流,重量的分界面功能,在不同的条件下进入所需界面,可如是下设置:
/*电压显示函数*/ void volt_display_func(void) { unsigned char volt_unit=0;//缺省电流单位:mA const unsigned int volt_value = dev_volt_get(); seg_lcd_vlot_elem_display_set(VOLT_VAL_ELEM,&volt_value); if(1000<volt_value) { volt_unit=0x01;//显示电流单位:A(安培) } seg_lcd_vlot_elem_display_set(VOLT_UNIT_ELEM,&volt_unit); \\... } /*电流显示函数*/ void amp_display_func(void) { \\... } /*重量显示函数*/ void weight_display_func(void) { \\... } /*按键进行功能调用*/ void key_press_event(unsigned char key_id) { switch(key_id) { case KEY_VLOT: seg_lcd_display_cb_set(volt_display_func); break; case KEY_AMP: seg_lcd_display_cb_set(amp_display_func); break; case KEY_WEIGHT: seg_lcd_display_cb_set(weight_display_func); break; default: break; } }
-
6.断码显示驱动
void seg_lcd_display(void)
{
lcd_display_func_cb();
}