disp.c

来自「该程序是NECupd78F9479的开发的代LCD的空调方案」· C语言 代码 · 共 588 行

C
588
字号
#include "define.h"
sreg unsigned char flag2;
#define f_1stondis flag2.0
unsigned char C_cntdis;
unsigned char M_buf;
unsigned char Coolstep;
unsigned char Drystep;
unsigned char Heatstep;
unsigned char Fanstep,Slpstep;
unsigned char T_1sec,T_1sec3,T_1sec2,T_3sec1,T_ledon;
unsigned char T_1sec1;
unsigned char Dis_ram[16];
unsigned char *add;
sreg unsigned char Lcd_buf1,Lcd_buf2,Lcd_buf3,Lcd_buf4,Lcd_buf5,Lcd_buf6,Lcd_buf7,Lcd_buf8;
sreg unsigned char Lcd_bufs1,Lcd_bufs2;

extern sreg unsigned char M_flag0;
#define f_curtpro			M_flag0.6	
extern sreg unsigned char flag;
#define f_settm flag.2
extern unsigned char C_Settime;
extern sreg unsigned char M_flag4;
#define f_SLEEP   	M_flag4.7
extern sreg unsigned char M_flag;
#define f_ton   		M_flag.3										//time set of power on
#define f_toff 		M_flag.4										//time set of power off
extern sreg unsigned char V_flag;
#define f_temp				V_flag.0
#define f_quick       V_flag.1
#define f_mode        V_flag.2
#define f_COOLonly    V_flag.3
#define f_capa        V_flag.4
extern sreg unsigned char M_flag4;
#define f_Hcoil			M_flag4.0						//flag of  One time check 

extern sreg unsigned char M_flag; 
#define f_temph   M_flag.5

extern sreg unsigned char flagkey;

#define f_slpkey 	flagkey.5

extern sreg unsigned char M_flagwot;
#define f_highwot	M_flagwot.4
extern unsigned char D_TMPsetp;
/*
=========================================================================
for ABC
=========================================================================
*/

const char Table1[12]={			
									 0b00000111,    //0   
									 0b00000110,    //1   
									 0b00000011,    //2   
									 0b00000111,    //3   
									 0b00000110,    //4   
									 0b00000101,    //5   
									 0b00000101,    //6   
									 0b00000111,    //7   
									 0b00000111,    //8   
									 0b00000111,    //9		
									 0b00000001,		//E
									 0b00000110,		//H
};
/*
=========================================================================
for DEGF
=========================================================================
*/
const char Table2[12]={
									0b00001101,		//0
									0b00000000,		//1
									0b00001110,		//2
									0b00001010,		//3
									0b00000011,		//4
									0b00001011,		//5
									0b00001111,		//6
									0b00000000,		//7
									0b00001111,		//8
									0b00001011,		//9			
									0b00001111,		//E				
									0b00000111,		//H
};

extern unsigned char M_MODset,M_MODrun,D_TMPset,M_FANsp,M_FANset;
extern sreg unsigned char M_flag; 
#define f_rmtok		M_flag.0									//remote signal receive ok
#define f_PWRon1		M_flag.1										//power on flag

void M_moddis(void);  
void M_fandis(void);  
void S_tmdis(void);   
void S_tmpdis(void);  
void cooldis(void);
void drydis(void);
void fandis(void);
void heatdis(void);
void Lcdram_ld(void);
void Lcd_bufclr(void);    
void Powerdis(void);
void Slpdis(void);
void Dsp1vol(void);


void Dspctrl()
{ 	
	//add=(volatile unsigned char *)0xfa0e;
	//*add=0b00000110;
	
	Lcd_bufclr();   
 //	Powerdis();
 	if(f_PWRon1)
 	{		if(!f_settm)
 			
 		{	M_moddis();
 			M_fandis(); 			
 			S_tmpdis();
 			Slpdis();
 		}
 	}
 	S_tmdis();
 	Lcdram_ld();			//Lcd Date update
 	Dsp1vol();
 	
  	
}

