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

📄 frigwndw.c

📁 pic单片机实现的TCP/IP协议
💻 C
📖 第 1 页 / 共 3 页
字号:

//***********************************************************//
//                   Frigidaire窗机控制                      //
//             cpu: NEC uPD789104A  clock: 4MHz              //
//                    Main, C Program V2.6                   //
//                by ZhangZhihua   2003.06.15                //
//***********************************************************//


//#pragma	PC(9104A)
#ifdef __K0S__
#pragma sfr
#endif
#pragma asm

// CPU管脚使用分布及定义
//
//                                          78F9116
//                           __________________ __________________
//                          |                  U                  |
//            REMOTE——— 1|P23/INTP0/CPT20/^SS20  P22/SI20/RXD20|28 ———BUTTON COM1
//            BUZZER——— 2|P24/INTP1/TO80/TO20    P21/SO20/TXD20|27 ———Filter Plus
//        ZERO CROSS——— 3|P25/INTP2/TI80      P20/^SCK20/ASCK20|26 ———LED COM2
//                  ——— 4|AVDD                              P11|25 ———FAN
//         ROOM TEMP——— 5|P60/ANI0                          P10|24 ———COMPRESSOR
//      DEFROST TEMP——— 6|P61/ANI1                          VDD|23 ———
//      LINE VOLTAGE——— 7|P62/ANI2                          VSS|22 ———
//       BUTTON COM2——— 8|P63/ANI3                          CL1|21 ———
//               GND——— 9|AVSS                              CL2|20 ———
//       7-SEG COM2——— 10|P50                           IC(Vpp)|19 ———
//       7-SEG COM1——— 11|P51                            ~RESET|18 ———
//         LED COM1——— 12|P52                               P03|17 ———EEPROM SDA(DATA)
// FILTER CHECK LED——— 13|P53                               P02|16 ———EEPROM SCL(CLOCK)
//        164 CLOCK——— 14|P00                               P01|15 ———164 DATA
//                          |_____________________________________|
//

// I/O port address define

#define PIO_LEDSensor	P5.3	// 
#define PIO_FiltPlus	P2.1	// 

// constant define
#define ON			1
#define OFF			0
#define TRUE		1
#define FALSE		0

#define P0IOMODE	0b11111000  // P00~P02 -- (out), P03 -- (input) 
#define P0INIT		0b11111100  // 
#define P0PULLUP	0b00000000  // no pullup
#define P1IOMODE	0b11111100  // P10~P11 -- (out)
#define P1INIT		0b11111100  // 
#define P2IOMODE	0b11101100  // P20~P21 -- (out), P22~P23 -- (input), P24 -- (output), P25 -- (input)
//#define P2IOMODE	0b11101110  // P20 -- (out), P21~P23 -- (input), P24 -- (output), P25 -- (input)
#define P2PULLUP	0b00101000  // P23, P25 -- (pullup)
#define P2INIT		0b00101100  // 
//#define P2INIT		0b00101110  //
#define P5IOMODE	0b11110000  // P50~P53 -- (out)
#define P5INIT		0b00001111  // 

#define T80MODE		0b00000010	// clock:Fx/8 -- 2.0US (Fx = 4MHz)
#define T80TM125US	63			// 125US/2.0US = 62.5 ---> 63,126US
#define T20MODE		0b00000000	// clock:Fx/4 -- 1.0US (Fx = 4MHz), no capture, no output, no convert

#define INTWDTEN	0x01	// MK0.0
#define INTP0EN		0x02	// MK0.1
#define INTP1EN		0x04	// MK0.2
#define INTP2EN		0x08	// MK0.3
#define INTSR20EN	0x10	// MK0.4
#define INTST20EN	0x20	// MK0.5
#define INTTM80EN	0x40	// MK0.6
#define INTTM20EN	0x80	// MK0.7
#define INTAD0EN	0x01	// MK1.0


// LED通道值 0 ~ 7
#define	LEDSLOW		0
#define	LEDFAST		1
#define	LEDPWRSAV	2
#define	LEDCOOL		3
#define	LEDAUTO		4
#define	LEDSLEEP	5
#define	LEDFAN		6
#define	LEDTIMER	7
#define	LEDPLUS		6
#define	LEDCHECK	5

