欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

lcd.c

FE42X单相防窃电电表DEMO(编译器 AQ430 AQ430 V2.0.6.5)
C
第 1 页 / 共 2 页
字号:
/********************************************************************************
*					           杭州利尔达                                       *
*                 MSP430FE42X单相防窃电多功能电表平台                           *
*                          -----  ESP SD16实现                                  *
*                                                                               *
*                                                                               *
* 说明:本软件为杭州利尔达单相防窃电多功能电表DEMO软件                          *
*                                                                               *
*********************************************************************************/

#include "msp430xe42x.h"
#include "globe.h"
#include "lcd.h"
#include "emeter_cfg.h"
#include "extern_function.h"



const uint8 lcd_digit_table[] =
{
	CHAR_0,
	CHAR_1,
	CHAR_2,
	CHAR_3,
	CHAR_4,
	CHAR_5,
	CHAR_6,
	CHAR_7,
	CHAR_8,
	CHAR_9,
	CHAR_A,
	CHAR_B,
	CHAR_C,
	CHAR_D,
	CHAR_E,
	CHAR_F
};


/******************************************************************
*                             清LCD显存                           *
*******************************************************************/
void clr_lcd_display(void)
{
	uint8 i;
	for (i=0; i<12; i++)
  	{
    	LCDMEM[i] = 0;
  	} 
}

/******************************************************************* 
*                           显示16位无符号整数                     *
********************************************************************/
void display (uint16 value)
{
uint8 i;
int8 *LCD = LCDMEM;

  for (i=0; i<5; i++)
    {
    LCD[7-i] = lcd_digit_table[value%10]; // remainder = character in table to display
    value = value/10;           // shifts right so next character can be displayed
    }
} 

/* 存放无符号数转换为BCD码的值 */
uint8 bcd[5];

/*******************************************************************
*                         指定位置显示一个字符                     *
*                                                                  *
* 说明:ch为显示码值,pos为显示位置指示                            *
********************************************************************/
void LCDchar(uint8 ch, int16 pos)
{
	LCDMEM[pos] = ch;
}

/*******************************************************************
*                        显示标志为                                *
*                                                                  *
* 说明:ch为标志对应的值,pos为标志位所在的位置,on指示亮或灭      *
********************************************************************/
void LCDmodify_char(uint8 ch, int16 pos, int16 on)
{
	if (on)
		LCDMEM[pos] |= ch;
	else
		LCDMEM[pos] &= ~ch;
}

/*******************************************************************
*                       处理显示小数点                             *
*                                                                  *
* 说明:id指示小数点位置,on指示亮或灭                             *
********************************************************************/
void LCDicon(int16 id, int16 on)
{
	LCDmodify_char(SEG_h, id, on);
}

/*******************************************************************
*                       显示32位值(包括小数点)                   *
*                                                                  *
* 说明:value为32位,pos为开始位置,显示从pos+2开始                *               *
* digits为显示的位数,after指示小树点的位数                        *
********************************************************************/
void LCDudec32(uint32 value, int16 pos, int16 digits, int16 after)
{
	int16 i;
   	int16 flag;
   	uint16 digit;
   	
      
	flag = 1;
	LCDchar(CHAR_SPACE, pos++);
	
	bin2bcd32(bcd, value);
	after =  digits - after;
   	//for (i = 10 - digits;  i < 10;  i++)
   	for (i=0; i<digits; i++)
   	{
   		digit = bcd[(i >> 1)+2];
   		if ((i & 1) == 0)
   			digit >>= 4;
   		if ((digit & 0x0F)  ||  i >= after - 1)
   		   flag = 0;
	   	LCDchar((flag == 0)  ?  lcd_digit_table[digit & 0x0F]  :  CHAR_SPACE, (pos++ +1));
  	}
	
}  

/*******************************************************************
*                       显示16位值(包括小数点)                   *
*                                                                  *
* 说明:value为16位,pos为开始位置,显示从pos+2开始                *               *
* digits为显示的位数,after指示小树点的位数                        *
********************************************************************/
void LCDudec16(uint16 value, int16 pos, int16 digits, int16 after)
{
	int16 i;
   	int16 flag;
   	uint16 digit;
   	
	flag = 1;             //default print space
	LCDchar(CHAR_SPACE, pos++);

	bin2bcd16(bcd, value);
	after = digits - after;
    while (digits > 6)
    {
	   	LCDchar(CHAR_SPACE, pos++);
        digits--;
    }        
   	//for (i = 6 - digits;  i < 6;  i++)  //start from BCD buffer
   	for (i=0; i<digits ; i++)
   	{
   		digit = bcd[i >> 1];
   		if ((i & 1) == 0)
   			digit >>= 4;
   			                    //fprint space until first non-zero number found
   			                    //or if zero number is after decimal point
   		if ((digit & 0x0F)  ||  i >= after -1)
   		   flag = 0;
	   	LCDchar((flag == 0)  ?  lcd_digit_table[digit & 0x0F]  :  CHAR_SPACE, (pos++ +1));
  	}
}

/******************************************************************
*                       更新时钟显示                              *
*******************************************************************/
void update_rtc_display(void)
{
  	LCDchar(lcd_digit_table[(rtc.hour/10) & 0x0F], 2);
  	LCDchar(lcd_digit_table[(rtc.hour%10) & 0x0F], 3);
  	LCDchar(lcd_digit_table[(rtc.minute/10) & 0x0F], 4);
  	LCDchar(lcd_digit_table[(rtc.minute%10) & 0x0F], 5);
  	LCDchar(lcd_digit_table[(rtc.second/10) & 0x0F], 6);
  	LCDchar(lcd_digit_table[(rtc.second%10) & 0x0F], 7);
  	LCDMEM[2] |= BIT7;
  	LCDMEM[4] |= BIT7;
  	LCDMEM[9] = BIT5;
}

/******************************************************************
*                       更新日期显示                              *
*******************************************************************/
void update_date_display(void)
{
	LCDchar(lcd_digit_table[(rtc.year/10) & 0x0F], 2);
  	LCDchar(lcd_digit_table[(rtc.year%10) & 0x0F], 3);
  	LCDchar(lcd_digit_table[(rtc.month/10) & 0x0F], 4);
  	LCDchar(lcd_digit_table[(rtc.month%10) & 0x0F], 5);
  	LCDchar(lcd_digit_table[(rtc.day/10) & 0x0F], 6);
  	LCDchar(lcd_digit_table[(rtc.day%10) & 0x0F], 7);
  	LCDMEM[2] |= BIT7;
  	LCDMEM[4] |= BIT7;
  	LCDMEM[9] = BIT4;
}

/******************************************************************
*                       更新显示页面                              *
*******************************************************************/
void update_display(void)
{
	int skip_stage;

	do
	{
		skip_stage = FALSE;
		if(emeter.ucCalibrationMode != 0)
    	{ 
    		switch(emeter.ucCalibrationOption)
    		{
    			case 1:   // GAINCORR1
    				emeter.uc_display_stage = DISPLAY_STAGE_TEST1;
    				break;
    			case 2:   // POWEROFFSET1
    				emeter.uc_display_stage = DISPLAY_STAGE_TEST2;
    				break;
    			case 3:   // PHASEOFFSET1
    				emeter.uc_display_stage = DISPLAY_STAGE_TEST3;
    				break;

⌨️ 快捷键说明

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