void Dsp1vol()
{
	if(f_capa)
		{if(compctrl)
			Led_cmp=1;
		else 
			Led_cmp=0;
			
			if(f_curtpro||((M_MODrun==n_Mdry||M_MODrun==n_Mcool)&&f_highwot))
				if(T_ledon==0)
					{T_ledon=5;
						Led_pro=!Led_pro;
					}
		}
}


void Powerdis()
{		Lcd_buf1=Dis_ram[14];
		Lcd_buf1&=0b00001110;
		Lcd_buf2=Dis_ram[15];
		Lcd_buf2&=0b00001110;
		if(f_PWRon1)
			Lcd_buf1|=0b00000001;
		else
			Lcd_buf2|=0b00000001;
		Dis_ram[14]=Lcd_buf1;
		Dis_ram[15]=Lcd_buf2;
}

void Lcdram_ld()
{unsigned char *Lcd_ramstart,i;

	Lcd_ramstart=(volatile unsigned char *)0xfa00;
	for(i=0;i<=15;i++)
	{	*Lcd_ramstart=0;	
		*Lcd_ramstart=Dis_ram[i];
		Lcd_ramstart++;
	}


}



void Lcd_bufclr()
{unsigned char i;
	for(i=0;i<=15;i++)
	{
			Dis_ram[i]=0;
		
	}
}

/*
=====================================================================
*/
void M_moddis()
{			M_buf=M_MODset;
		if(M_buf==4)
			{
				M_buf=M_MODrun;
				Lcd_buf1=Dis_ram[7];
				Lcd_buf1|=0b00001000;
				Dis_ram[7]=Lcd_buf1;
			}
	 switch(M_buf)
	{
				case 0: cooldis();
			 					break;
			 	case 1: drydis();
			 					break;
			 	case 2: fandis();
			 					break;
			 	case 3: heatdis();
			 					break;
			 	default:
			 					break;
	}
	
}


/*
======================================================================
*/
void cooldis()
{if(T_1sec==0)
	{	
		T_1sec=15;
		Lcd_buf1=Dis_ram[11];
		Lcd_buf1&=0x01;
		switch(Coolstep)
		{
				case 1:	
									Lcd_buf1|=0b00001000;			//For X1 segment
									break;
				case 2:	
									Lcd_buf1|=0b00000100;			//For X2 segment
									break;
				case 3:	
									Lcd_buf1|=0b00000010;			//For X3 segment
									break;				
				case 0:   break;					
				default:  
									break;
		}
			Dis_ram[11]=Lcd_buf1;
			Lcd_buf3=Lcd_buf1;
			Coolstep++;
		if(Coolstep>=4)
			Coolstep=0;		
	}
else
		Dis_ram[11]=Lcd_buf3;
		Lcd_buf1=Dis_ram[4];
		Lcd_buf1|=0b00000001;								//for lcd 'cool' segment
		Dis_ram[4]=Lcd_buf1;
}
/*
======================================================================
*/
void drydis()
{	register unsigned char reg1,reg2,*Tabadd;
	if(T_1sec2==0)
		{	T_1sec2=15;
			Lcd_buf1=Dis_ram[14];
			Lcd_buf1&=0b00000111;
			Lcd_buf2=Dis_ram[13];
			Lcd_buf2&=0b00000000;
			switch(Drystep)
				{	
					case 0:	Lcd_buf1|=0b00001000;
									break;
					case 1: Lcd_buf2|=0b00001000;
									break;
					case 2: 
									if(f_highwot)						//only in dry mode
									Lcd_buf2|=0b00000100;
									else
									Lcd_buf2|=0b00000011;
									break;
					case 3: break;
					default: break;
				}	
			Drystep++;
			if(Drystep>=4)
				Drystep=0;
		
			Lcd_buf8=Dis_ram[13]=Lcd_buf2;			
			if(f_highwot)
					Lcd_buf8&=0b00001100;	
			else
					Lcd_buf8&=0b00001011;
			Lcd_buf7=Dis_ram[14]=Lcd_buf1;
			Lcd_buf7&=0b00001000;
		}
	else
		{	Dis_ram[13]|=Lcd_buf8;
			Dis_ram[14]|=Lcd_buf7;
		}
	if(f_highwot)
				{
					reg1=11;
					reg2=8;					
					Tabadd=(unsigned char *)(Table1+reg1);		
					Dis_ram[1]=*Tabadd;
					Tabadd=(unsigned char *)(Table2+reg1);
					Dis_ram[0]=*Tabadd;
					Tabadd=(unsigned char *)(Table1+reg2);		
					Dis_ram[3]=*Tabadd;
					Tabadd=(unsigned char *)(Table2+reg2);
					Dis_ram[2]=*Tabadd;				
				}
		Lcd_buf1=Dis_ram[8];
		Lcd_buf1|=0b00000001;
		Dis_ram[8]=Lcd_buf1;
		
	
}
/*
======================================================================
*/

