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

📄 show_module(eric).c.bak

📁 一个电表的程序
💻 BAK
📖 第 1 页 / 共 2 页
字号:
/*===========================================================================
* 			 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 + -