// 按键通道值 0 ~ 15
#define	BTNCDOWN	0
#define	BTNCUP		1
#define	BTNCSLOW	2
#define	BTNCFAST	3
#define	BTNCNODEF	4
#define	BTNCMODE	5
#define	BTNCAUTO	6
#define	BTNCSLEEP	7
#define	BTNCPLUS	8
#define	BTNCTIMER	9
#define	BTNCCHECK	10
#define	BTNCPWR		11
#define	BTNCSEL1	12
#define	BTNCSEL2	13
#define	BTNCSEL3	14
#define	BTNCSEL4	15
// 按键值 0 ~ 15
#define	BTNPWR		0x88
#define	BTNSLOW		0x20
#define	BTNFAST		0x80
#define	BTNAUTO		0x0f0
#define	BTNCHECK	0x4
#define	BTNCOOL		0x90
#define	BTNPWRSAV	0x40
#define	BTNSLEEP	0x0
#define	BTNFAN		0x0e0
#define	BTNTIMER	0x60
#define	BTNDOWN		0x0b0
#define	BTNUP		0x70
#define	BTNPLUS		0x0f1
#define	BTNMODE		0x0f2
#define	BTNNODEF	0x0f3
#define	BTNIFON		0x0f5
#define	BTNIFTP		0x0f6
#define	BTNIFOFF	0x0f7
#define	BTNSEL1		0x0ff
#define	BTNSEL2		0x0ff
#define	BTNSEL3		0x0ff
#define	BTNSEL4		0x0ff

#define	KEYDEPRESS	0b00100000
#define	KEYPRESSED	0b01000000
#define	KEYANSWER	0b10000000

// 风机速度常数
#define	FANLOW		10
#define	FANMID		50
#define	FANHIGH		99
#define	TRIGWIDE	1500	// 1500uS
#define	TRIGNARROW	600		// 600uS
#define	TRIGW2N		1500	// 1500uS
#define	TRIGFAST	340		// 340uS

#define	RATEVOL1	0x0AF	// 230V/115V
#define	RATEVOL2	0x09C	// 230V/115V
#define	RATEVOL3	0x091	// 230V/115V
#define	RATEVOL4	0x085	// 230V/115V

// 设定温度限值,摄氏16 ~ 32,华氏60 ~ 90
#define	CTEMPSETL	16
#define	CTEMPSETH	32
#define	FTEMPSETL	60
#define	FTEMPSETH	90
// 化霜温度,华氏温度->摄氏
#define	TEMP30F		60		// 30F = -1℃
#define	TEMP55F		110		// 55F = 12.8℃

#define	TEMP60F		71		// 15.6℃
#define	TEMP62F5	74		// 16.9℃
#define	TEMP61F5	73		// 16.4℃
#define	TEMP59F		70		// 15℃
#define	TEMP2F5		5		//
#define	TEMP1F5		3		//
#define	TEMPN1F		2		//
#define	TEMP0F5		1		//
#define	TEMP2F		4		//
#define	TEMP4F		8		//
// 数码管特殊显示信息
#define	T1ERRCODEH	0x6D	// 室温传感器故障代码显示,高位 --- 5
#define	T1ERRCODEL	0x3F	// 室温传感器故障代码显示,低位 --- 0
#define	T2ERRCODEH	0x7D	// 管温传感器故障代码显示,高位 --- 6
#define	T2ERRCODEL	0x80	// 管温传感器故障代码显示,低位 --- .
#define	BYPASSH		0x73	// bypass模式显示,高位 --- P
#define	BYPASSL		0x7C	// bypass模式显示,低位 --- b
#define	PWRERRH		0x79	// 电源故障显示,高位 --- E
#define	PWRERRL		0x50	// 电源故障显示,低位 --- r
#define	MEMERRH		0x79	// EEPROM故障显示,高位 --- E
#define	MEMERRL		0x5C	// EEPROM故障模式显示,低位 --- o

#define	DBYPASS		0x80
#define	DFANSET		0x40
#define	DTEMPSET	0x20
#define	DTIMESET	0x10
// 时间常数
#define	MAXWAIT		0x0ff	// 255*125us = 31.875ms
#define	ZCROSSMIN	80		// 50Hz--100, 60Hz--120
#define	BEEPTIME	30		// 300Ms/10ms
#define TIM100MS	10		// 100ms/10ms
#define TIM160MS	25//16		// 160ms/10ms
#define TIM200MS	20		// 200ms/10ms
#define TIM150MS	15		// 150ms/10ms
#define TIM330MS	33		// 330ms/10ms
#define TIM350MS	35		// 350ms/10ms
#define	TIM1S		100		// 1S/10ms
#define	TIM2S5		250		// 2.5S/10ms
#define	TIMK1S		10		// 1S/100ms
#define	TIMK2S		20		// 2S/100ms
#define	TIM2S		20		// 2S/100ms
#define	TIMK4S		40		// 4S/100ms
#define	TIMD2S5		16		// 2.5S/xxxms
#define	TIMD5S		35		// 5S/xxxms
#define	TIM3S		3		// 3S/1S
#define	TIM5S		5		// 5S/1S
#define	TIM10S		10		// 10S/1S
#define	TIM30S		30		// 30S/1S
#define	TIM60S		60		// 60S/1S
#define	TIM1MIN		60		// 1M/1S
#define	TIM200S		200		// 200S/1S
#define	TIM3MIN		18		// 3M/10S
#define	TIM5MIN		30		// 5M/10S
#define	TIM2MIN		12		// 2M/10S
#define	TIM10MIN	60		// 10M/10S
#define	TIM30MIN	180		// 30M/10S
#define	TIM60MIN	360		// 60M/10S
#define	TIM8H		2880	// 8H/10S
#define	TIM250H		250