void fandis()
{
	M_fandis();
	
}
/*
=====================================================================
*/

void heatdis()
{
	
if(T_1sec3==0)
	{
			T_1sec3=15;
			Lcd_buf1=Dis_ram[10];			//X13
			Lcd_buf1&=0b00001011;
			Lcd_buf2=Dis_ram[14];
			Lcd_buf2&=0b00001001;			//X14,X15
			switch(Heatstep)
			{	
				case 0: break;    
					
				case 1: Lcd_buf2|=0b00000010;		//X15
								break;
				case 2: Lcd_buf2|=0b00000110;		//X15,X14
							 	break;
				case 3: Lcd_buf2|=0b00000110;		//X15,X14,X13
								Lcd_buf1|=0b00000100;
								break;
				default: break;		
			}
			Heatstep++;
			if(Heatstep>=4)
				Heatstep=0; 
			Lcd_buf5=Dis_ram[10]=Lcd_buf1;
			Lcd_buf5&=0b00000100;
			Lcd_buf6=Dis_ram[14]=Lcd_buf2;
			Lcd_buf6&=0b00000110;
		
	}
	else
		{	Dis_ram[10]|=Lcd_buf5;
			Dis_ram[14]|=Lcd_buf6;
		}
	
	
	Lcd_buf1=Dis_ram[8];
	Lcd_buf1|=0b00000010;
	Dis_ram[8]=Lcd_buf1;
	
}

/*
======================================================================
*/





/*
======================================================================
*/
void M_fandis()
{
if(T_1sec1==0)
	{
		T_1sec1=1;
		Lcd_buf1=Dis_ram[12];
		Lcd_buf1&=0b00000001;
		switch(Fanstep)
				{
						case 0:	
											Lcd_buf1|=0b00001001;			//For X17 segment
											break;
						case 1:	
											Lcd_buf1|=0b00000101;			//For X18 segment
											break;
						case 2:	
											Lcd_buf1|=0b00000011;			//For X19 segment
											break;
						default:   break;
				}
					Dis_ram[12]=Lcd_buf1;
					Lcd_buf4=Lcd_buf1;
					Fanstep++;
				if(Fanstep>=3)
					Fanstep=0;	
	}
	else
		{Dis_ram[12]=Lcd_buf4;
		}
		
		Lcd_buf1=Dis_ram[9];
		Lcd_buf1&=0b00000000;
		switch(M_FANset)
			{
						case 3:		Lcd_buf1|=0b00000100;			//For X17 segment
											break;
						case 2:		Lcd_buf1|=0b00000010;			//For X18 segment
											break;
						case 1:		Lcd_buf1|=0b00000001;			//For X19 segment
											break;
						default:  break;
			}
		Dis_ram[9]=Lcd_buf1;
		if(M_MODset!=n_Mfan)
			return;
		Lcd_buf1=Dis_ram[4];
		Lcd_buf1|=0b00000010;
		Dis_ram[4]=Lcd_buf1;
}

