📄 display.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 + -