extern bit b_BT10MS;
extern bit b_ErrEeprom, b_SysRestore;
extern bit b_ErrT1Sensor, b_ErrT2Sensor, b_T2Open;
extern bit b_RTDataOk, b_RTSameCode, b_RTRepeat;


bit b_TestRun;
bit b_FanCycle;
bit b_FanOut;
bit	b_CompOut;
bit	b_CompPort;
bit	b_FiltOut;
bit	b_Defrost;
bit	b_AutoFan;
bit	b_ModeCool;
bit	b_ModePwrSav;
bit	b_ModeSleep;
bit	b_ModeFan;
bit	b_Bypass;
bit	b_Runing;
bit	b_IFeel;
bit	b_F2C2F;
bit b_DispCgrade;
bit	b_RunTimer;
bit	b_TimerTemp;
bit b_TimerTempA;
bit	b_KeyRepeatA;
bit	b_KeyRepeatB;
bit	b_NewKey;
bit b_TempSetChg;
bit b_RTKeyHold;
bit	b_IsRepeatA;
bit	b_IsRepeatB;
bit	b_SysBack;
bit	b_ErrSysData;
bit b_ErrSystem;

bit b_BTimer02S;
bit	b_BTimer1S;
bit	b_BTimer10S;
bit	b_BTimer60S;

extern unsigned char n_ADMin;
extern unsigned char n_ADMax;
extern unsigned char n_ADData[2];
extern unsigned char n_Button[16];
extern unsigned char n_RTLast[6];
extern unsigned char n_LEDDisp[2];
extern unsigned char n_NumDisp[2];
extern unsigned char n_SysData[];
extern unsigned char n_SysBack[];
extern unsigned char n_ZCrossCnt;

extern unsigned  n_TrigDelay;
extern unsigned  n_TrigDurat;

unsigned char n_GenBuf;

unsigned char n_BT01SCnt;
unsigned char n_BT02SCnt;
unsigned char n_BT1SCnt;
unsigned char n_BT10SCnt;
//unsigned char n_BT60SCnt;

unsigned char n_TempSet;
unsigned char n_TempSetD;
unsigned char n_IFTemp;
unsigned char n_FanSpeed;
unsigned char n_FanSel;
unsigned char n_FanSelAdj;
unsigned char n_VolLast;
unsigned char n_TimerSet;

unsigned char n_KeyInput;
unsigned char n_RTKeyLast;
unsigned char n_DispMode;
unsigned char n_DispTime;

unsigned char n_BeepTime;

unsigned char n_LEDIFDelay;
unsigned char n_LEDIFFlash;
unsigned char n_IFeelTime;
unsigned char n_TestStep1S;
unsigned char n_TempChg3S;
unsigned char n_TempDisp2S;
unsigned char n_SysBack10S;

unsigned char n_Restore1S;
unsigned char n_Frost1S;
unsigned char n_Defrost1S;
unsigned char n_CompWaitCnt;
unsigned char n_Comp1Min;
unsigned char n_Comp3Min;
unsigned char n_Comp5Min;
unsigned char n_FanFst035S;
unsigned char n_Fan30SCnt;
unsigned char n_FanStop3S;
unsigned char n_FanCycleCnt;
unsigned char n_Fan30Min;
unsigned char n_VolAdj5S;
unsigned char n_Fan1MinCnt;
unsigned char n_KeyRepeatA;
unsigned char n_KeyRepeatB;
unsigned char n_KeyRT200MS;
unsigned char n_KeyHold2S;
unsigned char n_KeyHold4S;
unsigned char n_KeyUPWait;
unsigned char n_KeyDNWait;
unsigned char n_Timer30Min;
unsigned n_SleepTime;
unsigned n_LEDIFLight;

