⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 电能表源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*************************************************************************************

	文件类型:
	文件作用:
	修改权限:
	文件相关:
	
	创 建 人:GeminiKQ
	创建日期:2006.12.20
	当前版本:Ver0.1
	
	版本信息:Ver0.1					GeminiKQ

**************************************************************************************/
#include "Tiger.h"
#include "lcd.h"
#include "typemeter.h"

static char code LCD_NNumber[16] = 
{
	LNumb_a+LNumb_b+LNumb_c+LNumb_d+LNumb_e+LNumb_f,			// 0
	LNumb_b+LNumb_c,											// 1
	LNumb_a+LNumb_b+LNumb_d+LNumb_e+LNumb_g,					// 2
	LNumb_a+LNumb_b+LNumb_c+LNumb_d+LNumb_g,					// 3
	LNumb_b+LNumb_c+LNumb_f+LNumb_g,							// 4
	LNumb_a+LNumb_c+LNumb_d+LNumb_f+LNumb_g,					// 5
	LNumb_a+LNumb_c+LNumb_d+LNumb_e+LNumb_f+LNumb_g,			// 6
	LNumb_a+LNumb_b+LNumb_c,									// 7
	LNumb_a+LNumb_b+LNumb_c+LNumb_d+LNumb_e+LNumb_f+LNumb_g,	// 8
	LNumb_a+LNumb_b+LNumb_c+LNumb_d+LNumb_f+LNumb_g,			// 9
	LNumb_a+LNumb_b+LNumb_c+LNumb_e+LNumb_f+LNumb_g,			// a
	LNumb_c+LNumb_d+LNumb_e+LNumb_f+LNumb_g,					// b
	LNumb_a+LNumb_d+LNumb_e+LNumb_f,							// c
	LNumb_b+LNumb_c+LNumb_d+LNumb_e+LNumb_g,					// d
	LNumb_a+LNumb_d+LNumb_e+LNumb_f+LNumb_g,					// e
	LNumb_a+LNumb_e+LNumb_f+LNumb_g								// f
};

static int code LCD_DISaddr[]=
   {Disnumaddr_1,                                          //第一位数字(右)
    Disnumaddr_2,
	Disnumaddr_3,
	Disnumaddr_4,
	Disnumaddr_5,
	Disnumaddr_6,
	Disnumaddr_7,
	Disnumaddr_8,
	Disnumaddr_9,
	Disnumaddr_10,
	Disnumaddr_11,
	Disnumaddr_12,
   };


struct dis_str
   {   unsigned int    data_ID;                //数据ID号
       unsigned char   offset;                 //偏移
	   unsigned char   datalong;               //显示长度
       unsigned char   discode;                //显示序号
	   unsigned char   dotflag;                //小数点标志位:从低位开始分别代表 Y1,Y2,Y3,Y4,  Y5,Y6,Y7,0;
	   unsigned char   chaflag_1;              //特殊符号显示标志位1,从低到高分别代表:X1,X2,X3,X4,  X5,X6,X7,X8;
	   unsigned char   chaflag_2;              //特殊呼号标志2,从低到高代表:X9,X10,X11,X12,  X13,X14,X15,X16;
	   unsigned char   chaflag_3;              //特殊呼号标志3,从低到高代表:X17,X18,X19,0   ,0,0,0,0;
	   unsigned char   typedisp;               //显示类型:0:不显示、1:秒刷新  2:即时刷新 3:不刷新
   }; 

//======================================================================================
//显示内容列表
//共82项
// ID号,偏移,显示长度,显示序号,小数点标志,特殊标志1,特殊标志2,特殊标志3,显示类型;
//==========================================================================================
struct dis_str code dis_table[55]=
{{ID_COMADDR,2,4,0x01,0x00,0x00,0x00,0x00,0},                       //表号
 {ID_DATAMETER,3,3,0x02,0x36,0x00,0x02,0x00,0},                     //12:秒 分 时
 {ID_DATAMETER,0,3,0x03,0x36,0x00,0x02,0x00,0},                     //13:年 月 日

 {ID_POSENGSUM,0,4,0x04,0x20,0x00,0xC0,0x05,1},                     //01:当前正向有功总电量

 {ID_XULENGPOSSUM,0,3,0x05,0x20,0x00,0xE0,0x01,0},                  //当前正向有功最大需量
 {ID_XULENGPOSSUM,5,3,0x06,0x35,0x00,0x20,0x00,0},                  //当前正向有功最大需量发生时间,日分时
 {ID_XULPOSENGCURT,0,3,0x07,0x20,0x00,0xE0,0x01,0},                 //当前正向有功需量
 
