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

📄 display.c

📁 msp430单片机的lcd显示程序 可形成循坏显示功能
💻 C
字号:


#include<msp430xW42x.h>
//#include<intrinsics.h>
#include"display.h"

unsigned char KeyFlag;
unsigned char LCDLayer;
static unsigned char KeyState;
static unsigned char KeyState2;

//extern unsigned char TimerB_Flag;
extern unsigned char TimerB_2s_Flag;
extern unsigned char  BasicTimer_8ms_Flag;
extern unsigned char HeatMeterAddress_10[6];
extern unsigned char TotalHeat_16[8];
extern unsigned char TotalVolume_16[8];
extern unsigned char InstantaneousFlowRate_16[8];
extern unsigned char EnterTemperature_10[4];
extern unsigned char OutTemperature_10[4];
extern unsigned char TemperatureDifference_10[4];
extern unsigned char BattleWorkTime[4];
extern unsigned char Date_10[3];
extern unsigned char Time_10[3];
extern unsigned char PasswordAndClass[4];



const unsigned char Digit[17]={
	0xEB,	//"0"
	0x60,	//"1"
	0xC7,	//"2"
	0xE5,	//"3"
	0x6C,	//"4"
	0xAD,	//"5"
	0xAF,	//"6"
	0xE0,	//"7"
	0xEF,	//"8"
	0xED,	//"9"
	0xEE,	//"A"	
	0x2F,	//"b"	
	0x8B,	//"C"	
	0x67,	//"d"	
	0x8F,	//"E"	
	0x8E,	//"F"	
	0x04,	//"-"		
//	0x06,	//"r"		

	}; 


void Initialize_LCD(void)
{
	//WDTCTL = WDTPW + WDTHOLD;        		// Stop watchdog timer
	//LCDCTL = 0x5D;
	LCDCTL = LCDON + LCD4MUX + LCDSG0_2;     	// STK LCD 4Mux, S0-S19
	P5SEL = 0xFC;                					// Common and Rxx all selected
}


void Clear_LCD(void)
{
	unsigned char i;	
	for(i=0 ; i<10;  i++) 
	{	
		LCDMEM[i] = 0x00;	//clear LCD
	}		
}

void Display_TotalHeat(void)
{	
	LCDMEM[0]=Digit[(TotalHeat_16[3]&0xf0)>>4];
	LCDMEM[1]=Digit[TotalHeat_16[3]&0x0f];		
	LCDMEM[2]=Digit[(TotalHeat_16[2]&0xf0)>>4];
	LCDMEM[3]=Digit[TotalHeat_16[2]&0x0f];	
	LCDMEM[4]=Digit[(TotalHeat_16[1]&0xf0)>>4];
	LCDMEM[5]=Digit[TotalHeat_16[1]&0x0f];				
	LCDMEM[6]=Digit[(TotalHeat_16[0]&0xf0)>>4];
	LCDMEM[7]=Digit[TotalHeat_16[0]&0x0f];  
	LCDMEM[8] =	0x10;	//kwh
	LCDMEM[9] = 	0x01 	//累计
			      |0x04;	//热量
			     
}