static	const	unsigned char	TBL_Button[16];
static	const	unsigned char	TBL_FanSelAdj[4][13];
static	const	unsigned char	TBL_PwrVolAdj[4][18];
static	const	unsigned	TBL_PwrAdjTrig[18];
static	const	unsigned	TBL_LEDBright[36];
static	const	unsigned	TBL_TrigD[27];
static	const	unsigned char	TBL_Trig[27][18];


extern void BtnDisp(void);
extern void IF_LED(void);
extern void ADSample(void);
extern void TempToDisp(void);
extern void TpSetToDisp(void);
extern void SpeedToDisp(void);
extern void TimeToDisp(void);
extern void TempF2C(void);
extern void TempD2S(void);
extern void TpSetDC2F2C(void);
extern void ReadEeprom(void);
extern void WriteEeprom(void);
extern void RTSignWait(void);

void DeviceInit(void);
void DataInit(void);

void TimerProc(void);
void Display(void);
void LEDIFStart(void);
void GetIFTemp(void);
void IFTempProc(void);
void TempDisp(void);
void SysDataBack(void);
void FanOut(void);
void CompOut(void);
void FiltOut(void);
void Defrost(void);
void FanVolAdj(void);
void FanSpeed(void);
void KeyDeal(void);
void ModeDeal(void);
void IsRepeat(void);

void main()
{
    __asm("\tdi");
#asm
	movw	hl, #0FE00H	    ; RAM start, SADDR RAM start #0FE20H
?LRamClr:					; RAM memory clear
	xor		a, a
	mov		[hl], a
	incw	hl
	movw	ax, hl
	cmpw	ax, #0FF00H	    ; SADDR RAM end  #0FEFFH
	bc	$?LRamClr

    movw	ax, #0FEFFH
    movw	sp, ax
#endasm

    DeviceInit();
    DataInit();
    __asm("\tei");

    for(;;){

		RUN = 1;
		RTSignWait();
		TimerProc();
		ADSample();
		IFTempProc();
		KeyDeal();
		ModeDeal();
		Display();
		BtnDisp();
		IF_LED();
		if(!n_VolAdj5S){
			n_VolAdj5S = TIM60S;
			FanVolAdj();
		}
		FanSpeed();
		FanOut();
		Defrost();
		CompOut();
		FiltOut();
		SysDataBack();
	//	IF_LED();
    }
	
}

void DeviceInit()
{
    PCC = 0;
//	CSS = 0;
//  SCKM = 0;

// Watchdog timer
//    TCL2 = 0x02;			// Time Interval:2^13/Fx = 1.6384mS (Fx=5MHz)
	TCL2 = 0x06;			// Time Interval:2^17/Fx = 32.8mS (Fx=4MHz)
	TMIF4 = 0;
    WDTM = 0b00011000;		// reset when overflow

// 通用端口
    P0 = P0INIT;
    PM0 = P0IOMODE;
	P1 = P1INIT;
    PM1 = P1IOMODE;
    P2 = P2INIT;
    PUB2 = P2PULLUP;
    PM2 = P2IOMODE;
    P5 = P5INIT;
    PM5 = P5IOMODE;
/*
// UART通讯
    PORT_REDE = 1;			// receive mode
    CSIM20 = 0x0;
    ASIM20 = 0b00001000;    // 8 bit data 1 stop bit
    BRGC20 = 0x60;			// 2046 Bauds
    TXS20 = 0xff;
*/

// AD转换
    ADM0 = 0b00000000;		// STOP, Convert time:144/Fx = 34.37uS
	ADS0 = 0;				// select channel 0

    TMC80 = T80MODE;
    CR80 = T80TM125US;
	TCE80 = 1;

	TMC20 = T20MODE;

//    INTM0 = INTM0P1F;
    IF0 = 0;
    IF1 = 0;
	INTM0 = 0;
    MK0 = ~(/*INTWDTEN+*/INTP0EN/*+INTP1EN*/+INTP2EN/*+INTSR20EN+INTST20EN*/+INTTM80EN/*+INTTM20EN*/);
    MK1 = 0xFF;				/*INTAD0EN*/

}