 {ID_LASTONEPOSENGSUM,0,4,0x08,0x40,0x00,0xC0,0x05,0},                //上月正向有功总电量
 {ID_LASTTWOPOSENGSUM,0,4,0x09,0x40,0x00,0xC0,0x05,0},                //上2月正向有功总电量
 {ID_LASTTHRPOSENGSUM,0,4,0x10,0x40,0x00,0xC0,0x05,0},                //上3月正向有功总电量
 {ID_LASTFORPOSENGSUM,0,4,0x11,0x40,0x00,0xC0,0x05,0},                 //上4月正向有功总电量
 {ID_LASTFIVPOSENGSUM,0,4,0x12,0x40,0x00,0xC0,0x05,0},                 //上5月正向有功总电量
 {ID_LASTSIXPOSENGSUM,0,4,0x13,0x40,0x00,0xC0,0x05,0},                 //上6月正向有功总电量
 {ID_LASTSEVPOSENGSUM,0,4,0x14,0x40,0x00,0xC0,0x05,0},                 //上7月正向有功总电量
 {ID_LASTEGTPOSENGSUM,0,4,0x15,0x40,0x00,0xC0,0x05,0},                 //上8月正向有功总电量
 {ID_LASTNINPOSENGSUM,0,4,0x16,0x40,0x00,0xC0,0x05,0},                 //上9月正向有功总电量
 {ID_LASTTENPOSENGSUM,0,4,0x17,0x40,0x00,0xC0,0x05,0},                 //上10月正向有功总电量
 {ID_LASTELVPOSENGSUM,0,4,0x18,0x40,0x00,0xC0,0x05,0},                 //上11月正向有功总电量

 {ID_LSATONEXULENGPOSSUM,0,3,0x19,0x12,0x00,0x00,0x00,0},                  //上月正向有功最大需量
 {ID_LSATONEXULENGPOSSUM,5,3,0x20,0x14,0x82,0x00,0x00,0},                  //上月正向有功最大需量发生时间,日分时
 {ID_LSATTWOXULENGPOSSUM,0,3,0x21,0x12,0x00,0x00,0x00,0},                  //上2月正向有功最大需量
 {ID_LSATTHRXULENGPOSSUM,0,3,0x22,0x12,0x00,0x00,0x00,0},                  //上3月正向有功最大需量
 {ID_LSATFORXULENGPOSSUM,0,3,0x23,0x12,0x00,0x00,0x00,0},                  //上4月正向有功最大需量
 {ID_LSATFIVXULENGPOSSUM,0,3,0x24,0x12,0x00,0x00,0x00,0},                  //上5月正向有功最大需量
 {ID_LSATSIXXULENGPOSSUM,0,3,0x25,0x12,0x00,0x00,0x00,0},                  //上6月正向有功最大需量
 {ID_LSATSEVXULENGPOSSUM,0,3,0x26,0x12,0x00,0x00,0x00,0},                  //上7月正向有功最大需量
 {ID_LSATEGTXULENGPOSSUM,0,3,0x27,0x12,0x00,0x00,0x00,0},                  //上8月正向有功最大需量
 {ID_LSATNINXULENGPOSSUM,0,3,0x28,0x12,0x00,0x00,0x00,0},                  //上9月正向有功最大需量
 {ID_LSATTENXULENGPOSSUM,0,3,0x29,0x12,0x00,0x00,0x00,0},                  //上10月正向有功最大需量
 {ID_LSATELVXULENGPOSSUM,0,3,0x30,0x12,0x00,0x00,0x00,0},                  //上11月正向有功最大需量

 {ID_RMSCURNTA,0,3,0x31,0x20,0x10,0x00,0x02,1},                          //07:A通道电流有效值
 {ID_RMSCURNTB,0,3,0x32,0x20,0x10,0x00,0x02,0},                          //08:B通道电流有效值
 {ID_RMSVOLT,  0,3,0x33,0x20,0x08,0x00,0x01,1},                          //09:电压有效值
 {ID_POWER,    1,2,0x34,0x20,0x00,0xc0,0x01,1},                          //10:有功功率
 {ID_FRQ,      0,2,0x35,0x00,0x00,0x00,0x00,0},                          //11:频率
 {ID_COSENG,   0,3,0x36,0x00,0x00,0x00,0x00,0},                          //当前月平均功率因数 
 