unsigned char LCD_Manage(void)
{
	//unsigned char i;	
	if(BasicTimer_8ms_Flag<25)
		return 0;
	BasicTimer_8ms_Flag=0;
	
	//if(!TimerB_Flag)
	//	return 0;
	//TimerB_Flag=0;	
	

	Clear_LCD();	
	switch(LCDLayer)
	{	
		case 0:
			KeyState++;			
			switch(KeyState)
			{
				case 0 :
					Display_TotalHeat();						
				break;
				case 1 :
					LCDMEM[0]=Digit[TotalVolume_16[4]&0x0f];	
					LCDMEM[1]=Digit[(TotalVolume_16[3]&0xf0)>>4];
					LCDMEM[2]=Digit[TotalVolume_16[3]&0x0f];		
					LCDMEM[3]=Digit[(TotalVolume_16[2]&0xf0)>>4];
					LCDMEM[4]=Digit[TotalVolume_16[2]&0x0f]|0x10;	
					LCDMEM[5]=Digit[(TotalVolume_16[1]&0xf0)>>4];
					LCDMEM[6]=Digit[TotalVolume_16[1]&0x0f];				
					LCDMEM[7]=Digit[(TotalVolume_16[0]&0xf0)>>4];
					LCDMEM[8] =	0x20;	//m3		
					LCDMEM[9] = 	0x01		//累计
			     					|0x08;	//流量
			     						     									
				break;	
				case 2 :		
					LCDMEM[0]=Digit[InstantaneousFlowRate_16[4]&0x0f];	
					LCDMEM[1]=Digit[(InstantaneousFlowRate_16[3]&0xf0)>>4];
					LCDMEM[2]=Digit[InstantaneousFlowRate_16[3]&0x0f];		
					LCDMEM[3]=Digit[(InstantaneousFlowRate_16[2]&0xf0)>>4];
					LCDMEM[4]=Digit[InstantaneousFlowRate_16[2]&0x0f]|0x10;	
					LCDMEM[5]=Digit[(InstantaneousFlowRate_16[1]&0xf0)>>4];
					LCDMEM[6]=Digit[InstantaneousFlowRate_16[1]&0x0f];				
					LCDMEM[7]=Digit[(InstantaneousFlowRate_16[0]&0xf0)>>4];
					LCDMEM[8] =	0x20	// m3
			     					|0x40	//  /			
								|0x80;	// h		
					LCDMEM[9] = 	0x02		//瞬时
			     					|0x08;	//流量

				break;		
				case 3 :		
					LCDMEM[2]=Digit[EnterTemperature_10[3]&0x0f]|0x10;		//温度
					LCDMEM[3]=Digit[(EnterTemperature_10[2]&0xf0)>>4];
					LCDMEM[4]=Digit[EnterTemperature_10[2]&0x0f]|0x10;	
					LCDMEM[5]=Digit[(EnterTemperature_10[1]&0xf0)>>4];
					LCDMEM[6]=Digit[EnterTemperature_10[1]&0x0f];				
					LCDMEM[7]=Digit[(EnterTemperature_10[0]&0xf0)>>4];
					LCDMEM[8] = 	0x08;//C
					LCDMEM[0] |= 0x10;    //进水

				break;
				case 4 :		
					LCDMEM[2]=Digit[OutTemperature_10[3]&0x0f]|0x10;		//温度
					LCDMEM[3]=Digit[(OutTemperature_10[2]&0xf0)>>4];
					LCDMEM[4]=Digit[OutTemperature_10[2]&0x0f]|0x10;	
					LCDMEM[5]=Digit[(OutTemperature_10[1]&0xf0)>>4];
					LCDMEM[6]=Digit[OutTemperature_10[1]&0x0f];				
					LCDMEM[7]=Digit[(OutTemperature_10[0]&0xf0)>>4];
					LCDMEM[8] =	0x08	;//C
					LCDMEM[1] |= 0x10;    //回水

				break;
				case 5 :		
					LCDMEM[2]=Digit[OutTemperature_10[3]&0x0f];		
					LCDMEM[3]=Digit[(OutTemperature_10[2]&0xf0)>>4];
					LCDMEM[4]=Digit[OutTemperature_10[2]&0x0f]|0x10;	
					LCDMEM[5]=Digit[(OutTemperature_10[1]&0xf0)>>4];
					LCDMEM[6]=Digit[OutTemperature_10[1]&0x0f]|0x10;	//温差			
					LCDMEM[7]=Digit[(OutTemperature_10[0]&0xf0)>>4];
					LCDMEM[8] =	0x08	;//C

				break;
				case 6 :
					LCDMEM[0]=Digit[(BattleWorkTime[3]&0xf0)>>4];
					LCDMEM[1]=Digit[BattleWorkTime[3]&0x0f];		
					LCDMEM[2]=Digit[(BattleWorkTime[2]&0xf0)>>4];
					LCDMEM[3]=Digit[BattleWorkTime[2]&0x0f];	
					LCDMEM[4]=Digit[(BattleWorkTime[1]&0xf0)>>4];
					LCDMEM[5]=Digit[BattleWorkTime[1]&0x0f];
					LCDMEM[6]=Digit[(BattleWorkTime[0]&0xf0)>>4];
					LCDMEM[7]=Digit[BattleWorkTime[0]&0x0f];  
					LCDMEM[8] = 	0x02		//时间
								|0x80;	// h		
					LCDMEM[9] = 	0x01; 	//累计

				break;			
				case 7 :		
					LCDMEM[0]=Digit[(Date_10[2]&0xf0)>>4];
					LCDMEM[1]=Digit[Date_10[2]&0x0f];		
					LCDMEM[2]=Digit[16];
					LCDMEM[3]=Digit[Date_10[1]&0x0f];	
					LCDMEM[4]=Digit[(Date_10[1]&0xf0)>>4];
					LCDMEM[5]=Digit[16];
					LCDMEM[6]=Digit[(Date_10[0]&0xf0)>>4];
					LCDMEM[7]=Digit[Date_10[0]&0x0f];  
					LCDMEM[8] = 	0x01; 	//日期

				break;		
				case 8 :		
					LCDMEM[0]=Digit[(Time_10[2]&0xf0)>>4];
					LCDMEM[1]=Digit[Time_10[2]&0x0f];		
					LCDMEM[2]=Digit[16];
					LCDMEM[3]=Digit[Time_10[1]&0x0f];	
					LCDMEM[4]=Digit[(Time_10[1]&0xf0)>>4];
					LCDMEM[5]=Digit[16];				
					LCDMEM[6]=Digit[(Time_10[0]&0xf0)>>4];
					LCDMEM[7]=Digit[Time_10[0]&0x0f];  			
					LCDMEM[8] = 	0x02;	//时间

				break;			
				case 9 :		
					LCDMEM[2]=Digit[14];
					LCDMEM[3]=0x06;	
					LCDMEM[4]=0x06;
					LCDMEM[5]=Digit[0];
					LCDMEM[6]=Digit[0];
					LCDMEM[7]=Digit[0];

				break;
				case 10 :		
					LCDMEM[0]=Digit[(HeatMeterAddress_10[3]&0xf0)>>4];
					LCDMEM[1]=Digit[HeatMeterAddress_10[3]&0x0f];		
					LCDMEM[2]=Digit[(HeatMeterAddress_10[2]&0xf0)>>4];
					LCDMEM[3]=Digit[HeatMeterAddress_10[2]&0x0f];	
					LCDMEM[4]=Digit[(HeatMeterAddress_10[1]&0xf0)>>4];
					LCDMEM[5]=Digit[HeatMeterAddress_10[1]&0x0f];				
					LCDMEM[6]=Digit[(HeatMeterAddress_10[0]&0xf0)>>4];
					LCDMEM[7]=Digit[HeatMeterAddress_10[0]&0x0f]|0x10;  

				break;									
				default :
					KeyState=0;
					Display_TotalHeat();		
				break;	

			}
		break;
		case 0xFF:
			KeyState2++;			
			switch(KeyState2)
			{				
				case 0 :
					LCDMEM[0]=Digit[(TotalHeat_16[3]&0xf0)>>4];
					LCDMEM[1]=Digit[TotalHeat_16[3]&0x0f];		
					LCDMEM[2]=Digit[(TotalHeat_16[2]&0xf0)>>4];
					LCDMEM[3]=Digit[TotalHeat_16[2]&0x0f];	
					LCDMEM[4]=Digit[(TotalHeat_16[1]&0xf0)>>4]|0x10;
					LCDMEM[5]=Digit[TotalHeat_16[1]&0x0f];				
					LCDMEM[6]=Digit[(TotalHeat_16[0]&0xf0)>>4];
					LCDMEM[7]=Digit[TotalHeat_16[0]&0x0f];  
					LCDMEM[8] =	0x10;	//kwh
					LCDMEM[9] = 	0x01 	//累计
			      					|0x04;	//热量			
				break;			
				case 1 :
					LCDMEM[0]=Digit[(TotalHeat_16[3]&0xf0)>>4];
					LCDMEM[1]=Digit[TotalHeat_16[3]&0x0f];		
					LCDMEM[2]=Digit[(TotalHeat_16[2]&0xf0)>>4];
					LCDMEM[3]=Digit[TotalHeat_16[2]&0x0f];	
					LCDMEM[4]=Digit[(TotalHeat_16[1]&0xf0)>>4]|0x10;
					LCDMEM[5]=Digit[TotalHeat_16[1]&0x0f];				
					LCDMEM[6]=Digit[(TotalHeat_16[0]&0xf0)>>4];
					LCDMEM[7]=Digit[TotalHeat_16[0]&0x0f];  
					LCDMEM[8] =	0x10;	//kwh
					LCDMEM[9] = 	0x01 	//累计
			      					|0x04;	//热量				
				break;
				case 2 :
					LCDMEM[0]=Digit[TotalVolume_16[4]&0x0f];	
					LCDMEM[1]=Digit[(TotalVolume_16[3]&0xf0)>>4];
					LCDMEM[2]=Digit[TotalVolume_16[3]&0x0f];		
					LCDMEM[3]=Digit[(TotalVolume_16[2]&0xf0)>>4]|0x10;
					LCDMEM[4]=Digit[TotalVolume_16[2]&0x0f];	
					LCDMEM[5]=Digit[(TotalVolume_16[1]&0xf0)>>4];
					LCDMEM[6]=Digit[TotalVolume_16[1]&0x0f];				
					LCDMEM[7]=Digit[(TotalVolume_16[0]&0xf0)>>4];
					
					LCDMEM[8] =	0x20;	//m3		
					LCDMEM[9] = 	0x01		//累计
			     					|0x08;	//流量
				KeyState2=0;			
				break;		
				default :
					KeyState2=0;	
				break;				
			}						
		break;	
		default :
			LCDLayer=0;
		break;
	}	
	return 1;
}