void DataInit(void)
{

    n_ADMax = 0;
    n_ADMin = 0xff;
    ADCS0 = TRUE;				// ADM0.7, start AD convert
	n_Comp3Min = TIM3MIN;
	n_Fan30Min = TIM30MIN;
	n_Timer30Min = TIM30MIN;
	n_RTKeyLast = n_KeyInput = 0x0ff;
	n_VolAdj5S = TIM10S;

	Display();

	for(n_GenBuf=100; n_GenBuf>0; n_GenBuf--){
		BtnDisp();
		ADSample();
	}
	if(n_Button[BTNCSEL1] & KEYPRESSED) n_FanSel |= 0x01;
	if(n_Button[BTNCSEL2] & KEYPRESSED) n_FanSel |= 0x02;
	if(n_Button[BTNCSEL3] & KEYPRESSED) n_FanSel |= 0x04;
	if(n_Button[BTNCSEL4] & KEYPRESSED) n_FanSel |= 0x08;
	
//	b_SysRestore = 0;
	ReadEeprom();
	if(b_ErrEeprom) ReadEeprom();
	if(b_ErrEeprom){
		b_ErrSysData = 1;
		n_SysData[0] =RATEVOL1; 
		n_SysData[1] =RATEVOL2;
		n_SysData[2] =RATEVOL3;
		n_SysData[3] =RATEVOL4;
		n_SysData[4] =0;
//		n_SysData[5] =0;
	}
	n_VolLast = n_SysData[0];
	n_FanSelAdj = 5;

	b_SysRestore = 1;
	ReadEeprom();
	if(b_ErrEeprom) ReadEeprom();
	if(!b_ErrEeprom){
		n_TempSetD = n_SysBack[0];
		n_FanSpeed = n_SysBack[1];
		if(n_SysBack[2] & 0x01) b_ModeFan = 1;
		if(n_SysBack[2] & 0x02) b_ModeCool = 1;
		if(n_SysBack[2] & 0x04){ b_ModePwrSav = 1; /*n_FanCycleCnt = TIM10MIN;*/}
		if(n_SysBack[2] & 0x08) b_ModeSleep = 1;
		if(n_SysBack[3] & 0x01) b_AutoFan = 1;
		if(n_SysBack[3] & 0x02) b_DispCgrade = 1;
		if(n_SysBack[3] & 0x04){ b_RunTimer = 1; n_TimerSet = n_SysBack[4];}
		if(n_SysBack[3] & 0x08){ n_Restore1S = TIM1S+1;}//b_Runing = 1; n_BeepTime = BEEPTIME;}
		if(n_SysBack[3] & 0x10) b_FiltOut = 1;
//		if(n_SysBack[3] & 0x80) b_Filt30Min = 1;
//		n_CheckTime = n_SysBack[5];
		TempD2S();

	}
	else{
		n_TempSet = 120;
		n_TempSetD = 60;
		n_FanSpeed = FANHIGH;			//
		b_ModeCool = 1;
		b_DispCgrade = 0;
		n_SysBack[3] &= ~0x80;
		n_SysBack[5] = 0;

		SysDataBack();
	}

}

void SysDataBack()
{
	if(!b_SysBack) return;
	b_SysBack = 0;
	n_SysBack[0] = n_TempSetD;
	n_SysBack[1] = n_FanSpeed;
	n_SysBack[2] = 0;
	if(b_ModeFan) n_SysBack[2] |= 0x01;
	if(b_ModeCool) n_SysBack[2] |= 0x02;
	if(b_ModePwrSav) n_SysBack[2] |= 0x04;
	if(b_ModeSleep) n_SysBack[2] |= 0x08;
	n_SysBack[3] &= 0x80;		// Filter 30分钟计时
	if(b_AutoFan) n_SysBack[3] |= 0x01;
	if(b_DispCgrade) n_SysBack[3] |= 0x02;
	if(n_TimerSet) n_SysBack[3] |= 0x04;
	if(b_Runing) n_SysBack[3] |= 0x08;
	if(b_FiltOut) n_SysBack[3] |= 0x10;
	n_SysBack[4] = n_TimerSet;

#asm
	mov		c, #6	; total 8bytes
	movw	ax, #_n_SysBack
	movw	hl, ax
	xor		a, a
	mov		x, a
?LSysBk01:
	add		a, [hl]
	bnc		$?LSysBk02
	inc		x
?LSysBk02:
	incw	hl
	dbnz	c, $?LSysBk01
	add		a, #2eh
	bnc		$?LSysBk03
	inc		x
?LSysBk03:
	mov		[hl], a
	xch		a, x
	mov		[hl+1], a

#endasm
	b_SysRestore = 1;
	WriteEeprom();
//	if(b_ErrEeprom) WriteEeprom();

}


void Display()
{
	if(!b_Runing){
		if(b_RunTimer){
			n_LEDDisp[0] = (1<<LEDCOOL | 1<<LEDTIMER);
			if(b_TimerTemp) TpSetToDisp();
			else TimeToDisp();
		}
		else{
			n_LEDDisp[0] = 0x0;
			n_NumDisp[0] = 0x0;
			n_NumDisp[1] = 0x0;
		}
//		PIO_LEDSensor = 1;
		n_LEDIFDelay = 0;

⌨️ 快捷键说明

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