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 + -
显示快捷键?