void Initialize_KEY(void)       //P1.3
{	
	__disable_interrupt();
	
	P1DIR &=~BIT3;
	P1IES &=~BIT3;       	//UP sliding
	P1IE |= BIT3;           	//P1.3 interrupt enable
	//_EINT();			//interrupt enable
	__enable_interrupt();		
}

#pragma vector = PORT1_VECTOR
__interrupt void KEY_Interrupt (void)
{
	if(P1IFG&BIT3)
	{	
		P1IFG &=~BIT3;
		KeyFlag=1;
	}
}













/* 
#ifdef __IAR_SYSTEMS_ICC__              	//如果编译器是IAR, 那么以下将被编译

#if __VER__ >= 200

#pragma vector = PORT1_VECTOR		//在IAR2.0以上中断函数声明

__interrupt void KEY_Interrupt (void)
{
	if(P1IFG&BIT3)
	{	
		P1IFG=0;
		//P1IFG &=~BIT3
	}

}

#else                                  			//在IAR2.0以下中断函数声明

interrupt[PORT1_VECTOR] void KEY_Interrupt (void)
{
	if(P1IFG&BIT3)
	{	
		P1IFG=0;
		//P1IFG &=~BIT3
	}
}
#endif                                  			//IAR中断函数声明结束


#endif   
*/




⌨️ 快捷键说明

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