LCD断码屏显示应用框架

  • 简介
    最近项目中使用的一个LCD断码屏显示驱动框架。

  • 调用流程图
匹配对象:ELEM_A
匹配对象元素:ELEM_C
匹配对象元素
匹配对象元素:ELEM_N
调用seg_lcd_display_event_change_send目标显示对象修改API
调用该对象seg_lcd_A_elem_display_set处理函数,修改对象A相关显示元素值
显示缓存值LCD_DRAM_BUFF
调用显示驱动函数lcd_display_func_cb
调用该对象seg_lcd_B_elem_display_set处理函数,修改对象B相关显示元素值
调用该对象seg_lcd_..._elem_display_set处理函数,修改对象...相关显示元素值
调用该对象seg_lcd_N_elem_display_set处理函数,修改对象N相关显示元素值
  • 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();
  }

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值