Example #1
0
/********************************************************************************
PUCK:
函数功能:获取屏幕显示信息,并显示
入口:
     type-----模式参数;curs-----光标位置
返回:
********************************************************************************/
void screen (u8 type, curs_t curs) 
{
   const scrn_t* p;
  //在此前,vlist的信息已经更新-----PUCK

    static scrn_t scrn={0xff,0xff,"",{0}};   //不为0,保证第一次就能更新,因为0x000000有可能第一次就是0---PUCK
    if(scrn.code != vlist.code)              //按照全显代码检索:编码已经更新,需要根据vlist的编码获取新的显示元素-----------PUCK
    {
        for (p=&table[0];p!=&table[MAXCOUNT];++p) 
        {
            if ( p->code==vlist.code)  //按照显示代码检索
            {
                scrn = *p;
                break;
            }                
        }
    }
    if(p==&table[MAXCOUNT]) //找不到显示的代码,只显示代码,事件,其他不显示-------PUCK
    {
      lcd_code     (vlist.user, curs, vlist.dlen);
      lcd_events();
      lcd_update();  
      return ;
    }
    
    curs %= vlist.dlen;
    lcd_data     (scrn.item, scrn.frmt,scrn.elem.signpos);   //18ms
    lcd_code     (vlist.user, curs, vlist.dlen);       //26ms
    lcd_mode     (type);                ///A/B/C 3种模式
    lcd_total    (scrn.elem.total    ); ///< "总",
    lcd_phase    (scrn.elem.phase    ); ///< "A/B/C相",
    lcd_voltage  (scrn.elem.voltage  ); ///< "电压",
    lcd_current  (scrn.elem.current  ); ///< "电流",
    lcd_positive (scrn.elem.positive ); ///< mode4.bit4 ? "输入" : "正向";
    lcd_negative (scrn.elem.negative ); ///< mode4.bit4 ? "输出" : "反向";
    lcd_reactive (scrn.elem.reactive ); ///< "无功",
    lcd_active   (scrn.elem.active   ); ///< "有功",
    lcd_power    (scrn.elem.power    ); ///< "功率",
    lcd_factor   (scrn.elem.factor   ); ///< "因数",
    lcd_angle    (scrn.elem.angle    ); ///< "相角",
    lcd_energy   (scrn.elem.energy   ); ///< "电量",
    lcd_demand   (scrn.elem.demand   ); ///< "需量",
    lcd_time     (scrn.elem.time     ); ///< "时间",
    lcd_charge   (scrn.elem.charge   ); ///< "电费",
    lcd_lostvolt (scrn.elem.lostvolt ); ///< "失压",
    lcd_lostcurt (scrn.elem.lostcurt ); ///< "失流",
    lcd_periods  (scrn.elem.periods  ); ///< "时段",
    lcd_feerate  (scrn.elem.feerate  ); ///< "费率",    
    lcd_thismonth(scrn.elem.thismonth); ///< "本月",
    lcd_lastmonth(scrn.elem.lastmonth); ///< mode4.bit5 ? "上月", "上上月" : "上1月", "上2月";
    lcd_assemble (scrn.elem.assemble ); ///< "无功组合方式1 or 2", mode4.bit7 ? "逆时针" : "顺时针";
    lcd_quadrant (scrn.elem.quadrant ); ///< "XX象限",
    lcd_tariff   (scrn.elem.tariff   ); ///< 显示"费率Tx",
    lcd_times    (scrn.elem.times    ); ///< 显示"上XX次",
    lcd_events   ();    //8ms
    lcd_update   ();
}
Example #2
0
void lcd_clr_pic(void)
{
    /*
            液晶清屏

    参数: 空
    返回: 空
    调用: lcd_write_cmd()

    说明:
            写指令0x01
*/
    unsigned char x=0,y=0;
    for (y=0; y<4; y++)
    	for (x=0; x<8; x++)
    		lcd_negative(0,x,y);

}