📄 lcd.c
字号:
/*************************************************************************************
文件类型:
文件作用:
修改权限:
文件相关:
创 建 人: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 + -