 //==========================================================================自动轮显项结束

 {ID_LASTONECOSENG,0,3,0x37,0x10,0,0,0},                          //上月平均功率因数
 {ID_LASTTWOCOSENG,0,3,0x38,0x10,0,0,0},                          //上2月平均功率因数
 {ID_LASTTHRCOSENG,0,3,0x39,0x10,0,0,0},                          //上3月平均功率因数
 {ID_LASTFORCOSENG,0,3,0x40,0x10,0,0,0},                          //上4月平均功率因数
 {ID_LASTFIVCOSENG,0,3,0x41,0x10,0,0,0},                          //上5月平均功率因数
 {ID_LASTSIXCOSENG,0,3,0x42,0x10,0,0,0},                          //上6月平均功率因数
 {ID_LASTSEVCOSENG,0,3,0x43,0x10,0,0,0},                          //上7月平均功率因数
 {ID_LASTEGTCOSENG,0,3,0x44,0x10,0,0,0},                          //上8月平均功率因数
 {ID_LASTNINCOSENG,0,3,0x45,0x10,0,0,0},                          //上9月平均功率因数
 {ID_LASTTENCOSENG,0,3,0x46,0x10,0,0,0},                          //上10月平均功率因数
 {ID_LASTELVCOSENG,0,3,0x47,0x10,0,0,0},                          //上11月平均功率因数

 {ID_STEALTIMES,0,2,0x48,0x00,0,0,0},                          //窃电总次数
 {ID_STEALENGID,0,3,0x49,0,0,0,0},                             //最近一次窃电事件代码

//=====参数区,编号从80开始=========================================================

 {ID_CHANGSHU,0,3,0x60,0,0,0,0},                               //电表常数                                 
 {ID_DATAREADMETER,0,1,0x61,0,0,0,0},                          //抄表日
 {ID_PRIOXUL,0,2,0x62,0,0,0,0},                                //需量计算周期
 {ID_PRIOCOSENG,0,1,0x63,0,0,0,0},                             //平均功率因数计算周期
 {ID_BANTRATA,0,1,0x64,0,0,0,0},                               //通讯波特率
 {ID_TIMERETUN,0,1,0x65,0,0,0,0}                               //轮显时间
};

//========================================================
//函数功能:指向显示第一项
//
//========================================================
void point_begindisp(void)
{uint8 i;
 if(station_disp==auto_disp)                                   //如果是自动轮显状态
    for(i=0;i<55;i++)
        { if(dis_table[i].typedisp!=0)
	        { curent_dispoint=i;
		      break;
		    }
  	    }
}

//====================================================================
//函数功能:初始化lcd显示模块
//
//====================================================================
void Init_disp(void)
{  unsigned char i;
   for(i=0;i<5;i++)
      wr_buff[i]=0xff;                            //             开/关   扫描频率   空     分压电阻  空  空
   CfgLCD(0x84);                                  //开lcd显示。(on/off  DRV1  DRV0  --   FRQ1  FRQ0  --  --)
   flag_startlcddisp=0;                           //初始秒刷新
   time_dispdelay=0;                              //显示延时清零
   time_turn=0;                                   //自动轮显延时时间
   type_dispevent=idle_envent;                    //无事件发生
   station_disp=auto_disp;                        //默认为自动轮显
   point_begindisp();                             //指向显示首项
    
//   F_commudiv=0;                                  //通讯符号不显示
}

/*
void Disp_Clear(void)
{   
	unsigned char i;
	unsigned char xdata *point;
	point = 0x2800;
	for(i=0;i<20;i++)
	{
		*(point++) = 0x00;
	}
}   
    
void Disp_Full(void)
{   
	unsigned char i;
	unsigned char xdata *point;

	for(i=0;i<7;i++)
	  { point=LCD_DISaddr[i];
	    *(point) = 0xff;
	  }
}
*/
//================================================
///函数功能:指向下一个显示项
//
//================================================
void dispoint_next(void)
{ uint8 i,num;
  num=55;
//  if(station_disp==auto_disp)          //如果是自动轮显状态
//      num=55;
  if(num>0)
     { for(i=0;i<num;i++)
         { if(curent_dispoint<num-1)
             curent_dispoint++;
           else
              curent_dispoint=0;
           if(dis_table[curent_dispoint].typedisp!=0)
              break;
         }
     }
}

/*
//================================================
///函数功能:指向上一个显示项

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -