📄 show_module(eric).c.bak
字号:
/*===========================================================================
* 2006年。三星仪表SOC芯片开发项目
*
*
* 文件名称:Show_Module.c
* 文件标识:
* 摘 要:
*
*
* 当前版本:Ver 1.0
* 作 者:罗冬生 modified by Eric 2007.1.30
* 修改内容:
* 修改日期:
* 完成日期:
===============================================================================================*/
#ifndef _Show_Module_
#define _Show_Module_
//===============================================================================================
#include "includes.h"
//===============================================================================================
// ************* Definition of LCD MACROS ************
//===============================================================================================
// LCD 配置
#define LCD_COM 4 // 4个COM 输出模式
// #define LCD_SEG 23 // 23个液晶屏显示段SEG
#define LCD_SEG 22 // 22个液晶屏显示段SEG modified by Eric
#define LCD_BLVL 3 // 液晶显示电压3V
#define LCD_CLK 2048 // 2048Hz LCD操作频率
#define LCD_BIAS 1 // LCD_BIAS=1为1/3Bias模式 ,LCD_BIAS=0为1/2Bias模式
//---------------------------------------------------------------------------------------------------
#define LcdWrData(addr,value) {LCDDAT = (value); LCDPTR = ((addr)|0x80);} // 写显示缓冲区
#define LcdRdData(addr,value) {LCDPTR = (addr); value = LCDDAT;} // 读显示缓冲区
#define LcdBlinkEnable() LCDCON |= LCDBLINKEN_cfg
#define LcdBlinkDisable() LCDCON &= ~LCDBLINKEN_cfg
// #define LcdBlinkRate(c) LCDCLK = (LCDCLK & 0x0f)|(c)
#define LcdLock() LCDCONY |= 0x01 //修改显示内容开锁
#define LcdRefresh() LCDCONY &= 0xfe //刷新显示内容
// LCD段配置
#define SEG19EN_cfg 0x08 //D3~D0 LCDSEGE2 存储器
#define SEG18EN_cfg 0x04
#define SEG17EN_cfg 0x02
#define SEG16EN_cfg 0x01
#define SEG25EN_cfg 0x80 //D7~D2 LCDSEGE 存储器
#define SEG24EN_cfg 0x40
#define SEG23EN_cfg 0x20
#define SEG22EN_cfg 0x10
#define SEG21EN_cfg 0x08
#define SEG20EN_cfg 0x04
#define FDELAY_cfg 0x03 //D1~D0 配置掉电延时几个"cycles" 8、4、2、0 ,在 LCDSEGE 存储器中
// LCD Config set ;LCDCON寄存器
#define LCDEN_cfg 0x80 //D7 LCD模块功能使能配置
#define LCDRST_cfg 0x40 //D6 The LCD data registers will reset to zero.blink
#define LCDBLINKEN_cfg 0x20 //D5 闪烁使能,设置由LCDCLK存储器的BLKMOD和BLKFREQ位确定
#define LCDPSM2_cfg 0x00 //D4 在PSM2工作模式时,由LCDEN位控制LCD显示或关闭
#define CLKSEL_cfg 0x00 //D3 LCD 时钟选择2048Hz
#define BIAS_cfg 0x04 //D2 1/3Bias模式
#define LMUX_cfg 0x03 //D1~D0 4COM 输出模式
// 外部或内部电阻分压网络配置:LCDCONX寄存器
#define EXTRES_cfg 0x00 //D6 不使用外部分压电阻网络
#define BLVL_cfg 0x1F //D5~D0 内部电阻网络配置:1/3Bias模式,3V液晶 ,Va=Vref=1V
// LCD新数据配置和数据刷新及反置模式:LCDCONY寄存器
#define INV_LVL_cfg 0x00 //D6 不使用反置模式
#define UPData_cfg 0X00 //D1 不上传数据 ,在正常使用时对其进行操作
#define REFRESH_cfg 0x00 //D0 不刷新数据 ,在正常使用时对LCD显示屏进行数据刷新
// LCD系统时钟配置:LCDCLK寄存器
#define BLKMOD_cfg 0xC0 //D7~D6 闪烁时钟周期模式配置:由 BLKFREQ的配置确定闪烁频率
#define BLKFREQ_cfg 0x10 //D5~D4 Blink Rate 1/2Hz, 闪烁时钟周期0.5S
#define FD_cfg 0x01 //D3~D0 选择2048Hz
#define LCD_Vref PERIPH_bit.REF_BATT_EN // 在PSM2模式时,LCD 参考电压选择(内部或外部提供)
//==============================================================================================
// ************* Definition of LCD RAM ************
//==============================================================================================
unsigned int Disp_XH_Buffer[Disp_idLen]; //显示序号区 #define Disp_idLen 16 //存放显示ID空间长度
__idata unsigned char LcdBuffer[LCD_DispLen]; //显示缓冲区-内部SRAM #define LCD_DispLen 11 //LCD显示数据区长度
__idata unsigned char Disp_Count; //显示序号计数器
//-----------------------------------------------------------------------------------------------
// 公共数据运算区8字节
__idata union //公共数据运算区8字节
{
unsigned char TempChar[8];
unsigned long Temp32;
unsigned int Temp16;
unsigned char Temp8;
struct
{
unsigned long Temp32A;
unsigned long Temp32B;
};
struct
{
unsigned char Temp8L;
unsigned char Temp8M;
unsigned char Temp8H;
};
};
//==============================================================================================
// ************* LCD SHOW CODE ************
//==============================================================================================
// ****************** LCD 初始化 ************************
void LcdInit(void)
{
LCD_Vref=1; //选择LCD参考电压:由内部提供; //This bit should be set if LCD On in PSM2 mode.
LCDCON = LCDPSM2_cfg + CLKSEL_cfg + BIAS_cfg + LMUX_cfg ;
LCDCONX = EXTRES_cfg + BLVL_cfg ;
LCDCONY = INV_LVL_cfg + UPData_cfg + REFRESH_cfg;
LCDCLK = BLKMOD_cfg + BLKFREQ_cfg + FD_cfg ;
LCDSEGE2= SEG16EN_cfg + SEG17EN_cfg + SEG18EN_cfg + SEG19EN_cfg ;
// LCDSEGE = SEG20EN_cfg + SEG21EN_cfg + SEG22EN_cfg + FDELAY_cfg ;
LCDSEGE = SEG20EN_cfg + SEG21EN_cfg + FDELAY_cfg ; // modified by Eric
LCDCON |= LCDEN_cfg ; //使能LCD模块
}
// ************* LCD 上传一屏数据 ***************************************************
void LcdUpData(void)
{ unsigned char i;
LcdLock(); //开锁
for (i=0;i<LCD_DispLen;i++)
LcdWrData(i,LcdBuffer[i]); //上传数据
LcdRefresh(); //刷新显示内容
}
// ************* LCD 显示屏--设置数据 data ****************************************
void LcdSetDisplay(unsigned char data)
{
unsigned char i;
for (i=0;i <LCD_DispLen;i++)
LcdBuffer[i] = data;
LcdUpData();
}
//==================================================================================================
// LCD 显示模块 modified by Eric
//==================================================================================================
#define K_seg 0x01 /* K buffer[10] */
#define V_seg 0x02 /* V buffer[10] */
#define A_seg 0x04 /* A buffer[10] */
#define R_seg 0x08 /* R buffer[10] */
#define H_seg 0x10 /* H buffer[10] */
#define kW_seg 0x20 /* kW buffer[10] */
#define h_seg 0x40 /* h buffer[10] */
#define PF_seg 0x80 /* PF buffer[10] */
#define T_seg 0x80 /* T buffer[0] */
//==================================================================================================
#define S1_seg 0x11 //
#define S2_seg 0x12 //
#define S3_seg 0x13 //
#define S4_seg 0x14 //
//---------------------------------------------------------------------------------
//
// 显示数据库结构图 // modified by Eric
typedef struct
{
unsigned int ID; //数据标识
unsigned char __idata *Adr; //显示数据指针,pValue;
unsigned char Len; //数据长度
union
{
unsigned char Icons1; //显示英文提示标识(8个通用英文字母)
struct
{
unsigned char Lcd_K_seg:1; //*K buffer[10]*/
unsigned char Lcd_V_seg:1; //*V buffer[10]*/
unsigned char Lcd_A_seg:1; //*A buffer[10]*/
unsigned char Lcd_R_seg:1; //*R buffer[10]*/
unsigned char Lcd_H_seg:1; //*H buffer[10]*/
unsigned char Lcd_kW_seg:1; //*kW buffer[10]*/
unsigned char Lcd_h_seg:1; //*h buffer[10]*/
unsigned char Lcd_PF_seg:1; //*PF buffer[10]*/
};
};
union
{
unsigned char Icons2; //显示英文提示标识(8个通用英文字母)
struct
{
unsigned char :7;
unsigned char Lcd_T_seg:1; //*T buffer[0]*/
};
};
}DispDataStruct; // 显示数据库结构图
//------------------------------------------------------------------------------------------------
// 显示数据项列表:所有要显示的内容在此表中列出 need modify
__code const DispDataStruct Disp_Table[]=
{
{0x9010, KWhPwrT, 4, (Zong_seg + DianLiang_seg + KWH_seg), DangQian_seg },
{0x9011, KWhPwrF1,4, (Jian_seg + DianLiang_seg + KWH_seg), DangQian_seg },
{0x9012, KWhPwrF2,4, (Feng_seg + DianLiang_seg + KWH_seg), DangQian_seg },
{0x9013, KWhPwrF3,4, (Ping_seg + DianLiang_seg + KWH_seg), DangQian_seg },
{0x9014, KWhPwrF4,4, (Gu_seg + DianLiang_seg + KWH_seg), DangQian_seg },
{0xC010, (unsigned char __idata *)&TimeBuffer[3], 3, 0, (DangQian_seg + RiQi_seg) },
{0xC011, TimeBuffer, 3, 0, (DangQian_seg + Shi_Time + Jian_Time) },
{0xC032, KWhPwrT, 4, 0, BiaoHao_seg },
{0xE010, (unsigned char __idata *)&VSW , 2, (Point_3| U_FH), 0},
{0xE011, (unsigned char __idata *)&VBAT , 2, (Point_3| U_FH), 0},
{0xE012, (unsigned char __idata *)&TEMP , 1, ( TEMP_FH), 0},
{0xE013, (unsigned char __idata *)&Irms , 2, 0,0},
{0xE014, (unsigned char __idata *)&Vrms , 2, 0,0},
} ;
//-------------------------------------------------------------------------------------------------
//
// 液晶显示段码结构关系图
typedef volatile struct
{
union
{
unsigned char LcdDataBuff0;
struct
{
unsigned char :7;
unsigned char Lcd_T_seg:1; //*T buffer[0]*/
};
};
unsigned char LcdDataBuff1[9] ; // 数码显示区
union
{
unsigned char LcdDataBuff10;
struct
{
unsigned char Lcd_K_seg:1; //*K buffer[10]*/
unsigned char Lcd_V_seg:1; //*V buffer[10]*/
unsigned char Lcd_A_seg:1; //*A buffer[10]*/
unsigned char Lcd_R_seg:1; //*R buffer[10]*/
unsigned char Lcd_H_seg:1; //*H buffer[10]*/
unsigned char Lcd_kW_seg:1; //*kW buffer[10]*/
unsigned char Lcd_h_seg:1; //*h buffer[10]*/
unsigned char Lcd_PF_seg:1; //*PF buffer[10]*/
};
};
} LcdDataStruct; //LCD液晶屏显示段码结构
//---------------------------------------------------------------------------------
// 1、显示序号
// 2、显示数据指针
// 3、数据长度
// 4、显示汉字提示符
// 5、S-状态标志符号
// 6、P-数字点符号
/*
__idata volatile struct
{
DispDataStruct DispData; //显示序号、显示数据指针、数据长度、显示汉字(16BIT)
unsigned char Lcd_P; //小数点、时分秒的点,年月日的点
unsigned char Lcd_S; //信号提示状态(电池电压、通信、按键、密码开锁、方向、冬)
}DispDataBuff;
*/
//--------------------------------------------------------------------------------------------------------------------
/*
A,B,C,D,E,F,G,P--->D0,D1,D2,D3,D4,D5,D6,D7
// Modified by Eric 2007.1.24
*/
// Lcd 显示字符表
__code const unsigned char Lcd_Zifu_Tab[]=
// 10 11 12 13 14 15 16 17
//0 1 2 3 4 5 6 7 8 9 A B C D E F null H L R O N n -
{0x3F,0x06,0x5B,0x4F,0x66,0x3D,0x6D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00, 0x76,0x38,0x50,0x5C,0x37,0x54,0x40};
#define H_Code 0x76
#define E_Code 0x79
#define L_Code 0x38
#define R_Code 0x50
#define O_Code 0x5C
#define N_Code 0x37
#define D_Code 0x9e
#define F_Code 0x31
#define n_Code 0x54
#define _Code 0x40
#define u_Code 0x1C
#define C_Code 0x39
enum {Source_Code,Hex_Code,BCD_Code}; //数据属性定义(显示原段码、十六进制码、BCD码)
#define S1_Code 0x01 //显示小数点的代码
#define S2_Code 0x02
#define S3_Code 0x04
#define S4_Code 0x08
#define Set_Lcd_S1() (LcdBuffer[5] |= 0x80) //置显示状态点的代码宏定义
#define Set_Lcd_S2() (LcdBuffer[7] |= 0x80)
#define Set_Lcd_S3() (LcdBuffer[8] |= 0x80)
#define Set_Lcd_S4() (LcdBuffer[9] |= 0x80)
#define Close_Lcd_S1() (LcdBuffer[5] &= 0x00) //清显示状态点的代码宏定义
#define Close_Lcd_S2() (LcdBuffer[7] &= 0x00)
#define Close_Lcd_S3() (LcdBuffer[8] &= 0x00)
#define Close_Lcd_S4() (LcdBuffer[9] &= 0x00)
//********************************************************************************
// 取显示字符函数
unsigned char GetDispCode(unsigned char Da)
{
if (Da >= (sizeof Lcd_Zifu_Tab))
return 0;
return (Lcd_Zifu_Tab[Da]);
}
//********************************************************************************
//函数名称: LcdDispApi
//函数描述: 将显示缓冲区"DispDataBuff"(显示数据结构体)的数据送液晶屏显示
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -