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

📄 display.c

📁 这个代脉是用430F427的液晶显示程序,简单实用.
💻 C
字号:
#include <string.h>
#include <stdlib.h>
#include <msp430xe42x.h>
#include "inc\Port.h"
#include "inc\Common.h"
#include "inc\Type.h"
#include "inc\General.h"
#include "inc\Mem.h"
#include "inc\Data.h"
#define dispnum	 6
#define	dispnum2 21

const char NumSeg[16] = 
{
	DS_Chr_0, DS_Chr_1, DS_Chr_2, DS_Chr_3,
	DS_Chr_4, DS_Chr_5, DS_Chr_6, DS_Chr_7,
	DS_Chr_8, DS_Chr_9, DS_Chr_A, DS_Chr_b, 
	DS_Chr_C, DS_Chr_d, DS_Chr_E, DS_Chr_F
};

void DspNum( char *Addr, int Lenth, char *SegPtr )     //将数值转换成LCD显示的格式
{
	if( Lenth > 4) return;
	while( Lenth>0 )
        {
	        if(Lenth == 1) SegPtr-- ;
		*SegPtr-- |= NumSeg[*Addr & 0x0F];
		*SegPtr-- |= NumSeg[((*Addr)>>4) & 0x0F];
		Addr++;
		Lenth--;
        }
}

void DspNum1( char *Addr, int Lenth, char *SegPtr )         
{
	if( Lenth > 4) return;
	while( Lenth>0 )
        {
		*SegPtr-- |= NumSeg[*Addr & 0x0F];
		*SegPtr-- |= NumSeg[((*Addr)>>4) & 0x0F];
		Addr++;
		Lenth--; 
        }
}

void	ZeroDark( char *LCDSeg )
{
	char	i;
	for( i=0; i<7; i++ )
        {
	   if(i == 2) i++;
	   if( LCDSeg[i] == NumSeg[0] ) LCDSeg[i] = 0;
	   else break;
	}
}

void Display(void)
{
	char  i;
	if( DisK.DisInv!=0) return;     //轮询时间 3s
	for( i=0; i<12; i++ ) Buffer[i] = 0;
	if( DisK.DisInv == 0 ) 
	{
            DisK.DisInv=3;
            DisK.DisPtr++;          //轮显表指针
            if( DisK.DisPtr >= 10 ) DisK.DisPtr = 1;
	}
	switch (DisK.DisPtr)
	{
		case 1:           // 电量
		        FRAM_Read( (char*)&Buffer[20], EC_Pp0, 4 );
		        DspNum( (char*)&Buffer[20], 4, &Buffer[DS_BDig] );
			Buffer[8] |= DS_Chr_Dot;
			ZeroDark( (char*)&Buffer[0] );
                        Buffer[9] |= DS_T1+DS_T2+DS_T3;
			Buffer[10] |= DS_Kw+DS_T4;
			Buffer[11] |= DS_h;
			break;
		case 2:            // FEE1电量
		        FRAM_Read( (char*)&Buffer[20], EC_Pp1, 4 );
		        DspNum( (char*)&Buffer[20], 4, &Buffer[DS_BDig] );
			Buffer[8] |= DS_Chr_Dot;
			ZeroDark( (char*)&Buffer[0] );
			Buffer[10] |= DS_Kw;
			Buffer[11] |= DS_h;
			Buffer[9] |= DS_T1;
			break;
		case 3:           // FEE2电量
		        FRAM_Read( (char*)&Buffer[20], EC_Pp2, 4 );
		        DspNum( (char*)&Buffer[20], 4, &Buffer[DS_BDig] );
			Buffer[8] |= DS_Chr_Dot;
			ZeroDark( (char*)&Buffer[0] );
			Buffer[10] |= DS_Kw;
			Buffer[11] |= DS_h;
			Buffer[9] |= DS_T2;
			break;
		case 4:           // FEE3电量
		        FRAM_Read( (char*)&Buffer[20], EC_Pp3, 4 );
		        DspNum( (char*)&Buffer[20], 4, &Buffer[DS_BDig] );
			Buffer[8] |= DS_Chr_Dot;
			ZeroDark( (char*)&Buffer[0] );
			Buffer[10] |= DS_Kw;
			Buffer[11] |= DS_h;
			Buffer[9] |= DS_T3;
			break;
                case 5:           // FEE4电量
		        FRAM_Read( (char*)&Buffer[20], EC_Pp4, 4 );
		        DspNum( (char*)&Buffer[20], 4, &Buffer[DS_BDig] );
			Buffer[8] |= DS_Chr_Dot;
			ZeroDark( (char*)&Buffer[0] );
			Buffer[10] |= DS_Kw+DS_T4;
			Buffer[11] |= DS_h;
			break;
		case 6:           // 电压
		        DspNum( (char*)&Energy.Real_VRMS[0], 4, &Buffer[DS_BDig] );
			Buffer[8] |= DS_Chr_Dot;   
			ZeroDark( (char*)&Buffer[0] );
			Buffer[10]|=0x20;  //'V'
			break;
		case 7:           // 电流
		        DspNum( (char*)&Energy.Real_I1RMS[0], 4, &Buffer[DS_BDig] );
			Buffer[8] |= DS_Chr_Dot;
			ZeroDark( (char*)&Buffer[0] );
			Buffer[10]|=0x80;  //'A'
                        Buffer[11]|=0x08;
                        break;
                case 8:           // 日期
                        DspNum1( (char*)&Clk.Day[0],3,&Buffer[DS_BDig]);
			Buffer[2]|=0x01;	
			break;
                case 9:          //时间
			DspNum1( (char*)&Clk.Sec[0],3,&Buffer[DS_BDig]);
			Buffer[5]|=0x08;
			Buffer[7]|=0x08;
			Buffer[2]|=0x08;
			break;         
		default:
			break;
	}
	if( (Flag.Esp & F_CH1_Reverse )||(Flag.Esp&F_CH2_Reverse) ) {Buffer[9] |= DS_Revs;}// Buffer[0] |= DS_S1;}//Energy Reverse
	if( Flag.Event & F_Op_T ) Buffer[1] |= DS_S2;  //开端钮盖
	if( Flag.Event & F_Op_C ) Buffer[0] |= DS_S1;  //开盖检测
	if( Flag.Event & F_MF ) Buffer[11] |= DS_S5;  //磁场检测
	if( Flag.Event & F_Steal_Power ) Buffer[4] |= DS_S4;  //窃电
	if( Flag.Event & F_Abn_Cu ) Buffer[3] |= DS_S3;  // 不平衡
	if( Flag.Event & F_Overcurrent ) Buffer[11] |= DS_S6;  //过电流
	
	if( Flag.Commu & F_Coming )  Buffer[10] |= 0x08;                   //Communication Flag
	if( (~P1IN & P_RelayAsk )&&( Flag.Power & F_PwrUp ))  Buffer[2] |= DS_SWITCH;            //relay control
	if( ( Flag.Relay & F_Err )||(Flag.Error & F_Fram)||(Flag.Error & F_E2Prom) ) Buffer[11] |= DS_S8;                      //Relay Control Error
	if( Flag.Disk & LowBatt ) Buffer[9] |= DS_Bat;                    //Low Battery voltage
	
	if(( Flag.Event & F_Voltage)&& ( Energy.Real_Vrms > 50.0)) Buffer[11]|=DS_S7;
	if( Flag.Run & R_PhAdj ) Buffer[11]|=DS_S7;
	
	/* Refresh LCD Buffer */
	for( i=0; i<12; i++ ) LCDMEM[i] = Buffer[i];
}

⌨️ 快捷键说明

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