/*
=======================================================================
*/
void S_tmpdis()
{register unsigned char reg1,reg2,*Tabadd,reg3=D_TMPset;
	if(M_MODset==n_Mheat||M_MODset==n_Mcool)
	{
		if(f_temp)
		{	reg3=D_TMPsetp;
			reg3=reg3+61;					
		}
		reg1=reg3/10;
		reg2=reg3%10;			
		if(f_Hcoil)
		{	reg1=10;
			reg2=3;
		}
		if(f_highwot)
		{
			reg1=11;
			reg2=8;
		}
		Tabadd=(unsigned char *)(Table1+reg1);		
		Dis_ram[1]=*Tabadd;
		Tabadd=(unsigned char *)(Table2+reg1);
		Dis_ram[0]=*Tabadd;
		Tabadd=(unsigned char *)(Table1+reg2);		
		Dis_ram[3]=*Tabadd;
		Tabadd=(unsigned char *)(Table2+reg2);
		Dis_ram[2]=*Tabadd;
		
	
		if(f_temp)
			{	reg1=Dis_ram[3];
				reg1|=0b00001000;
				Dis_ram[3]=reg1;
			}
		else
			{	reg1=Dis_ram[4];
				reg1|=0b00001000;
				Dis_ram[4]=reg1;
			}
		Lcd_buf1=Dis_ram[1];
		Lcd_buf1|=0b00001000;
		Dis_ram[1]=Lcd_buf1;		
	}
}
/*
======================================================================
*/
void S_tmdis()
{	register unsigned char reg1=0,reg2=0,reg3=0,reg4=0,*Tabadd;
	
	//if(!f_SLEEP)
	//	{if(!f_slpkey)
	//		if(!f_settm)
	//			if(!f_toff)
	//				C_Settime=0;
	//	}
			
	if(C_Settime>0&&C_Settime<=48)
		{	reg1=C_Settime/2;
			reg2=C_Settime%2;
			reg3=reg1/10;
			reg4=reg1%10;
		
	if(reg2==1)
		Dis_ram[15]|=0b00001010;
	if(reg2==0)
		Dis_ram[15]|=0b00000110;
	if(reg3==2)
		Dis_ram[7]|=0b00000011;
	if(reg3==1)
		Dis_ram[7]|=0b00000110;		
	
			Tabadd=(unsigned char *)(Table1+reg4);
			Dis_ram[5]=*Tabadd;
			Tabadd=(unsigned char *)(Table2+reg4);
			Dis_ram[6]=*Tabadd;
	}
	if(C_Settime!=0)
	{	//	if(f_PWRon1)
				//{	
					if(f_settm)			//time turn on set
					{		//f_PWRon1=0;
							reg1=Dis_ram[14];			///time on
							reg1|=0b00000001;
							Dis_ram[14]=reg1;
							f_ton=1;
							f_toff=0;
					}	
			//	} 
			
				if(f_SLEEP&&f_PWRon1||f_slpkey||f_toff)
					{				
						reg1=Dis_ram[15];				// time off 
						reg1|=0b00000001;
						Dis_ram[15]=reg1;
						f_toff=1;
						f_ton=0;
					}
	
				reg1=Dis_ram[5];
				reg1|=0b00001000;
				Dis_ram[5]=reg1;
	}
}
/*
======================================================================
*/

void Slpdis()
{	
	if(!f_SLEEP)
		{
				Dis_ram[8]&= 0b11110111;    
				
			
		}
	else
		{
				Dis_ram[8]|= 0b00001000;     
			if(T_3sec1==0)
				{T_3sec1=4;
					switch(Slpstep)
					{
						case 0:
										Dis_ram[10]|=0b00001001;
										Lcd_bufs1=0b00001001;
										Lcd_bufs2=0;
										break;
						case 1:	
										Dis_ram[10]|=0b00000001;
										Dis_ram[11]|=0b00000001;
										Lcd_bufs1=0b00000001;
										Lcd_bufs2=0b00000001;
										break;
						case 2:	
										Dis_ram[10]|=0b00001010;
										Lcd_bufs1=0b00001010;
										Dis_ram[11]|=0b00000001;
										Lcd_bufs2=1;
										break;
						default:
										break;
										
					}
						Slpstep++;
					if(Slpstep>=3)
						Slpstep=0;
				}
			else
					{		
							Dis_ram[10]|=Lcd_bufs1;
							Dis_ram[11]|=Lcd_bufs2;
					}
						
				
		}
}

⌨️ 快捷键说明

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